旋转父游戏对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了旋转父游戏对象相关的知识,希望对你有一定的参考价值。
我知道这个问题是重复的,但我已经尝试了所有其他解决方案,但无法找到解决问题的方法。我有一堆立方体以圆圈形式组合在一起,我的目标是当有人按住鼠标然后按住某个位置时将它们集体旋转。由于有20个立方体,我需要它去到最接近的18度(360/20),以便在原始圆圈的同一个地方有一个立方体,只是整个圆圈被转动。 我已经让立方体一起旋转但是当我试图将它们捕捉到最接近的18度时,它会捕捉到一个看似随机的位置。我尝试过使用不同的方法,但我不知道哪里出错了!请帮忙!
这是我控制旋转的代码,然后在用户放开后尝试捕捉它(圆圈是所有立方体的父级):
GameObject circle;
void Update(){
if (circle != null) { //if the circle has been assigned, rotate it
circle.transform.Rotate(cam.up, -Input.GetAxis("Mouse X") * rotationSpeed, Space.World);
}
else if (Input.GetMouseButtonDown(0)) { //if clicked, assign the circle
circle = this.GameObject.transform.parent;
}
if (circle != null && Input.GetMouseButtonUp(0)) { //supposed to snap to the right spot, this is the part that isn't working
var rotate = circle.transform.rotation.y;
var newRotate = Mathf.Round((rotate * 360) / 18) * 18;
if (newRotate > 360) { newRotate -= 360; }
else if (newRotate < 0) { newRotate += 360; }
circle.transform.eulerAngles = new Vector3(0, newRotate, 0);
}
}
答案
许多事情似乎很奇怪。
- 在您显示的代码中,您指定
circle
但您从不使用它。你为什么需要它? - 您是否正在旋转这20个多维数据集的父级,因为这是您应该做的,但在您的代码中并不清楚
- 当你执行
layer.transform.rotation.y
时,你使用四元数的y值。试试layer.transform.eulerAngles.y
。
以上是关于旋转父游戏对象的主要内容,如果未能解决你的问题,请参考以下文章
Unity - 使用 foreach 循环以及父对象和子对象进行 Lerp 旋转?