Unity 6000.0.24f1拾取脚本Input System空引用异常求助
Unity 6000.0.24f1 物品拾取脚本Input System问题修复
问题根源
- 空引用异常:
PickingUp方法未校验射线命中的有效性,当hit.collider为空时直接访问gameObject,触发NullReferenceException(对应PickUp.cs第40行) - 任意键误触发:Input System中
Player/Pickup动作绑定了Keyboard/anyKey,导致按任意键都会触发拾取逻辑,无有效命中时触发报错
修复步骤
1. 修复空引用异常
在PickingUp方法中添加命中有效性判断,确保仅在hit.collider不为空时执行后续逻辑:
void PickingUp() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); // 执行射线检测 if (Physics.Raycast(ray, out RaycastHit hit)) { // 先判断collider是否存在 if (hit.collider == null) return; // 获取物品组件并执行拾取 Item targetItem = hit.collider.gameObject.GetComponent<Item>(); if (targetItem != null) { // 示例:添加到背包并销毁物品 InventoryManager.Instance.AddItem(targetItem); Destroy(hit.collider.gameObject); } } }
2. 修复任意键误触发问题
- 打开项目中的
Input Actions资源文件(通常是.inputactions格式) - 找到
Player映射下的Pickup动作 - 删除当前绑定的
Keyboard/anyKey输入 - 添加目标按键绑定(比如
Keyboard/E),设置触发行为为Performed - 保存配置并重新生成输入代码(如果使用代码生成)
3. 额外校验点
- 确认场景中存在标记为
MainCamera的相机,否则Camera.main会返回空导致射线检测失败 - 检查拾取物品的Collider组件是否启用,且所在Layer在射线检测的
LayerMask范围内(如果使用了Layer过滤)
内容的提问来源于stack exchange,提问作者choppyChainsaw
相关产品推荐
相关产品推荐

