过去三天我一直在讨论这个问题。我试图实例化一个Unity预制件。我收到以下错误:
ArgumentException: The Object you want to instantiate is null.
我更改了GameObject(Sphere),但我得到了同样的错误。这是我的代码。
public class SEMCell : MonoBehaviour, IAbstractCell{
SCE[] arrayOfSCEs;
public SCE scePrefab;
void IAbstractCell.setMecaModel(AbstractCellMechanicsModel model){
this.arrayOfSCEs = new SCE[10];
SCE sce;
for (int i = 0; i < 10; i++) {
sce = Instantiate(scePrefab);
this.arrayOfSCEs[i] = sce;
}
}
我还将我的GameObject链接到预制属性。任何人都有解决方案的线索?提前谢谢。
答案 0 :(得分:0)
您的预制件应为GameObject
类型,而不是SCE
。
将public SCE scePrefab;
更改为public GameObject scePrefab;
和
sce = Instantiate(scePrefab);
至sce = Instantiate(scePrefab).GetComponent<SCE>();
答案 1 :(得分:0)
您发布的代码很好。无论处理IAbstractCell
是什么,都将scePrefab
字段设置为空。
尝试将您的SCE字段设为私有和序列化:
[SerializeField] private SCE scePrefab;
这将向您显示编译器错误,其中您在其他代码中无意中将scePrefab
设置为null。否则,您可能会在SEMCell
内的任何位置将其设置为null,例如Await
或Start
。尝试在代码中搜索scePrefab = null
。
答案 2 :(得分:0)
您发布的代码很好。两种可能性:
无论处理IAbstractCell
是什么,都将scePrefab
字段设置为空。
尝试将您的SCE字段设为私有和序列化:
[SerializeField] private SCE scePrefab;
这将向您显示编译器错误,其中您在其他代码中无意中将scePrefab
设置为null。否则,您可能会在SEMCell
内的任何位置将其设置为null,例如Await
或Start
。尝试在代码中搜索scePrefab = null
。
或者,您正在销毁附加SCE脚本的对象。将该对象设为预制件,然后将预制件拖放到编辑器的插槽中。