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

    }
}

猜你喜欢

转载自blog.csdn.net/qq_21743659/article/details/133754364
今日推荐