美文网首页
Unity 物体的朝向与旋转

Unity 物体的朝向与旋转

作者: 114105lijia | 来源:发表于2022-12-23 19:57 被阅读0次
    方式一

    立即转向:朝向某个方向

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

    相关文章

      网友评论

          本文标题:Unity 物体的朝向与旋转

          本文链接:https://www.haomeiwen.com/subject/cvzvqdtx.html