Unity继承MonoBehaviour的子类变量未被正确赋值问题求助
问题根因
你的代码继承逻辑没有错误,问题出在ProjectileWeapon组件的引用来源:
你给WeaponHandler.WeaponBehaviour赋值的是未实例化的Prefab资源上的组件,而非场景中实际生成的武器GameObject上的组件。
调用BeginCycle/EndCycle时,执行的是Prefab资源上组件的方法,所以控制台可以正常打印日志,你修改的也只是Prefab资源上的firing变量;而场景中实际运行的武器实例对象的firing变量从未被修改,自然无法触发Update里的对应逻辑,OnGUI显示的也是实例对象的默认值。
修复方案
调整武器组件的获取逻辑即可:
- 武器首次生成时,调用
Instantiate实例化Prefab得到场景中的武器GameObject后,再从该实例上获取ProjectileWeapon组件,赋值给WeaponHandler.WeaponBehaviour - 如果是玩家拾取已存在的武器,直接从场景中对应的武器实例对象上获取组件赋值即可,不要直接引用Prefab资源上的组件
验证方法
运行游戏后选中玩家对象,查看Inspector面板的WeaponBehaviour字段:
- 若字段指向Project窗口中的Prefab资源,说明赋值错误
- 若字段指向Hierarchy面板中的场景对象,说明赋值正确
内容的提问来源于stack exchange,提问作者Gordon13
相关产品推荐
相关产品推荐

