如何在没有任何畸形的情况下围绕自身中心旋转物体?

时间:2016-05-28 18:38:52

标签: unity3d unity5

将实例化的预制件添加到父级后,我想在自动中心周围旋转新的预制件。

GameObject clone = Instantiate(mockup, transform.position, transform.rotation) as GameObject;

clone.transform.parent = gameObject.transform;
clone.transform.localPosition = Vector3.zero;
clone.transform.Rotate (0, 45, 0);

但是它变形了预制件。如果我没有设置父级,它将旋转而不会变形。我也尝试了RotateAround并传递clone.transform.localePosition作为参数,但仍然相同。 我也尝试将中心作为

clone.GetComponent<Renderer>().bounds.size;

并添加到位置并作为参数传递但仍然没有成功。

如何在没有任何畸形的情况下围绕自身中心旋转物体?

Misshape:相机在上方,我缩放并旋转立方体但是从上面它不是矩形,因为它应该是

enter image description here

没有轮换:

enter image description here

1 个答案:

答案 0 :(得分:0)

经过实验,我能够复制你的探测器。您的问题出在这行代码GameObject clone = Instantiate(mockup, transform.position, transform.rotation) as GameObject;

您正在传递transform.rotation作为新Instantiated GameOBject的新位置。 transform.rotation是脚本附加到的GameObject的旋转。您的脚本附加到的GameObject的 X Z 轴是 0 。我的25岁,你的应该是类似的。

有几种解决方法

1 。只需确保脚本附加的GameObject的 X Y Z 轴设置为 0 。如果您不想更改此设置,请执行以下其他解决方案之一。

enter image description here

2 。解决此问题的另一种方法是证明Instantiate期间的位置或旋转,因为您将用{{覆盖位置和旋转两者1}}和clone.transform.localPosition = Vector3.zero;稍后。因此,您当前的代码是多余的。

clone.transform.Rotate (0, 45, 0);

3 。最后,解决此问题的另一种方法是向第三个参数而不是GameObject clone = Instantiate(mockup) as GameObject; 提供 0 轮换Quaternion.Euler(Vector3.zero)

transform.rotation