首页 文章

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

提问于
浏览
1

在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 回答

  • 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,因为它是正常工作的代码 .

相关问题