在Unity中从c#加载PreFab

Man*_*nsa 2 c# transform object unity-game-engine

我试图弄清楚如何从c#代码实例化预制件,我尝试了以下内容:

我创建了一个像这样的公共变换:

public Transform myItem;
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个预制件并将其命名为myPrefab并将其放在我的Assets/Resources文件夹中.

然后我在start()中调用:

myItem = Instantiate(Resources.Load("myPrefab")) as Transform;
Run Code Online (Sandbox Code Playgroud)

运行代码时,Transform保持为空?

我错过了什么?任何帮助表示赞赏.

Fun*_*onR 6

当对象被实例化时,它们变成GameObjects.您的代码应如下所示:

GameObject myItem = Instantiate(Resources.Load("myPrefab")) as GameObject;
Run Code Online (Sandbox Code Playgroud)

如果你想要一个变换,你可以简单地使用所有GameObjects都有变换组件的事实.

Transform t = myItem.transform.
Run Code Online (Sandbox Code Playgroud)

或者,如果你真的想成为一个坏蛋,你可以在一行中完成所有这些:

Transform myItem = (Instantiate(Resources.Load("myPrefab")) as GameObject).transform;
Run Code Online (Sandbox Code Playgroud)


Jay*_*ama 5

预制件应放入GameObject而不是Transform:

GameObject myItem = (GameObject)Instantiate(Resources.Load("myPrefab"), typeof(GameObject));
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样从GameObject访问Transform:

Transform transform = myItem.transform;
Run Code Online (Sandbox Code Playgroud)