找回密码
 立即注册
查看: 246|回复: 0

Unity 物体的朝向与旋转

[复制链接]
发表于 2022-12-23 20:26 | 显示全部楼层 |阅读模式
方式一


立即转向:朝向某个方向
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开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 00:24 , Processed in 0.090756 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表