Unity 常用旋转API
来源:互联网 发布:ios kvo监听数组变化 编辑:程序博客网 时间:2024/06/02 05:30
Unity中的旋转通常可以用Transform 直接控制 和 rotation 控制两种方式。
一、Transform控制(工程中的scene1)
1.1 Transform.Rotate
旋转某个角度
函数定义
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函数中,用于不断的旋转。如下
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 () { //在Y轴以每秒rotateSpeed的速度围绕着transformCenter 旋转。 //这会改变物体的位置和旋转。 transform.RotateAround(transformCenter.position,Vector3.up,rotateSpeed * Time.deltaTime);}1.3 Transform.eulerAngles
设置物体的欧拉角为某个度数
属性定义
public Vector3 eulerAngles { get; set; }直接设置即可,一般不用于Update函数中递增。如下
void Update (){ //设置旋转角度为一个固定值 //旋转作为欧拉角度。 //x、y、z角代表绕z轴旋转z度,绕x轴旋转x度,绕y轴旋转y度(这个顺序)。 //仅使用者这个变量读取和设置角度到绝对值。不要递增它们,当超过角度360度,它将失败。使用Transform.Rotate替代。 transform.eulerAngles = new Vector3(0,0,60);}
1.4 Transform.LookAt
旋转物体,使其朝向某个位置
函数定义
public void LookAt(Transform target);public void LookAt(Vector3 worldPosition);public void LookAt(Transform target, Vector3 worldUp);public void LookAt(Vector3 worldPosition, Vector3 worldUp);简单例子:
public class SimpleRotate4 : MonoBehaviour{ 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); //朝向目标 //当该物体设置了LookAt并指定了目标物体时,该物体的z轴将始终指向目标物体 transform.LookAt(transformCenter); }}
1.5 Transform.forward
强制改变z轴朝向。
属性定义
public Vector3 forward { get; set; }例子:
public class SimpleRotate5 : MonoBehaviour{ public float rotateSpeed = 20; public float moveSpeed = 4; private float curY; private bool moveDown = true; 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); //强制设置z轴朝向 //本例子和LookAt区别不大 transform.forward = transformCenter.position - transform.position; }}
2.1 Quaternion.eulerAngles
四元数的欧拉角
属性定义
public Vector3 eulerAngles { get; set; }实例
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场景来学习)
创建一个从fromDirection到toDirection的旋转
函数定义
public void SetFromToRotation(Vector3 fromDirection, Vector3 toDirection);实例:
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); //创建一个从fromDirection到toDirection的旋转。 q1.SetFromToRotation(A.position,B.position); C.rotation = q1; 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 void SetLookRotation(Vector3 view);public void SetLookRotation(Vector3 view, Vector3 up);实例:
public class QuaternionRotate3 : MonoBehaviour { private Quaternion q1 = Quaternion.identity; public Transform transformCenter; void Update () { //相当于transform.LookAt q1.SetLookRotation(transformCenter.position); transform.rotation = q1; }}
2.4 Quaternion.AngleAxis
函数定义
public static Quaternion AngleAxis(float angle, Vector3 axis);围绕axis轴,旋转angle度。
实例:
void Update () { //绕y轴旋转60度 transform.rotation = Quaternion.AngleAxis(60,Vector3.up);}2.5 Quaternion.Slerp
球形插值。
函数定义
public static Quaternion Slerp(Quaternion a, Quaternion b, float t);可以用于旋转值的不断靠近。如下:
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); }}
需要下载工程的可以点击下载
0 0
- Unity 常用旋转API
- 杂谈unity 旋转的常用API和其他知识
- Unity常用API
- Unity常用脚本API
- Unity常用API理解
- Unity常用API学习
- Unity 利用Quaternion.LookRotation API 将旋转矩阵转换成四元数
- [Unity]旋转
- 【Unity】Kinect一些常用的API
- 【unity3d学习笔记】unity常用API解析
- UNITY开发中常用的一些API
- Unity API
- Unity API
- UNITY API
- 初识Unity 3D——常用API(1)
- 初试Unity 3D——常用API(2)
- 初识Unity 3D——常用API(3)
- Unity API常用方法和类的解析
- 基于proteus的51单片机仿真实例二、关于proteus
- 周游世界
- CSS代码规范
- Spark Streaming流任务学习笔记
- 问题 A: 挑战密室 河南省第九届省赛
- Unity 常用旋转API
- 固定数组随机数
- ListView
- spark RDD算子(十)之PairRDD的Action操作countByKey, collectAsMap
- java虚拟机学习笔记一
- 小偷咋这么快破解了银行卡密码
- cxf框架整合ssm框架案例
- equals与==的区别
- POJ 2217 Secretary (后缀数组)