您可以通过代码在特定配置中快速生成预制体的多个副本。这种通过代码生成结构的方法称为程序化生成。
此任务展示了如何创建一堵由方块实例组成的墙。
Wall。Wall 脚本中。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 变量之前,上述示例脚本将无法正常工作。创建一个简单的方块预制体的步骤如下:
选择游戏对象 (GameObject) > 3D 对象 (3D Object) > 立方体 (Cube)。
将立方体从层级视图窗口拖入项目视图窗口中的 Assets 文件夹。这将创建一个预制体资源。
将预制体重命名为 Block。
现在 Block 预制体已经作为资源存在,您可以安全地从层级视图中删除立方体。
现在已经创建了 Block 预制体,接下来可以将其分配给 Block 变量。选择原始游戏对象(即附加了 Wall 脚本的游戏对象)。将 Block 预制体从项目视图窗口拖入检视面板中的 Block 变量字段(显示为 None)。
完成上述设置后,点击运行 (Play) 按钮,您会看到 Unity 使用预制体构建了一堵墙:
这是一种可以在 Unity 中反复使用的灵活工作流程模式。因为在此脚本中使用的是预制体,您可以轻松替换或编辑预制体来修改墙的砖块属性,而无需修改脚本。此外,您还可以将 Wall 脚本附加到场景中的其他__ GameObject__Unity 场景中的基础对象,可以表示角色、道具、风景、摄像机、路径点等。GameObject 的功能由所附的组件决定。更多信息
See in Glossary 上,并为它们分配不同的预制体,从而使用不同类型的预制体构建多种类型的墙。
您可以通过代码将 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);
}
}
}