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

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. 修复任意键误触发问题

  1. 打开项目中的Input Actions资源文件(通常是.inputactions格式)
  2. 找到Player映射下的Pickup动作
  3. 删除当前绑定的Keyboard/anyKey输入
  4. 添加目标按键绑定(比如Keyboard/E),设置触发行为为Performed
  5. 保存配置并重新生成输入代码(如果使用代码生成)

3. 额外校验点

  • 确认场景中存在标记为MainCamera的相机,否则Camera.main会返回空导致射线检测失败
  • 检查拾取物品的Collider组件是否启用,且所在Layer在射线检测的LayerMask范围内(如果使用了Layer过滤)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:54:57