Unity C# 从预制件实例化并投射到 GameObject
Unity C# Instantiating from prefab and casting to GameObject
在带有 C# 的 Unity 中,我试图从预制件实例化并将脚本分配给新对象。为此,我认为我需要将新对象转换为游戏对象。然而, return 类型的 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(clone)(UnityEngine.transform)。我不知道为什么它会说转换。我没有任何信息告诉它要转换为转换。
您使用的是哪个版本的 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);
实例化return你扔进去的东西。
如果你输入一个转换句柄,它会 return 一个转换句柄。如果你扔一个游戏对象,它会 return 一个游戏对象。不过,您似乎确实将它传递给了一个游戏对象。您可以尝试将其转换为第一个参数中的游戏对象,如下所示:
GameObject wreckClone = (GameObject) Instantiate((GameObject)wreck, transform.position, transform.rotation);
解决您问题的最简单方法是使用 transform.gameObject 命令从变换中获取游戏对象,如下所示:
GameObject go = wreckClone.gameObject;
如果上面的代码仍然出错,您可能需要重新启动或重新安装 Unity,因为它是工作代码。
在带有 C# 的 Unity 中,我试图从预制件实例化并将脚本分配给新对象。为此,我认为我需要将新对象转换为游戏对象。然而, return 类型的 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(clone)(UnityEngine.transform)。我不知道为什么它会说转换。我没有任何信息告诉它要转换为转换。
您使用的是哪个版本的 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);
实例化return你扔进去的东西。
如果你输入一个转换句柄,它会 return 一个转换句柄。如果你扔一个游戏对象,它会 return 一个游戏对象。不过,您似乎确实将它传递给了一个游戏对象。您可以尝试将其转换为第一个参数中的游戏对象,如下所示:
GameObject wreckClone = (GameObject) Instantiate((GameObject)wreck, transform.position, transform.rotation);
解决您问题的最简单方法是使用 transform.gameObject 命令从变换中获取游戏对象,如下所示:
GameObject go = wreckClone.gameObject;
如果上面的代码仍然出错,您可能需要重新启动或重新安装 Unity,因为它是工作代码。