Unity C#旧输入系统为何失效?按键触发代码无法运行求助
问题排查与解决方案
先解决代码无响应的核心问题,再补充生成GameObject的实现逻辑:
一、按键无响应的排查点
- 确认脚本已挂载到场景中处于激活状态的GameObject上,且脚本组件本身未被禁用(Inspector面板里脚本前的勾选框为激活状态)。
- 运行游戏时,点击Unity的Game窗口获取焦点,否则按键输入会被编辑器其他窗口拦截。
- 若项目启用了新Input System,旧的
Input.GetKey会失效,可在Project Settings > Player > Active Input Handling中选择Both或Old切换回旧输入系统,或改用新Input System的API。 - 若需要按一次E键触发一次逻辑(而非按住持续触发),将
Input.GetKey替换为Input.GetKeyDown——前者是按住期间每帧触发,后者仅在按键按下瞬间触发一次。
二、添加生成GameObject的逻辑
假设你已有目标预制体,可参考以下修改后的代码:
// 在Inspector面板拖拽你的预制体到这个字段 public GameObject spawnPrefab; // 控制生成位置,可绑定到场景中的空物体或玩家子物体 public Transform spawnPoint; void Update() { if (Input.GetKeyDown(KeyCode.E)) { Debug.Log("E键已按下,开始生成物体"); if (spawnPrefab != null) { // 生成预制体,使用spawnPoint的位置与旋转参数 Instantiate(spawnPrefab, spawnPoint.position, spawnPoint.rotation); } else { Debug.LogError("请先为spawnPrefab字段赋值预制体!"); } } }
使用说明:
- 在Inspector面板中,将目标预制体拖入
spawnPrefab字段。 - 若不需要自定义生成位置,可直接用
transform.position和transform.rotation替代spawnPoint的参数。
内容的提问来源于stack exchange,提问作者Blast123b
相关产品推荐
相关产品推荐

