【unity】朝向固定的目标去位移

以前做位移的时候好像一直是根据别人的教程

最近最近写一个位移的时候发现有点懵圈。

想要做一个可以边走的时候边转向所需要的地方 。一般都是用Lookat嘛,但是Lookat()没有缓动的效果。

所以耍了个小聪明写了一个

    void Start()
    {
        StartCoroutine(MoveToPosition(new Vector3(0,0,0)));  
    }
    IEnumerator MoveToPosition(Vector3 target)
    {
        Vector3 raw_rotation = transform.eulerAngles;
        transform.LookAt(target);
        Vector3 lookat_rotation = transform.eulerAngles;
        transform.eulerAngles = raw_rotation;
        while (transform.position != target)  
        {
            transform.position = Vector3.MoveTowards(transform.position, target, 1 * Time.deltaTime);
            transform.eulerAngles = Vector3.RotateTowards(transform.eulerAngles, lookat_rotation, 1.0f, 1.0f);
            yield return 0;  
        }  
    }  


### 实现角色移动的方法 在Unity中实现角色移动可以通过多种方式完成,具体取决于项目的特定需求和技术栈的选择。 对于基本的角色移动控制,在脚本中通过修改Transform组件的位置属性是最直接的方式[^3]。然而,为了获得更加流畅自然的运动效果以及更好的性能表现,推荐采用Rigidbody或者CharacterController组件配合Animator控制器一起工作。 如果目标是在VR环境中创建交互体验,则需要注意摄像机的操作逻辑——不能直接调整Camera对象本身的位置与朝向;而是应该将其作为另一个GameObject的孩子节点,并通过对父级物体施加变换来间接影响视角变化[^2]。 另外值得注意的是,《Animation Rigging》插件允许开发者设置过程动画骨骼结构并实现在运行时动态改变姿态的效果。这为处理诸如世界互动、物理驱动的次要动作等高级特性提供了便利条件[^1]。 ```csharp using UnityEngine; public class CharacterMovement : MonoBehaviour { public float speed = 5f; private Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); } void FixedUpdate() { float moveHorizontal = Input.GetAxis("Horizontal"); float moveVertical = Input.GetAxis("Vertical"); Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical); rb.AddForce(movement * speed); } } ``` 此代码片段展示了如何利用`Rigidbody`组件使游戏角色响应键盘输入而发生位移。其中`FixedUpdate()`函数用于确保力的作用频率同物理学更新周期保持一致,从而保证模拟的真实性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值