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

Unity瓦片式玩家移动功能失效问题求助

问题分析与修复方案

你的代码存在两个核心问题,直接导致瓦片式移动功能失效:

1. 输入判断逻辑完全颠倒

Update方法里的if (isMoving)条件写反了——玩家正在移动时(isMoving为true)应该禁止接收新输入,只有未移动时(isMoving为false)才处理输入触发移动。原代码中只有移动状态下才读取输入,而初始状态isMoving为false,直接导致输入逻辑完全不执行。

2. 输入值未适配瓦片移动需求

GetAxis返回的是-1到1之间的平滑过渡值(比如按方向键会从0缓慢变化到目标值),这会让目标位置不是整格的瓦片坐标,移动后会偏离网格。瓦片移动需要用GetAxisRaw获取离散的-1/0/1值,保证每次移动都是整格跳转。


修复后的完整代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float moveSpeed;
    private bool isMoving;
    private Vector2 input;

    private void Update()
    {
        // 仅在未移动时处理输入
        if (!isMoving)
        {
            // 获取离散方向值,适配瓦片移动
            input.x = Input.GetAxisRaw("Horizontal");
            input.y = Input.GetAxisRaw("Vertical");

            // 可选:限制单方向移动,避免斜向跨格(需要斜向可删除此行)
            if (input.x != 0)
                input.y = 0;

            if (input != Vector2.zero)
            {
                // 计算目标位置(假设瓦片单位大小为1,非1则乘以对应边长)
                Vector3 targetPos = transform.position;
                targetPos.x += input.x;
                targetPos.y += input.y;

                StartCoroutine(Move(targetPos));
            }
        }
    }

    IEnumerator Move(Vector3 targetPos)
    {
        isMoving = true;

        // 平滑移动至目标点
        while ((targetPos - transform.position).sqrMagnitude > Mathf.Epsilon)
        {
            transform.position = Vector3.MoveTowards(transform.position, targetPos, moveSpeed * Time.deltaTime);
            yield return null;
        }

        // 修正浮点误差,强制对齐目标位置
        transform.position = targetPos;
        isMoving = false;
    }
}

额外检查项

  • 确认Inspector面板中moveSpeed设置了合理数值(建议5-10,数值过小会导致移动不明显)。
  • 如果你的瓦片尺寸不是1单位,需要将input.x/y乘以瓦片的实际边长(比如瓦片是2x2,就改成targetPos.x += input.x * 2)。

内容的提问来源于stack exchange,提问作者Jheyson Superlano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:15:32