unity 摄像机导入 3dmax 带fov

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 不需要自己添加摄像机, 运行工具会自动添加摄像机

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值