旋转父游戏对象

Rotating a parent gameobject

我知道这个问题是重复的,但我已经尝试了所有其他解决方案,但找不到解决这个问题的方法。我将一堆立方体统一设置成一个圆圈,我的目标是当有人按住鼠标时将它们一起旋转,然后捕捉到某个位置。由于有 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