Unity 模型中心点偏移问题解决方法

简介: Unity 模型中心点偏移问题解决方法

开发过程中我们可能会遇到这样的模型:

image.gif

模型的坐标点与其实际位置相差甚远,这时如果想要操作这个物体的Transform则不能得到预想的结果。例如我们现在旋转上图例中的车轮:

image.gif

解决这种问题的思路是,创建一个新物体作为该模型物体的父级,新物体的坐标位置设为该模型的中心点位置,手动的去设置这个位置会比较麻烦,也不能做到十分精确,这时我们需要用到Bounds类Encapsulate函数去计算中心点位置:

image.gif

因此我们需要获取该模型物体的所有MeshRenderer,包括子物体,声明一个新的Bounds包围盒,遍历所有的MeshRenderer,调用Encapsulate函数去计算包围盒的边界及中心。

代码如下:

usingUnityEngine;
usingUnityEditor;
publicclassAutoModelCenter{
/// <summary>/// 获取模型的中心点/// </summary>    [MenuItem("SKFramework/Tools/GetModelCenter")]
publicstaticvoidGetModelCenter()
    {
//如果未选中任何Transform returnif (Selection.activeTransform==null) return;
Transformtransform=Selection.activeTransform;
Boundsbounds=newBounds(Vector3.zero, Vector3.zero);
//获取所有MeshRenderer 包括子物体varmrs=transform.GetComponentsInChildren<MeshRenderer>(true);
Vector3center=Vector3.zero;
for (inti=0; i<mrs.Length; i++)
        {
center+=mrs[i].bounds.center;
//Encapsulate函数重新计算boundsbounds.Encapsulate(mrs[i].bounds);
        }
center/=mrs.Length;
//创建一个新物体作为空父级GameObjectobj=newGameObject();
obj.name=transform.name;
obj.transform.position=center;
obj.transform.rotation=Quaternion.identity;
obj.transform.SetParent(transform.parent);
transform.SetParent(obj.transform);
    }
}

image.gif

有了该工具后我们就可以获得车轮的中心点,然后就可以正常旋转它了:

image.gif

目录
相关文章
|
20小时前
|
存储 图形学
【unity小技巧】unity中导入下载的3D模型及albedo/baseColor、normal 、AO/Occlus、metallic、roughness贴图纹理设置
【unity小技巧】unity中导入下载的3D模型及albedo/baseColor、normal 、AO/Occlus、metallic、roughness贴图纹理设置
4 0
|
22天前
|
图形学
初识Unity——基本模型、场景操作、世界坐标系和局部坐标系
初识Unity——基本模型、场景操作、世界坐标系和局部坐标系
16 1
|
9月前
|
存储 图形学
浅谈Unity之模型裁剪shader
Unity之模型裁剪shader
|
9月前
|
图形学
浅谈Unity之ShaderGraph-模型膨胀流动
Unity之ShaderGraph-模型膨胀流动
|
10月前
|
图形学
【Unity实战系列】如何把你的二次元老婆/老公导入Unity进行二创并且进行二次元渲染?(附模型网站分享)
【Unity实战系列】如何把你的二次元老婆/老公导入Unity进行二创并且进行二次元渲染?(附模型网站分享)
426 0
【Unity3D--自由观察模型】模型自动旋转+触屏旋转和缩放
展示3D模型,同时实现模型自动旋转和触屏旋转和缩放
275 0
|
图形学
Unity 导入原神人物模型
Unity 导入原神人物模型
3458 2
Unity 导入原神人物模型
|
图形学 开发者
Unity【Dynamic Bone】- 关于人物模型头发、衣物等细节的处理
Unity【Dynamic Bone】- 关于人物模型头发、衣物等细节的处理
311 0
Unity【Dynamic Bone】- 关于人物模型头发、衣物等细节的处理
“谁做虚拟仿真不得遇到个拆分模型呀”——分享如何使用Unity拆分3D模型
在仿真开发中,会遇到将模型进行移动、放大、旋转、拆分、合并等操作,其他的移动、放大、旋转都有比较多的例子进行参考,今天就分享一下如何将物体进行拆分