maltadirk 发表于 2022-12-23 20:26

Unity 物体的朝向与旋转

方式一


立即转向:朝向某个方向
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);    }}
页: [1]
查看完整版本: Unity 物体的朝向与旋转