IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 【无标题】 -> 正文阅读

[游戏开发]【无标题】

3DMax坐标系转换为Unity坐标系

3DMax是右坐标系,并且Z轴向上
在这里插入图片描述
Unity 是左手坐标系,并且Y轴向上
在这里插入图片描述
在导出FBX文件的时候3DMax是可以指定Y,Z轴向上的在这里插入图片描述
问题是unity里面X轴会旋转-90度,而这个结果是我们不想要的。而这个问题就出在

  1. Max是Z轴向上的
  2. 导出Y轴向上设置Max直接把X旋转了90度,而这个时候物体也一起旋转了90度
  3. 为了不让物体旋转,在FBX导入的时候X轴旋转-90来把物体扶正

解决方案

仅旋转物体的pivot 轴向(X会旋转-90 那么X轴提前旋转90 这样在Unity里面抵消为0),经过实验这样是可行的。
在这里插入图片描述

完整脚本

try(cui.unRegisterDialogBar ToolTest)catch()

try(DestroyDialog ToolTest)catch()


fn RotatePivot obj x y z absolute:false =
(
	-- store the object's position for later
	p = obj.pos
	
	if absolute do
	(
		-- store the object's rotation as an offset from the
		-- identity matrix (aka zero world transform)
		offsetrot = inverse (obj.rotation * inverse (matrix3 1))
		
		-- use the stored offset to zero the pivot rotation
		-- in world coords. after this step, the supplied x y z 
		-- will be an absolute offset from world coords:)
		obj.rotation *= offsetrot
		obj.objectoffsetrot *= offsetrot
	)
	
	-- get the supplied x y z degrees as a quaternion offset.
	-- the inversion changes the rotation from a right-handed 
	-- coordinate system to the expected left-handed system.
	-- Rotation in Maxscript sure is tricky!
	rot = inverse ((eulerangles x y z) as quat)
	
	-- finally, apply the final offset to the object's pivot.
	-- Basically, we're transforming the whole object, and then
	-- using .objectoffsetrot to backtransform just the object's 
	-- geometry.  Pretty neat, huh?
	obj.rotation *= rot
	obj.objectoffsetrot *= rot
	
	-- set the object to it's original position
	obj.pos = p
	
	return ok
)

fn getRoot node = if isvalidnode node do (while node.parent != undefined do node = node.parent; node)

rollout ToolTest "ToolTest"
(
	
	button btn3 "导出选择物体"width:150
	


	on btn3 pressed do
	(
		objs = selection as Array
		if objs.count == 0 then (messageBox "需要选择指定物体!!!")
		else
		(
			names = ""
			--maxops.pivotmode = #pivotonly
			For obj in objs do
			(
				--only change root
				root = getRoot(obj)
				names = root.name
				--children unlink
				childers = root.children
				--save childers
				saveChilders = #()
				join saveChilders childers
				For chi in childers do
				(
					chi.parent = ()
					
				)
				RotatePivot root 0 0 180
				RotatePivot root 90 0 0
				
				--children link
				For chi in saveChilders do
				(
					chi.parent = root
				)
			
			)
	
			--save file path
			path = getSaveFileName caption:"保存文件路径选择" types:"*.fbx" filename:names
			Print path
			if undefined == path then (messageBox "请选择保存路径")
			else
			(
				FBXExporterSetParam "ASCII"   False
				FBXExporterSetParam "Cameras" False
				FBXExporterSetParam "Lights"  False
				FBXExporterSetParam "Skin" true
				FBXExporterSetParam "ExportAnimationOnly" false
				FBXExporterSetParam "ConvertUnit" "m"
				exportFile path #noPrompt selectedOnly:true using:FBXEXP
			)
			
	
	
			--export after
			For obj in objs do
			(
				--only change root
				root = getRoot(obj)
				--children unlink
				childers = root.children
				--save childers
				saveChilders = #()
				join saveChilders childers
				For chi in childers do
				(
					chi.parent = ()
					
				)
				RotatePivot root -90 0 0
				RotatePivot root 0 0 -180
				--children link
				For chi in saveChilders do
				(
					chi.parent = root
				)
			
			)	
		)
		
	)
)
CreateDialog ToolTest
cui.registerDialogBar ToolTest
cui.dockDialogBar ToolTest #cui_dock_left

脚本使用步骤

  • 把插件脚本放入启动文件夹

    • 列如:C:\Users\用户名\AppData\Local\Autodesk\3dsMax\max安装版本\ENU\scripts\startup
    • 插件名称 文件名.ms
  • 重启Max

  • 选择要导出的物体

  • 点击导出选择物体按钮

    • 会弹出选择保存路径窗口,现在保存路径即可
    • 可以自由拖拽窗口放在喜欢的位置

在这里插入图片描述

阅读链接

附上在解决问题过程中找到的一些学习资料,感谢他们的分享
3ds Max修改模型坐标系
MaxScript官网文档 导出参数
MaxScript pivot
MaxScript官网文档 保存文件
脚本基本介绍

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 21:02:32  更:2022-02-09 21:04:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 16:34:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码