UnityException:声明变量时不允许调用此函数

时间:2016-04-01 18:17:02

标签: unity3d runtime-error

我正在尝试实例化一个GameObject并保留对它的引用但由于某种原因,每次实例化时都会出现上述错误,即使实例化仍然存在。它指向我的代码行是:GameObject next = Instantiate(prefab);就像我说的,实例化仍然可以正常工作,但为了稳定,我想摆脱这个错误。 Unity想从我这里得到什么?

3 个答案:

答案 0 :(得分:4)

你错了。 粗略地说,实例化返回

您通过的内容。

如果你有这个......

   public GameObject modelDinosaur;

你确实可以拥有这个

   GameObject nu = Instantiate(modelDinosaur);

无需施法。 (如果你愿意,可以施放。)

是的,对于预制件,请完全按照每个人的说法进行操作

  GameObject nu = (GameObject)Instantiate(yourPrefab);

BTW使用“nu”(如“new”)作为临时变量是惯用的。 (“new”当然是一个关键字,你不能使用它。)

最常见的是你做这些事情。

   GameObject nu = Instantiate(modelDinosaur);
   YourDinoScript nuD = nu.GetComponent<YourDinoScript>();
   yourDinoList.Add(nuD);
   nu.name = "dynamic " + counter;
   nuT = nu.transform;
   nuT = blah blah
   nuT = your holder
   nuT = logic position
   etc etc
PS:关于Unity的doco,你不妨阅读醉酒聊天机器人的狂言。算了吧。

答案 1 :(得分:2)

Instantiate()返回Object,您需要明确地将其投放到GameObject

试试这个:

GameObject next = (GameObject)Instantiate(prefab);

更多信息:

Instantiate()签名:public static Object Instantiate(Object original)

这清楚地表明返回类型为Object而非Gameobject

<强>参考

有关详细信息,请参阅this

答案 2 :(得分:2)

Unity Instantiate方法的返回类型为Object。如果要将预制件存储在GameObject变量中,则需要将预制件实例化为GameObject

假设您正在使用C#,您可以实例化GameObject并将其存储在如下变量中:

GameObject myGameObject = Instantiate(prefab) as GameObject;