Unity C#从预制件实例化并转换为GameObject

时间:2015-03-09 02:43:15

标签: c# casting unity3d

在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 个答案:

答案 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,因为它正在运行代码。