unity 摄像机导入 3dmax 带fov
先看效果图
编写unity 工具
1,先把导出的模型拉到摄像机节点下,需要在hierarchy选中摄像机为根节点,然后导出 ,
2,导出文件路径在工程Assets同目录下的ExportedObj文件夹里面,这里使用的导出obj插件
工具代码
主要用要保存摄像机位置,旋转,fov ,等一系列参数, 用与在3dmax 进行还原
Transform[] selection = Selection.GetTransforms(SelectionMode.Editable | SelectionMode.ExcludePrefab);
if (selection.Length == 0)
{
EditorUtility.DisplayDialog("No source object selected!", "Please select one or more target objects", "");
return;
}
Transform rootNode = selection[0];
if (rootNode == null)
return;
Camera theCamera = rootNode.GetComponent<Camera>();
if (theCamera == null)
{
EditorUtility.DisplayDialog("Can't find MainCamera", "Can't find MainCamera", "");
return;
}
GameObject mainCameraPosition = GameObject.CreatePrimitive(PrimitiveType.Sphere);
mainCameraPosition.name = "mainCameraPosition";
//保存摄像机位置
mainCameraPosition.transform.position = rootNode.position;
mainCameraPosition.transform.localScale = Vector3.zero;
Vector3 point = rootNode.position + rootNode.forward * 50;
GameObject mainCameraTarget = GameObject.CreatePrimitive(PrimitiveType.Sphere);
//保存摄像机朝向
mainCameraTarget.name = "mainCameraTarget";
mainCameraTarget.transform.position = point;
mainCameraPosition.transform.localScale = Vector3.zero;
GameObject mainCameraFov = GameObject.CreatePrimitive(PrimitiveType.Sphere);
mainCameraFov.name = "mainCameraFov";
/ //保存摄像fov
mainCameraFov.transform.position = new Vector3(theCamera.fieldOfView, 0, 0);
mainCameraFov.transform.localScale = Vector3.zero;
List<Component> list = new List<Component>();
list.Add(mainCameraPosition.GetComponent(typeof(MeshFilter)));
list.Add(mainCameraTarget.GetComponent(typeof(MeshFilter)));
list.Add(mainCameraFov.GetComponent(typeof(MeshFilter)));
//ExportWholeSelectionToSingle(list);这里调用obj 插件里面的接口
GameObject.DestroyImmediate(mainCameraPosition);
GameObject.DestroyImmediate(mainCameraTarget);
GameObject.DestroyImmediate(mainCameraFov);
编写3dmax工具
1:在3dmax安装目录下 如:D:\Program Files\Autodesk\3ds Max 2014\scripts 建立UnityFov.mse脚本文件
主要用来在3dmax里面,还原unity 摄像机的视角
fovTemp = $mainCameraFov.pos.x
$mainCameraFov.pivot=$mainCameraFov.center
fov = abs($mainCameraFov.pos.x - fovTemp)*1.66
$mainCameraPosition.pivot=$mainCameraPosition.center
$mainCameraTarget.pivot=$mainCameraTarget.center
targetcamera fov:
fov pos:[$mainCameraPosition.pos.x,$mainCameraPosition.pos.y,$mainCameraPosition.pos.z] target:(targetobject pos:[$mainCameraTarget.pos.x,$mainCameraTarget.pos.y,$mainCameraTarget.pos.z])
max vpt camera
使用方法
1:3dmax导入unity 导出的obj 文件
2:3dmax菜单上选着maxscripts/runscript 双击UnityFov.mse文件 即可
注意, 3dmax 不需要自己添加摄像机, 运行工具会自动添加摄像机