在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) . 我不知道为什么会说改造 . 我没有任何东西告诉它被转换为变换 .
1 回答
您使用的是什么版本的Unity?这两个例子都为我编译:
实例化返回您输入的内容 .
如果你输入一个变换句柄,它将返回一个变换句柄 . 如果你扔了一个游戏对象,它将返回一个游戏对象 . 你似乎确实传递了一个游戏对象 . 您可以尝试将其转换为第一个参数中的游戏对象,如下所示:
对您的问题最简单的答案是使用transform.gameObject命令从变换中获取GameObject,如下所示:
如果上面的代码仍然出错,您可能需要重新启动或重新安装Unity,因为它是正常工作的代码 .