在Unity with C#中,我试图从预制件实例化并将脚本分配给新对象。为此,我相信我需要将新对象转换为GameObject。但是,Instantiate的返回类型是UnityEngine.Object
来自Unity manual:
public GameObject wreck;
...
void KillSelf () (
...
GameObject wreckClone = (GameObject) Instantiate(wreck, transform.position, transform.rotation);
但是,这会导致InvalidCastException。我已经在这个论坛上看到它提到试试这个:
UnityEngine.Object uo = Instantiate(...
GameObject go = (GameObject)go;
然而,这导致了同样的例外。
我看过一些帖子暗示试图投射:
...Instantiate(...) as GameObject;
但是,编译器似乎不支持此语法。
这非常令人困惑。我正在从(大概是正确的)手册和堆栈溢出答案中复制一小段代码,而它们似乎无法正常运行。
我不确定需要哪些信息来帮助解决这个难题,所以请问我需要什么。
到目前为止,我已尝试在尝试投射之前记录实例化的对象。它显示为ThrownFood(克隆)(UnityEngine.transform)。我不知道为什么会说改造。我没有任何东西可以说它是一种转变。
答案 0 :(得分:2)
您使用的Unity版本是什么?这两个例子都为我编译:
public GameObject wreck;
GameObject testObj = new GameObject();
GameObject go = Instantiate(testObj, transform.position, transform.rotation) as GameObject;
GameObject go2 = (GameObject)Instantiate(testObj, transform.position, transform.rotation);
实例化会返回您投入的内容。
如果你输入变换句柄,它将返回一个变换句柄。如果你扔了一个游戏对象,它将返回一个游戏对象。你似乎确实传递了一个游戏对象。您可以尝试将其转换为第一个参数中的游戏对象,如下所示:
GameObject wreckClone = (GameObject) Instantiate((GameObject)wreck, transform.position, transform.rotation);
您问题的最简单答案是使用transform.gameObject命令从变换中获取GameObject,如下所示:
GameObject go = wreckClone.gameObject;
如果上述代码仍然出错,您可能需要重新启动或重新安装Unity,因为它正在运行代码。