You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中禁用玩家斜向移动后,宠物跟随仍斜向移动的解决办法

问题分析与解决方案

你的核心问题在于宠物的移动逻辑和动画控制完全依赖玩家的输入,而非宠物自身到玩家的相对位置。当前代码里的move变量用了Input.GetAxisRaw,这是玩家的操作输入,和宠物实际需要移动的方向无关;而且你用Vector2.MoveTowards直接让宠物朝玩家位置移动,这必然会产生斜向移动,之前的禁用斜向代码根本起不到作用。

下面给你两种针对性的解决思路:


思路一:强制宠物仅沿水平/垂直方向跟随(无需新增动画)

让宠物每次只沿一个轴(X或Y)移动,优先对齐和玩家距离更远的轴,避免斜向移动,和玩家的移动风格保持一致。

修改后的代码如下:

public class Bowser : MonoBehaviour
{
    public float speed;
    private Transform target;
    private Animator anim;

    private void Awake()
    {
        anim = GetComponent<Animator>();
    }

    void Start()
    {
        target = GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>();
    }

    void Update()
    {
        if (Vector2.Distance(transform.position, target.position) > 1.5f)
        {
            // 计算宠物到玩家的相对方向
            Vector2 direction = (target.position - transform.position).normalized;
            Vector2 moveDirection = Vector2.zero;

            // 优先选择距离更长的轴,避免斜向
            if (Mathf.Abs(direction.x) > Mathf.Abs(direction.y))
            {
                // 只保留水平方向
                moveDirection.x = Mathf.Sign(direction.x);
                moveDirection.y = 0;
            }
            else
            {
                // 只保留垂直方向
                moveDirection.y = Mathf.Sign(direction.y);
                moveDirection.x = 0;
            }

            // 更新动画参数
            anim.SetFloat("moveX", moveDirection.x);
            anim.SetFloat("moveY", moveDirection.y);
            anim.SetBool("moving", true);

            // 沿修正后的方向移动
            transform.position = Vector2.MoveTowards(transform.position, 
                new Vector2(transform.position.x + moveDirection.x, transform.position.y + moveDirection.y), 
                speed * Time.deltaTime);
        }
        else
        {
            anim.SetBool("moving", false);
        }
    }
}

关键改动说明:

  1. 移除了依赖玩家输入的move变量,改为计算宠物到玩家的相对方向。
  2. 通过比较方向向量的X/Y分量绝对值,强制宠物只沿一个轴移动。
  3. 移动时不再直接朝玩家位置走,而是沿修正后的单方向逐步靠近,确保不会出现斜向滑行。

思路二:添加斜向动画(更自然的跟随体验)

如果希望宠物的跟随更灵活(比如现实中宠物不会刻意绕直角走),直接制作斜向移动的动画是更简单的方案。

只需要在Animator中新增四个斜向动画(比如右上、右下、左上、左下),然后根据direction.x和direction.y的正负值切换对应的动画状态即可。这种方法无需修改核心移动逻辑,视觉效果更自然,适合追求真实感的场景。


选择建议:

  • 如果你想让宠物和玩家保持完全一致的移动规则(无斜向),选思路一;
  • 如果你更看重宠物跟随的自然流畅感,选思路二。

内容的提问来源于stack exchange,提问作者Skye Hill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:55:21