игровой объект неправильно вращается по оси z

#unity3d

#unity3d

Вопрос:

есть круг, его нужно вращать нажатием кнопки, с определенной скоростью по оси z, и когда он повернется на 90, вращение остановится, но по какой-то причине вращение не работает должным образом

 public GameObject Circle;

private bool RotationActive;

//rotation value at which the circle stops rotation
private float RotatePost;

private float RotationSpeed;

private float CircleRotateZ;

void Start()
{
    RotationActive = false;

    RotationSpeed = 0.5f;

    RotatePost = 90;
}

//function is bound to a button
public void RotateActive(){
    RotationActive = true;
}

void FixedUpdate()
{
    if (RotationActive == true)
    {
        CircleRotateZ = Circle.transform.rotation.z;

        //if the circle along the z axis is rotated more than Rotation Post...
        if (CircleRotateZ >= RotatePost )
        {
            RotatePost = CircleRotateZ   90;
            RotationActive = false;
        }

        //assignment of a new coordinate
        Circle.transform.Rotate(new Vector3(0,0,RotationSpeed   CircleRotateZ));
    }
    
}
  

Ответ №1:

Вы пытаетесь захватить вращение от кватерниона, который не является углом объекта. Вместо этого вы должны использовать:

 CircleRotateZ = Circle.transform.eulerAngles.z;
  

Кроме того, способ, которым вы вращаетесь в данный момент, со временем ускорит его. Функции поворота вращают объект на величину, а не на заданную величину, поэтому, если вы хотите вращаться только на скорость вращения, вам следует использовать:

 Circle.transform.Rotate(new Vector3(0, 0, RotationSpeed));
  

Ответ №2:

Что вы подразумеваете под неправильной работой. Вы имеете в виду, что он вообще не движется? Если он вообще не перемещается, проверьте, перетащили ли вы объект circle game в поле game object в инспекторе. Еще одна вещь, почему вы не вызвали функцию ‘RotateActive’?