Unity常用旋转API

  • 时间:
  • 浏览:0
  • 来源:uu快3下载网站_uu快3开户二维码

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

[csharp] view plain copy

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

围绕axis轴,旋转angle度。

球形插值。

强制改变z轴朝向。

[csharp] view plain copy

public void LookAt(Transform target);

public void LookAt(Vector3 worldPosition);

public void LookAt(Transform target, Vector3 worldUp);

public void LookAt(Vector3 worldPosition, Vector3 worldUp);

简单例子:

以某点为中心旋转。

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

函数定义

void Update ()

{

//绕y轴旋转60 度

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

}

2.5 Quaternion.Slerp

四元数的欧拉角

public class SimpleRotate4 : MonoBehaviour

{

1.1 Transform.Rotate

[csharp] view plain copy

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

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

C.rotation = q1;

创建一个多多 从fromDirection到toDirection的旋转

public Vector3 eulerAngles { get; set; }

实例

[csharp] view plain copy

[csharp] view plain copy

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

public void SetLookRotation(Vector3 view);

public void SetLookRotation(Vector3 view, Vector3 up);

实例:

[csharp] view plain copy

函数定义

函数定义

[csharp] view plain copy

}

}

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 ()

{

//设置旋转高度为一个多多 固定值

//旋转作为欧拉高度。

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

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

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

}

二、Rotation 与 Quaternion(对应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);

}

}

public void SetFromToRotation(Vector3 fromDirection, Vector3 toDirection);

实例:

属性定义

[csharp] view plain copy

[csharp] view plain copy

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

void Update ()

{

2.1 Quaternion.eulerAngles

函数定义

//朝向目标

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

transform.LookAt(transformCenter);

}

}

[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;

void Update () {

//以每秒rotateSpeed的数率绕着y轴旋转

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

}

1.2 Transform.RotateAround

public void RotateAround(Vector3 axis, float angle);

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

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

void Update ()

{

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

//很久并可不可以直接设置rotation.eulerAngles 需用一个多多 删剪的Quaternion

Quaternion q1 = Quaternion.identity;

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

transform.rotation = q1;

}

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

public Vector3 forward { get; set; }

例子:

旋转物体到某个高度

Unity中的旋转通常都需用用Transform 直接控制和 rotation 控制这类办法。

void Update ()

{

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

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

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

}

1.3 Transform.eulerAngles

2.4 Quaternion.AngleAxis

public Vector3 eulerAngles { get; set; }

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

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

[csharp] view plain copy

[csharp] view plain copy

1.5 Transform.forward

//这段代码就说 让物体不断的上下运动

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

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

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

实例:

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);

1.4 Transform.LookAt

属性定义

[csharp] view plain copy

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);

旋转某个高度

属性定义

函数定义

函数定义

[csharp] view plain copy

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

都需用用于旋转值的不断靠近。如下:

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函数中,用于不断的旋转。如下

[csharp] view plain copy

[csharp] view plain copy

[csharp] view plain copy

//强制设置z轴朝向

//本例子和LookAt区别不大

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

[csharp] view plain copy

[csharp] view plain copy

函数定义

[csharp] view plain copy