|
方式一
立即转向:朝向某个方向
transform.forward = endPosition - startPosition;方式二
立即转向:看向某个点
transform.LookAt(endPosition);方式三
立即转向:与方式一类似,朝向某个方向
transform.rotation = Quaternion.LookRotation(endPosition - startPosition);方式四
DoTween旋转动画,需要提前知道旋转的角度
Vector3 rotationAngle = new Vector3(0, 45, 0);transform.DORotate(rotationAngle, 1);方式五
匀速旋转,需要实时计算自己的位置与目标位置之间的四元素
Quaternion qq = Quaternion.LookRotation(endPosition - transform.position);transform.rotation = Quaternion.RotateTowards(transform.rotation, qq, Time.deltaTime * speed);方式六
非匀速旋转,一般用于人物旋转(Lerp()用于平分长度,Slerp()用于平分弧度),也需要实时计算自己的位置与目标位置之间的四元素
Quaternion qq = Quaternion.LookRotation(endPosition - transform.position);transform.rotation = Quaternion.Slerp(transform.rotation, qq, Time.deltaTime * rotationSpeed);方式七
朝一个方向旋转【自转】
transform.Rotate(Vector3.up * Time.deltaTime * speed, Space.World);方式八
绕着某个点旋转【公转】(旋转时,物体的中心点与旋转参照点的距离不变,所以如果物体的形状不是规则的,那么它自己也会自转,以保证半径相同)
RotateAround中第一个参赛时旋转参照点,第二个参数是旋转方向
Vector3 turnTarget = Vector3.zero;turnTarget.y = transform.position.y;transform.RotateAround(turnTarget, Vector3.up, Time.deltaTime * turnSpeed);
示例脚本:
using UnityEngine;using UnityEngine.UI;using DG.Tweening;public class MoveToTowards : MonoBehaviour{ Vector3 endPosition = new Vector3(3, 3, 3); Vector3 startPosition; bool isStart = false; float speed = 10; Vector3 dir; void Start() { startPosition = transform.position; endPosition.y = transform.position.y; dir = endPosition - startPosition; //1、立即转向 //transform.forward = endPosition - startPosition; //2、立即转向 //transform.LookAt(endPosition); //3、立即转向 //transform.rotation = Quaternion.LookRotation(endPosition - startPosition); //4、旋转到某个角度 Vector3 rotationAngle = new Vector3(0, 45, 0); transform.DORotate(rotationAngle, 1); } float rotationSpeed = 2; float turnSpeed = 20; void Update() { //5、匀速 //Quaternion qq = Quaternion.LookRotation(endPosition - transform.position); //transform.rotation = Quaternion.RotateTowards(transform.rotation, qq, Time.deltaTime * speed); ////6、非匀速,一般用于人物旋转(Lerp()是平分长度,Slerp()是平分弧度) //Quaternion qq = Quaternion.LookRotation(endPosition - transform.position); //transform.rotation = Quaternion.Slerp(transform.rotation, qq, Time.deltaTime * rotationSpeed); //7、朝一个方向旋转【自转】 //transform.Rotate(Vector3.up * Time.deltaTime * speed, Space.World); //8、绕着某个点旋转【公转】(旋转时,物体的中心点与旋转参照点的距离不变,所以如果物体的形状不是规则的,那么它自己也会自转,以保证半径相同) //Vector3 turnTarget = Vector3.zero; //turnTarget.y = transform.position.y; //transform.RotateAround(turnTarget, Vector3.up, Time.deltaTime * turnSpeed); }} |
|