如何以编程方式将预制件附加到GameObject?

时间:2018-09-17 18:37:40

标签: c# unity3d

我是Unity新手。尝试将.obj文件(下载并保存在我的文件系统中)加载/附加到Unity中的游戏对象。我尝试使用以下代码,但出现错误。

Resources.Load(My_File_Path).transform.parent = targetGameObject;

我得到的错误:

错误CS1061:类型为UnityEngine.Object' does not contain a definition for transform',找不到扩展方法transform' of type UnityEngine.Object'。您是否缺少装配参考?

3 个答案:

答案 0 :(得分:1)

您似乎已经正确加载了预制件,但是问题在于您没有处理预制件的实例-您正在处理预制件本身,它是Object而不是{{1 }}。

在访问GameObject之类的GameObject特定成员之前,您需要Instantiate()预制。此方法接受类型为transform的参数,因此请传递您的预制引用,并将所得的Object实例分配为GameObject的子代:

targetGameObject

答案 1 :(得分:1)

在运行时从预制中创建游戏对象需要您实例化该对象。

首先,要实例化预制件,您无需担心转换。...

使用Resources.Load时-您需要确保项目中有一个Resources文件夹。如果不做。

请注意,然后在资源文件夹中创建一个名为Prefabs的子文件夹。您不必这样做。

在资源文件夹中,您可以放置​​预制件。 (将完成的项目从场景中拖放)一旦您将预制件从场景中删除就可以安全删除。

现在的代码是:

GameObject yourobject = Instantiate(Resources.Load("thenameofprefab") )as GameObject;

您现在可以将预制项目放置在您的游戏对象中,并可以自由地操纵其变形和旋转。

如果在资源文件夹中创建一个预制文件夹,则方法为

GameObject yourobject = Instantiate(Resources.Load("Prefabs/thenameofprefab") )as GameObject;

希望这会有所帮助。

p.s。您可以在该实例化线上设置变换和旋转,只需要检查重载即可了解如何使用它!

答案 2 :(得分:0)

如果我正确理解了这个问题,则首先需要从您的对象创建一个预制件。拖到场景中,然后将创建的GameObject放入资产中。 您可以创建 public GameObject prefab;在您的班级中。 然后像这样实例化它:  GameObject obj =Instantiate(prefab, Vector3.zero), Quaternion.identity);
然后您可以像以前一样附加它: obj.transform.parent = targetGameObject;