#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’?