Unity常用旋转API

  • 时间:
  • 浏览:1

public void Rotate(Vector3 eulerAngles);

public void Rotate(Vector3 axis, float angle);

public void Rotate(Vector3 eulerAngles, Space relativeTo);

public void Rotate(float xAngle, float yAngle, float zAngle);

public void Rotate(Vector3 axis, float angle, Space relativeTo);

public void Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo);

这俩 函数通常用于Update函数中,用于不断的旋转。如下

更多unity2018的功能介绍请到paws3d爪爪学院查找。

[csharp] view plain copy

四元数的欧拉角

强制改变z轴朝向。

//创建有有2个多 多从fromDirection到toDirection的旋转。

q1.SetFromToRotation(A.position,B.position);

C.rotation = q1;

public void SetLookRotation(Vector3 view);

public void SetLookRotation(Vector3 view, Vector3 up);

实例:

函数定义

属性定义

//朝向目标

//当该物体设置了LookAt并指定了目标物体时,该物体的z轴将始终指向目标物体

transform.LookAt(transformCenter);

}

}

1.1 Transform.Rotate

Debug.DrawLine(Vector3.zero, A.position,Color.red);

Debug.DrawLine(Vector3.zero, B.position, Color.green);

Debug.DrawLine(C.position, C.position + new Vector3(0,2,0), Color.black);

Debug.DrawLine(C.position, C.TransformPoint(0,2,0), Color.blue);

}

}

2.3 Quaternion.SetLookRotation

public static Quaternion Slerp(Quaternion a, Quaternion b, float t);

还可以 用于旋转值的不断靠近。如下:

public Vector3 eulerAngles { get; set; }

实例

[csharp] view plain copy

void Update ()

{

//设置旋转深度为有有2个多 多固定值

//旋转作为欧拉深度。

//x、y、z角代表绕z轴旋转z度,绕x轴旋转x度,绕y轴旋转y度(这俩 顺序)。

//仅使用者这俩 变量读取和设置深度到绝对值。并非递增它们,当超过深度350度,它将失败。使用Transform.Rotate替代。

transform.eulerAngles = new Vector3(0,0,50);

}

//这段代码可是我让物体不断的上下运动

moveDown = moveDown ? curY > -4 : curY > 4;

curY -= moveDown ? Time.deltaTime moveSpeed : -Time.deltaTime moveSpeed;

transform.position = new Vector3(2, curY, 0);

[csharp] view plain copy

void Update ()

{

//在Y轴以每秒rotateSpeed的时延围绕着transformCenter 旋转。

//这会改变物体的位置和旋转。

transform.RotateAround(transformCenter.position,Vector3.up,rotateSpeed * Time.deltaTime);

}

1.3 Transform.eulerAngles

[csharp] view plain copy

public class SimpleRotate5 : MonoBehaviour

{

public float rotateSpeed = 20;

public float moveSpeed = 4;

private float curY;

private bool moveDown = true;

public Transform transformCenter;

public class QuaternionRotate3 : MonoBehaviour

{

private Quaternion q1 = Quaternion.identity;

public Transform transformCenter;

void Update ()

{

//合适transform.LookAt

q1.SetLookRotation(transformCenter.position);

transform.rotation = q1;

}

}

球形插值。

旋转物体到某个深度

void Update ()

{

//绕y轴旋转50度

transform.rotation = Quaternion.AngleAxis(50,Vector3.up);

}

2.5 Quaternion.Slerp

[csharp] view plain copy

[csharp] view plain copy

属性定义

[csharp] view plain copy

函数定义

public static Quaternion AngleAxis(float angle, Vector3 axis);

围绕axis轴,旋转angle度。

public class SimpleRotate4 : MonoBehaviour

{

void Update ()

{

//功能类式于 transform.eulerAngles = new Vector3(0,0,50);

//而且只有直接设置rotation.eulerAngles 只有有有2个多 多详细的Quaternion

Quaternion q1 = Quaternion.identity;

q1.eulerAngles = new Vector3(0,50,0);

transform.rotation = q1;

}

2.2 Quaternion.SetFromToRotation (建议参考scene2场景来学习)

旋转某个深度

public class QuaternionRotate5 : MonoBehaviour

{

public Transform A;

public float rotateSpeed = 10;

void Update () {

transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(A.position - transform.position), 0.8f);

}

}

[csharp] view plain copy

public void SetFromToRotation(Vector3 fromDirection, Vector3 toDirection);

实例:

public float rotateSpeed = 20;

public float moveSpeed = 4;

private float curY;

private bool moveDown = false;

public Transform transformCenter;

void Update ()

{

//这段代码可是我让物体不断的上下运动

moveDown = moveDown ? curY > -4 : curY > 4;

curY -= moveDown ? Time.deltaTime moveSpeed : -Time.deltaTime moveSpeed;

transform.position = new Vector3(-2, curY, 0);

二、Rotation 与 Quaternion(对应scene2)

1.5 Transform.forward

以某点为中心旋转。

2.4 Quaternion.AngleAxis

[csharp] view plain copy

[csharp] view plain copy

[csharp] view plain copy

函数定义

[csharp] view plain copy

[csharp] view plain copy

[csharp] view plain copy

[csharp] view plain copy

2.1 Quaternion.eulerAngles

一、Transform控制(工程中的scene1)

创建有有2个多 多从fromDirection到toDirection的旋转

函数定义

旋转物体,使其朝向某个位置

[csharp] view plain copy

[csharp] view plain copy

void Update () {

//以每秒rotateSpeed的时延绕着y轴旋转

transform.Rotate(0, rotateSpeed * Time.deltaTime, 0);

}

1.2 Transform.RotateAround

public class QuaternionRotate2 : MonoBehaviour

{

public Transform A;

public Transform B;

public Transform C;

public float moveSpeed = 4;

private float curY;

private bool moveDown = false;

private Quaternion q1 = Quaternion.identity;

void Update ()

{

moveDown = moveDown ? curY > -4 : curY > 4;

curY -= moveDown ? Time.deltaTime moveSpeed : -Time.deltaTime moveSpeed;

B.position = new Vector3(4, curY, 0);

属性定义

设置物体的欧拉角为某个度数

//强制设置z轴朝向

//本例子和LookAt区别不大

transform.forward = transformCenter.position - transform.position;

1.4 Transform.LookAt

函数定义

public Vector3 eulerAngles { get; set; }

直接设置即可,一般不不于Update函数中递增。如下

[csharp] view plain copy

[csharp] view plain copy

[csharp] view plain copy

public Vector3 forward { get; set; }

例子:

Unity中的旋转通常还可以 用Transform 直接控制和 rotation 控制有两种土法子。

public void RotateAround(Vector3 axis, float angle);

public void RotateAround(Vector3 point, Vector3 axis, float angle);

这俩 函数通常也在Update中,不断地围绕着点运动。如下:

实例:

函数定义

public void LookAt(Transform target);

public void LookAt(Vector3 worldPosition);

public void LookAt(Transform target, Vector3 worldUp);

public void LookAt(Vector3 worldPosition, Vector3 worldUp);

简单例子:

void Update ()

{

函数定义

}

}