旋转父游戏对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了旋转父游戏对象相关的知识,希望对你有一定的参考价值。

我知道这个问题是重复的,但我已经尝试了所有其他解决方案,但无法找到解决问题的方法。我有一堆立方体以圆圈形式组合在一起,我的目标是当有人按住鼠标然后按住某个位置时将它们集体旋转。由于有20个立方体,我需要它去到最接近的18度(360/20),以便在原始圆圈的同一个地方有一个立方体,只是整个圆圈被转动。 enter image description here 我已经让立方体一起旋转但是当我试图将它们捕捉到最接近的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 旋转?

如何使游戏对象在旋转平面中围绕 Unity 中的另一个游戏对象旋转

子对象相对于父对象的旋转

随着时间的推移旋转游戏对象

随着时间的推移旋转游戏对象

旋转时保留Fragment对象