文档

Unity Engine

Unity Engine

使用预制体构建结构

Use prefabs to instantiate several copies of a block prefab to construct a wall.
阅读时间4 分钟最后更新于 1 个月前

您可以通过代码在特定配置中快速生成预制体的多个副本。这种通过代码生成结构的方法称为程序化生成。

创建方块实例墙

此任务展示了如何创建一堵由方块实例组成的墙。

将墙脚本附加到一个游戏对象上

  1. 创建一个 MonoBehaviour 脚本并将其命名为
    Wall
    。
  2. 将以下代码粘贴到您的
    Wall
    脚本中。
  3. 将
    Wall
    脚本附加到场景中的一个空游戏对象上。
using UnityEngine;public class Wall : MonoBehaviour{ public GameObject block; public int width = 10; public int height = 4; void Start() { for (int y=0; y<height; ++y) { for (int x=0; x<width; ++x) { Instantiate(block, new Vector3(x,y,0), Quaternion.identity); } } }}
**结果:**检视面板中会显示带有
None
的
Block
变量。如果变量值为
None
,则表示尚未为该变量分配任何预制体。

尚未分配预制体的 Block 变量

为 Block 变量分配预制体

在将预制体分配给 Block 变量之前,上述示例脚本将无法正常工作。创建一个简单的方块预制体的步骤如下:
  1. 选择游戏对象 (GameObject) > 3D 对象 (3D Object) > 立方体 (Cube)。
  2. 将立方体从层级视图窗口拖入项目视图窗口中的 Assets 文件夹。这将创建一个预制体资源。
  3. 将预制体重命名为
    Block
    。
  4. 现在
    Block
    预制体已经作为资源存在,您可以安全地从层级视图中删除立方体。
  5. 现在已经创建了
    Block
    预制体,接下来可以将其分配给 Block 变量。选择原始游戏对象(即附加了
    Wall
    脚本的游戏对象)。将
    Block
    预制体从项目视图窗口拖入检视面板中的 Block 变量字段(显示为
    None
    )。

已分配 Block 预制体的 Block 变量

完成上述设置后,点击运行 (Play) 按钮,您会看到 Unity 使用预制体构建了一堵墙:

由 4 排(每排 10 块)构成的墙,按以上示例生成。

这是一种可以在 Unity 中反复使用的灵活工作流程模式。因为在此脚本中使用的是预制体,您可以轻松替换或编辑预制体来修改墙的砖块属性,而无需修改脚本。此外,您还可以将
Wall
脚本附加到场景中的其他 GameObject 上,并为它们分配不同的预制体,从而使用不同类型的预制体构建多种类型的墙。
您可以通过代码将 GameObject 放置在网格、圆形图案、随机分布或其他任何配置中,以满足您正在开发的游戏或应用的需求。以下是另一个示例,展示了如何以圆形方式排列实例:
using UnityEngine;public class CircleFormation : MonoBehaviour{ // Instantiates prefabs in a circle formation public GameObject prefab; public int numberOfObjects = 20; public float radius = 5f; void Start() { for (int i = 0; i < numberOfObjects; i++) { float angle = i * Mathf.PI * 2 / numberOfObjects; float x = Mathf.Cos(angle) * radius; float z = Mathf.Sin(angle) * radius; Vector3 pos = transform.position + new Vector3(x, 0, z); float angleDegrees = -angle*Mathf.Rad2Deg; Quaternion rot = Quaternion.Euler(0, angleDegrees, 0); Instantiate(prefab, pos, rot); } }}

圆形排列的墙块,按以上示例生成

其他资源