您可以使用代码几乎瞬间创建许多具有特定配置的预制体一种资产类型,允许您存储包含组件和属性的完整游戏对象。预制体充当模板,您可以从中在场景中创建新的对象实例。 更多信息
参见 术语表副本。使用代码生成此类结构称为过程生成。
此任务演示如何创建一堵积木实例墙。
Wall
。Wall
脚本中。Wall
脚本附加到您场景中的一个空游戏对象Unity 场景中的基本对象,可以代表角色、道具、场景、摄像机、路径点等。游戏对象的的功能由附加在其上的组件定义。 更多信息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);
}
}
}
}
结果:检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。 更多信息
参见 术语表显示 Block
变量,字段中显示 None
。值为 None
表示尚未将任何预制体分配给此变量。
在您将预制体分配给 Block 变量之前,上面的示例脚本将无法工作。要创建一个简单的积木预制体
选择 GameObject > 3D 对象 > 立方体。
将立方体从 层次结构窗口拖动到 项目窗口中的 Assets 文件夹中。这将创建一个预制体资产。
将您的预制体重命名为 Block
。
现在您的 Block
预制体已作为资产存在,您可以安全地从层次结构中删除立方体。
现在您已创建了 Block
预制体,您可以将其分配给 Block 变量。选择您的原始游戏对象(附加了 Wall
脚本的那个)。然后将 Block
预制体从 项目窗口显示 Assets
文件夹内容的窗口(项目选项卡) 更多信息
参见 术语表 拖动到 Block 变量槽(显示 None
的位置)。
完成此设置后,单击 播放,您将看到 Unity 使用预制体构建墙壁
这是一种灵活的工作流程模式,您可以在 Unity 中反复使用它。因为您在此脚本中使用了预制体,所以您可以轻松地替换或编辑预制体以修改墙中积木的属性,而无需触碰脚本。您还可以将 Wall
脚本用于场景中的其他游戏对象,并为其分配不同的预制体,从而创建由不同类型预制体组成的各种墙壁。
您可以使用代码将游戏对象放置在网格中、圆形图案中、随机散布或您可以想到的任何其他配置中,以适合您正在创建的游戏或应用程序。以下是一个示例,展示了如何在圆形结构中放置实例
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);
}
}
}