【问题标题】:Loading PreFab from c# in Unity在 Unity 中从 c# 加载 PreFab
【发布时间】:2014-10-12 05:34:05
【问题描述】:

我正在尝试弄清楚如何从 c# 代码中实例化一个预制件,并且我尝试了以下方法:

我已经像这样创建了一个公共转换:

public Transform myItem;

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

然后我在 start() 中调用这个:

myItem = Instantiate(Resources.Load("myPrefab")) as Transform;

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

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

【问题讨论】:

  • 使用硬转换(产生错误)而不是软转换(产生空值)可能有助于避免类似未来的问题。如果您将上述内容写为myItem = (Transform)Instantiate(Resources.Load("myPrefab"));,Unity 会告诉您“error CS0030: Cannot convert type `UnityEngine.GameObject' to `UnityEngine.Transform'”,您的Instantiate() API 使用问题将很明显。

标签: c# object unity3d transform


【解决方案1】:

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

GameObject myItem = (GameObject)Instantiate(Resources.Load("myPrefab"), typeof(GameObject));

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

Transform transform = myItem.transform;

【讨论】:

    【解决方案2】:

    当对象为Instantiated 时,它们变为GameObjects。您的代码应如下所示:

    GameObject myItem = Instantiate(Resources.Load("myPrefab")) as GameObject;
    

    如果您想要Transform,您可以简单地使用所有游戏对象都有一个变换组件这一事实。

    Transform t = myItem.transform.
    

    或者如果你真的想成为一个坏蛋,你可以在一行中做到:

    Transform myItem = (Instantiate(Resources.Load("myPrefab")) as GameObject).transform;
    

    【讨论】:

    • 谢谢,我喜欢做坏蛋;-)
    【解决方案3】:

    如果你有这样的预制路径

    GameObject mainObject = (GameObject)Instantiate(Resources.Load("prefabs/" + "BaseMain"));
    

    【讨论】:

      猜你喜欢
      • 2022-09-29
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2019-08-19
      相关资源
      最近更新 更多