Unity控制人物旋转看向目标的方式

1.使用四元数

目标点-当前点,计算即将forward的方向,根据rotspeed在update里面一点点插值过去。

    void RotateTo()
    {
         Vector3 dir = m_CurrentPathNode.transform.position - Tran.transform.position;
         dir.y = 0;
         Quaternion q = Quaternion.LookRotation(dir);
         Tran.rotation = Quaternion.Slerp(Tran.rotation, q, RotSpeed);
    }

2.RotateTowards改变当前forward

Vector3.Angle(RotObj.transform.forward, temp - RotObj.transform.position) 计算目标与物体指向前方之前的夹角
Vector3 dir = temp - RotObj.transform.position;
Tran.forward = Vector3.RotateTowards(RotObj.transform.forward, dir, RotSpeed * Time.deltaTime, 0); Update控制旋转

3.直接lookat

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,关于Unity人物移动旋转的代码,可以参考下面的示例代码: ``` using UnityEngine; public class PlayerController : MonoBehaviour { public float moveSpeed = 5f; //移动速度 public float rotateSpeed = 60f; //旋转速度 private Rigidbody rb; //刚体组件 void Start() { rb = GetComponent<Rigidbody>(); //获取刚体组件 } void FixedUpdate() { //获取水平和垂直输入轴的值 float hAxis = Input.GetAxis("Horizontal"); float vAxis = Input.GetAxis("Vertical"); //计算移动方向,使用Transform.TransformDirection方法将输入值转换为世界坐标系中的方向 Vector3 moveDirection = transform.TransformDirection(new Vector3(hAxis, 0, vAxis)); //将移动方向乘以移动速度,得到刚体的移动速度 Vector3 moveVelocity = moveDirection * moveSpeed; //将刚体的速度设置为计算出来的移动速度 rb.velocity = moveVelocity; //如果有输入则旋转角色 if (hAxis != 0 || vAxis != 0) { //计算旋转方向 Vector3 rotateDirection = new Vector3(hAxis, 0, vAxis); //使用Quaternion.LookRotation方法计算旋转目标方向 Quaternion targetRotation = Quaternion.LookRotation(rotateDirection); //使用Quaternion.RotateTowards方法进行旋转 rb.rotation = Quaternion.RotateTowards(rb.rotation, targetRotation, rotateSpeed * Time.fixedDeltaTime); } } } ``` 以上代码实现了一个简单的角色移动和旋转的功能,其中使用了Rigidbody组件来控制角色的移动和旋转,同时使用了Input.GetAxis方法获取输入轴的值,并使用Quaternion.LookRotation方法计算旋转目标方向。您可以根据自己的需求进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上证50指数etf

谢谢您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值