内容提要
在Unity中为输入操作图添加控制方案后,输入事件可能停止触发。检查InputAsset的JSON会发现控制方案的devices数组为空,即使编辑器显示“All Devices”。解决方法是在创建控制方案时勾选并分配对应设备,否则回调不会触发。
延伸解读
编辑器显示与实际配置的差异
文章指出,在Unity编辑器中控制方案可能显示为“All Devices”,但检查InputAsset的JSON文件时,会发现devices数组为空。这种显示与实际数据的不一致容易误导开发者,以为设备已自动分配。因此,当输入事件不触发时,不能仅依赖编辑器界面,应通过查看JSON或代码验证控制方案的设备配置。
排查输入失效的步骤
作者在遇到事件不触发时,依次检查了C#回调、PlayerInput组件的Default Map和自动切换选项,并确认没有其他脚本消耗输入事件。这些步骤有助于排除常见问题。最终通过检查InputAsset的JSON,发现控制方案的devices数组为空,从而定位到根本原因。这提示开发者,在排查输入问题时,检查底层数据配置是重要一环。
创建控制方案时的关键操作
文章强调,在创建控制方案时,需要勾选并分配对应的设备,否则即使动作映射中已绑定按钮,回调也不会触发。作者回忆起初次创建时忽略了一个勾选框,导致设备未分配。修复后,JSON中每个控制方案的devices数组都包含了设备路径。因此,创建控制方案时务必确认设备已正确分配。
Q&A
Unity中为输入操作图添加控制方案后,为什么输入事件不再触发?
因为控制方案的devices数组为空,即使编辑器显示“All Devices”,回调也不会触发。
如何检查Unity控制方案的设备配置是否正确?
将InputAsset以JSON格式打开,查看controlSchemes中的devices数组是否为空。
Unity控制方案中devices数组为空会导致什么后果?
输入事件回调不会触发,导致控制方案失效。
在Unity中创建控制方案时,如何正确分配设备?
在创建控制方案时,勾选并分配对应的设备,确保devices数组不为空。
Unity编辑器显示“All Devices”但实际设备为空,这是为什么?
编辑器可能显示“All Devices”,但实际JSON中devices数组为空,需要手动分配设备。
Unity控制方案中devices数组应该包含什么内容?
应包含设备路径(devicePath)等配置,例如devicePath、isOptional、isOR等字段。