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

Unity新输入系统中获取Action Map的GUID方法

避免字符串引用,高效获取Unity新输入系统的Action Map引用

下面分享几个比手动打印GUID更高效的方案,彻底摆脱字符串硬编码的维护隐患:

1. 直接序列化InputActionMap引用(最省心)

Unity新输入系统的InputActionMap本身支持直接在Inspector面板拖拽赋值,完全不需要通过名称或GUID间接获取。

代码示例:

[SerializeField] private PlayerInput _playerInput;
// 直接在Inspector里拖入对应的Action Map
[SerializeField] private InputActionMap _gameplayMap;
[SerializeField] private InputActionMap _uiMap;

public void SwitchToGameplay()
{
    _playerInput.SwitchCurrentActionMap(_gameplayMap);
}

public void SwitchToUI()
{
    _playerInput.SwitchCurrentActionMap(_uiMap);
}

这种方式直接引用对象实例,就算后续修改Action Map的名称,代码逻辑也不会受任何影响,直观又可靠。

2. 用ScriptableObject统一管理所有Action Map

如果项目里Action Map较多,可以创建一个专门的ScriptableObject来集中管理所有引用,避免每个脚本都单独拖拽:

[CreateAssetMenu(fileName = "InputMapReferences", menuName = "Input/Input Map References")]
public class InputMapReferences : ScriptableObject
{
    [SerializeField] public InputActionMap gameplayMap;
    [SerializeField] public InputActionMap uiMap;
    [SerializeField] public InputActionMap pauseMap;
}

使用时只需要在脚本里引用这个ScriptableObject,就能直接获取所有Action Map:

[SerializeField] private PlayerInput _playerInput;
[SerializeField] private InputMapReferences _inputMapRefs;

public void OpenPauseMenu()
{
    _playerInput.SwitchCurrentActionMap(_inputMapRefs.pauseMap);
}

这种方式适合大型项目,所有Action Map的引用都集中在一个地方,维护起来非常方便。

3. 自定义编辑器工具一键导出GUID常量

如果确实需要用GUID(比如某些动态加载场景的需求),可以写个编辑器脚本一键生成包含所有Action Map GUID的常量类,彻底告别手动打印:

using UnityEditor;
using UnityEngine;
using UnityEngine.InputSystem;
using System.IO;

public static class InputMapGuidExporter
{
    [MenuItem("Tools/Export Input Map GUIDs")]
    public static void ExportGuids()
    {
        // 选择你的InputActionAsset文件
        string path = EditorUtility.OpenFilePanel("Select Input Action Asset", "Assets", "inputactions");
        if (string.IsNullOrEmpty(path)) return;

        InputActionAsset asset = AssetDatabase.LoadAssetAtPath<InputActionAsset>(path);
        if (asset == null)
        {
            Debug.LogError("Failed to load Input Action Asset!");
            return;
        }

        // 生成常量类代码
        string code = "public static class InputMapGuids\n{\n";
        foreach (var map in asset.actionMaps)
        {
            // 自动处理名称中的空格,生成合法的常量名
            string constantName = map.name.Replace(" ", "");
            code += $"    public const string {constantName} = \"{map.id}\";\n";
        }
        code += "}";

        // 保存到指定路径(可自行修改)
        string savePath = Path.Combine(Application.dataPath, "Scripts/Input/InputMapGuids.cs");
        File.WriteAllText(savePath, code);
        AssetDatabase.Refresh();
        Debug.Log($"GUID常量脚本已生成:{savePath}");
    }
}

使用时只需点击顶部菜单Tools/Export Input Map GUIDs,选择你的.inputactions文件,就能自动生成包含所有GUID的常量类。后续修改Action Map名称后,重新导出一次即可更新常量,完全不用手动修改代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:10:07