Unity3D开发(编程)小技巧之一:解决模型坐标系不在模型中心的问题

问题重述:
在unity中开发时,有时候拿到的模型的坐标系并不是在模型的中心,甚至可能离模型中心很远,这种情况对于网上下载的模型尤为常见。

对于上述问题我们可以回顾一下unity中的pivot与center两个坐标系。
转述自Unity_阿黄

  • pivot就是模型的真实坐标轴,也就是说在建模软件中设定的坐标轴。
  • center是unity自己根据模型的mesh计算的中心位置坐标系,和模型真实坐标轴没有关系。
  • transform.position 的位置就是这个 pivot坐标系的位置

我们一般的平移、旋转等只能对pivot坐标系进行操作,而不能直接对center坐标系进行操作,因此可以有如下的解决方案:将该模型挂载在一个空物体之下,并将空物体坐标系位置设置在模型center坐标系位置(网上一个哥们的思路,我在这里详细总结一下)


详细实验过程:

1. 环境准备:

Unity3D开发(编程)小技巧之一:解决模型坐标系不在模型中心的问题_第1张图片
如上图所示,是一个从网上下载的香烟的模型,我已经将坐标系位置置零了,可是我们看到模型中心位置离坐标系很远。

2. 计算模型中心位置

这里需要计算模型中心位置,也就是center坐标系的位置,这也是整个解决方案的核心

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CalcuCenter : MonoBehaviour {

	public GameObject gameObjectMeshRender;
	// Use this for initialization
	void Start () {
		//核心就这一句话
		Debug.Log("对象网格中心在世界坐标系位置:" + gameObjectMeshRender.GetComponent().bounds.center.ToString("f4"));
	}
}

值得注意的是:代码里的gameObjectMeshRender需要的是模型层级下的具有MeshRenderer组件的那个物体
Unity3D开发(编程)小技巧之一:解决模型坐标系不在模型中心的问题_第2张图片
Unity3D开发(编程)小技巧之一:解决模型坐标系不在模型中心的问题_第3张图片

3.新建空物体,设置层次关系

  • 新建一个空物体命名为Cigarette,如上图设置position
  • 然后将上面的香烟模型拖到空物体下面作为子物体
  • 以后要对模型操作直接对空物体Cigarette进行操作即可(还可设置空物体的旋转来进一步微调坐标系)。
    Unity3D开发(编程)小技巧之一:解决模型坐标系不在模型中心的问题_第4张图片
    Unity3D开发(编程)小技巧之一:解决模型坐标系不在模型中心的问题_第5张图片

你可能感兴趣的:(Unity开发)