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

Unity中创建BuildingScript实例存入列表失败,能否脱离GameObject存储?

问题解答

首先明确两种核心情况:

  • 如果你的BuildingScript是普通C#类(未继承MonoBehaviour):完全允许直接用new创建实例并存储在列表中,不需要依附GameObject,这种操作合法且正常。你提到的最后一行添加失败,大概率是buildingsList未初始化(比如仅声明了List<BuildingScript> buildingsList;但未执行buildingsList = new List<BuildingScript>();),或是列表类型与实例不匹配导致的。
  • 如果你的BuildingScript继承了MonoBehaviour:绝对不能用new BuildingScript()创建实例!MonoBehaviour是Unity的组件类,必须依附在GameObject上才能被Unity的生命周期系统管理,直接new出来的实例无法正常工作(无法触发生命周期函数、访问组件相关属性,甚至会引发异常)。这种场景下你需要通过挂载组件的方式创建实例:
    // 创建空GameObject并挂载组件
    GameObject buildingHolder = new GameObject("BuildingPlaceholder");
    BuildingScript _placeholder = buildingHolder.AddComponent<BuildingScript>();
    
    // 后续赋值逻辑不变
    _placeholder.SO_of_This = GameManager.instance.buildingArray[_idInt];
    buildingsList.Add(_placeholder);
    

如果你的BuildingScript仅用于存储数据(比如当前场景里只需要存SO引用、自定义数据),建议直接改成普通C#类,去掉MonoBehaviour继承,这样代码逻辑更简洁,也不会有组件绑定的限制。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:20:47