【问题标题】:Unity 2D Instantiating a prefab with its componentsUnity 2D 使用其组件实例化预制件
【发布时间】:2014-06-08 20:21:09
【问题描述】:

我将一些块预制件添加到游戏对象数组中:

公共游戏对象[]块;

每个预制件都有一个 BoxCollider2D、Script 和 Rigidbody2D 组件。但是当我尝试在场景中实例化预制件时,它似乎没有附加组件?

这是我实例化预制件的方式:

for (int i = 0; i < 4; i++) 
{
     for (int j = 0; j < gridWidth; j++) 
     {
      blockClone = Instantiate (blocks [Random.Range (0, blocks.Length)] as GameObject, new Vector3 (j, -i-2, 0f), transform.rotation) as GameObject;
     }

}

我做错了什么?

【问题讨论】:

  • 如果您在场景中编辑了预制件,请确保单击检查器选项卡顶部的 应用 按钮。如果您没有点击 Apply 按钮,与 prefab 不匹配的组件和变量将被加粗。按下“应用”按钮后,粗体字消失,因为现在与预制件匹配。
  • 虽然与您的问题无关,但值得注意的是,使用 as 与直接转换可能会产生意想不到的后果,除非您知道该功能。看到这个问题:stackoverflow.com/questions/132445/…

标签: c# unity3d


【解决方案1】:

确保您的预制件实际更新为包含 BoxCollider2D 和 Rigibody2D。

改变这一行:

blockClone = Instantiate (blocks [Random.Range (0, blocks.Length)] as GameObject, 
             new Vector3 (j, -i-2, 0f), transform.rotation) as GameObject;

收件人:

blockClone = Instantiate(blocks [Random.Range (0, blocks.Length)], 
             new Vector3(j, -i-2, 0f), transform.rotation) as GameObject;

你不需要那个额外的as GameObject


如果所有其他方法都失败了,您可以在运行时使用AddComponent. 将它们附加到预制件上

  blockClone.AddComponent<BoxCollider2d>();

这应该是您最后的选择,但在您这样做之前请仔细检查您的预制件。

【讨论】:

    猜你喜欢
    • 2014-08-28
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    相关资源
    最近更新 更多