当前位置: 代码迷 >> 综合 >> Unity3D——旋转Rotate、rotation、eulerAngles
  详细解决方案

Unity3D——旋转Rotate、rotation、eulerAngles

热度:73   发布时间:2023-12-14 03:37:20.0

Rotate  欧拉角旋转

1.Transform.Rotate(float xAngle, float yAngle, float zAngle);每一帧都绕自身坐标轴的X轴、Y轴、Z轴旋转x度、y度、z度。

void Update ()
{this.transform.Rotate(0f, 0f, 2f);//每一帧绕自身坐标轴Z轴旋转2度
}

2.Transform.Rotate(Vector3 axis, float angle, Space relativeTo);

Vector3 axis:轴旋转,以x轴、y轴、z轴旋转

angle:每一帧旋转角度

Space relativeTo:空间相对性,自身或世界坐标系

void Update () 
{this.transform.Rotate(new Vector3(0, 0, 1f), 2f, Space.Self);//每一帧绕自身坐标轴Z轴旋转2度
}

3.Transform.Rotate(Vector3 eulerAngles);

void Update () 
{this.transform.Rotate(new Vector3(0,0,1f));//已自身坐标轴Z轴为旋转轴,每一帧旋转1度
}

以下几种同1、2、3相似:

Transform.Rotate(Vector3 axis, float angle);

Transform.Rotate(Vector3 eulerAngles, Space relativeTo);

Transform.Rotate(float xAngle, float yAngle, float zAngle);

Transform.Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo);

RotateAround  一个物体围绕另一个物体旋转

Transform.RotateAround(Vector3 point, Vector3 axis, float angle);

Vector3 point:被围绕的点

Vector3 axis:旋转所围绕的轴,如X轴、Y轴、Z轴。例围绕Y轴旋转,New Vector3(0,1f,0);或Vector3.up。

float angle:每一帧旋转的角度

void Update ()
{this.transform.RotateAround(new Vector3(0, 0, 0), Vector3.forward, 2f);//该物体围绕(0, 0, 0)点以Z轴为旋转轴,每一帧旋转2度,半径是物体到(0, 0, 0)点的距离
}

eulerAngles和localEulerAngles

eulerAngles:世界坐标系中以欧拉角表示的旋转

localEulerAngle:父对象局部坐标系中的欧拉角

直接设置旋转角度

this.transform.eulerAngles = new Vector3(0, 0, 60f);

慢慢旋转至某一角度

void Update () 
{float speed=10f;this.transform.eulerAngles = Vector3.MoveTowards(this.transform.eulerAngles, new Vector3(0, 0, 60f), Time.deltaTime * speed);
}

rotation和localRotation

rotation:世界坐标系中以四元数表示的旋转

localRotation:父对象局部坐标系中以四元数表示的旋转

直接设置旋转角度

this.transform.rotation = Quaternion.Euler(new Vector3(0, 0, 60f));

慢慢旋转至某一角度

void Update () 
{     float speed=10f;        this.transform.rotation = Quaternion.RotateTowards(this.transform.rotation, Quaternion.Euler(new Vector3(0, 0, 60f)), Time.deltaTime * speed);
}

 

  相关解决方案