2D俯视角游戏PlayerController适配Unity新输入系统求助
Unity新输入系统适配2D俯视角移动脚本指导
前置确认
你已经完成的输入配置(键鼠/控制器控制方案、Moving动作图、上下左右移动动作)无需修改,直接按以下步骤调整代码即可:
步骤1:替换PlayerController脚本代码
以下代码完全保留了你原有网格移动、障碍物检测的逻辑,仅替换了输入读取部分适配新输入系统:
using UnityEngine; using UnityEngine.InputSystem; public class PlayerController : MonoBehaviour { [SerializeField] private float moveSpeed = 5; [SerializeField] private Transform movePoint; [SerializeField] private LayerMask obstacleMask; // 新增字段:用来挂载你已经配置好的Input Action资产 [SerializeField] private InputActionAsset inputActions; // 存储实时移动输入值 private Vector2 moveInput; private void Awake() { movePoint.parent = null; // 绑定移动动作的输入回调,输入变化时自动更新存储的输入值 var movingActionMap = inputActions.FindActionMap("Moving"); // 注意这里的"Move"要改成你自己配置的移动Action的实际名称 var moveAction = movingActionMap.FindAction("Move"); moveAction.performed += ctx => moveInput = ctx.ReadValue<Vector2>(); moveAction.canceled += ctx => moveInput = Vector2.zero; } // 脚本启用时同步启用Moving动作组 private void OnEnable() { inputActions.FindActionMap("Moving").Enable(); } // 脚本禁用时同步禁用Moving动作组避免报错 private void OnDisable() { inputActions.FindActionMap("Moving").Disable(); } void Update() { transform.position = Vector2.MoveTowards(transform.position, movePoint.position, moveSpeed * Time.deltaTime); if (Vector2.Distance(transform.position, movePoint.position) <= .5f) { float horizontalInput = moveInput.x; float verticalInput = moveInput.y; if (Mathf.Abs(horizontalInput) == 1) { if (!Physics2D.OverlapCircle(movePoint.position + new Vector3(horizontalInput, 0f, 0f), .2f, obstacleMask)) { movePoint.position += new Vector3(horizontalInput, 0f, 0f); } } else if (Mathf.Abs(verticalInput) == 1) { if (!Physics2D.OverlapCircle(movePoint.position + new Vector3(0f, verticalInput, 0f), .2f, obstacleMask)) { movePoint.position += new Vector3(0f, verticalInput, 0f); } } } } }
步骤2:Inspector面板配置
- 选中挂载了PlayerController组件的玩家游戏对象
- 把你之前做输入配置生成的后缀为
.asset的Input Action文件,拖到组件的Input Actions参数栏里 - 确认代码里
FindAction("Move")的字符串和你实际配置的移动Action名称完全一致,如果你配置的移动Action不是叫Move,改成你自己的命名即可
适配效果说明
- 你原有游戏逻辑完全没有改动,只是把旧输入系统的
Input.GetAxisRaw读取逻辑替换成了新输入系统的回调读取逻辑 - 适配完成后你配置的键鼠、控制器两种输入方案会自动生效,不需要额外写多设备适配代码
内容的提问来源于stack exchange,提问作者Laurie Morin
相关产品推荐
相关产品推荐

