ZBLOG

在每次切换目标位置时,增加一段缓冲时间(例如0.5秒),等待角色完全停下后再开始向新的目标位置移动。这样可以避免因突然切换方向而导致速度异常的问题IEnumerator MoveToTarget() // 协程函数,用于让角色移动到目标位置并播放跑步动画 { float moveSpeed = 5f; // 固定速度为5米/秒 while (true) { if (Vector3.Distance(transform.position, target...

下面是一个示例代码,演示如何在切换目标位置时增加缓冲时间的方法:

using System.Collections;
using UnityEngine;

public class CharacterController : MonoBehaviour
{
    public float moveSpeed = 5f; // 移动速度
    private Vector3 targetPos; // 当前目标位置

    void Start()
    {
        SetRandomTargetPosition(); // 初始随机移动
    }

    void Update()
    {
        if (Vector3.Distance(transform.position, targetPos) < 0.1f)
        {
            // 等待一段时间后再开始移动到新的随机目标位置
            StartCoroutine(WaitAndSetNewTargetPosition());
        }
    }

    IEnumerator WaitAndSetNewTargetPosition()
    {
        yield return new WaitForSeconds(0.5f); // 增加缓冲时间,等待角色完全停下后再开始移动

        SetRandomTargetPosition(); // 开始向新的目标位置移动
    }

    void SetRandomTargetPosition()
    {
        Vector3 randomPos = Random.insideUnitSphere * 10f;
        randomPos.y = transform.position.y;
        targetPos = randomPos;

        StopCoroutine("MoveToTarget"); // 停止之前的协程(如果有)
        StartCoroutine("MoveToTarget"); // 启动新的协程
    }

    IEnumerator MoveToTarget() // 协程函数,用于让角色移动到目标位置并播放跑步动画
    {
        while (true)
        {
            if (Vector3.Distance(transform.position, targetPos) > 0.1f)
            {
                Vector3 direction = (targetPos - transform.position).normalized;
                transform.position += direction * moveSpeed * Time.deltaTime; // 每帧移动一小段距离
            }
            else
            {
                yield return new WaitForSeconds(0.1f);
                continue;
            }

            yield return null;
        }
    }
}

在这个示例中,角色会一直随机移动,直到到达当前目标位置。当角色完全停下时,增加了0.5秒的缓冲时间,然后再开始向新的随机目标位置移动。这样可以确保角色能够平稳地转向并加速到新的目标位置,避免了因突然切换方向而导致速度异常的问题。同时,在移动过程中使用了归一化向量来控制角色的朝向,并且每帧只移动一小段距离,以获得更平滑和自然的运动效果。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=1099

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?