Version: 6000.3
语言: 中文
在运行时实例化预制件
使用预制件构建结构

实例化预制件简介

您可以使用预制件一种资产类型,允许您存储包含组件和属性的游戏对象。预制件充当模板,你可以从中在场景中创建新的对象实例。更多信息
请参阅术语表
实例化复杂游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表
或运行时的游戏对象集合。与使用代码从头开始创建游戏对象相比,使用代码实例化预制件具有许多优点,因为您可以执行以下作:

  • 使用一行代码实例化预制件。从头开始创建等效的游戏对象需要更多代码行。
  • 更改实例化的预制件而不更改代码。您可以将简单的火箭变成增压火箭,而无需更改任何代码。

常见方案

在运行时实例化预制件在以下常见方案中很有用:

  • 通过在不同位置(例如网格或圆形结构)多次复制单个预制件来构建结构。
  • 从发射器发射射弹预制件。射弹预制件可以是一个复杂的配置,其中包含meshUnity 的主要图形原语。网格体构成了 3D 世界的很大一部分。Unity 支持三角或四边形多边形网格。Nurbs、Nurms、Subdiv 曲面必须转换为多边形。更多信息
    请参阅术语表
    ,刚体允许游戏对象受到模拟重力和其他力影响的组件。更多信息
    请参阅术语表
    ,collider 用于处理对象物理碰撞的不可见形状。碰撞体不需要与对象的网格体形状完全相同 - 在游戏中,粗略的近似值通常更有效且难以区分。更多信息
    请参阅术语表
    ,音频源场景中的音频剪辑播放到音频监听器或通过混音器播放的组件。更多信息
    请参阅术语表
    、动态光源和具有自己轨迹的子游戏对象粒子系统通过在场景中生成大量小型 2D 图像并为其设置动画来模拟流体实体(如液体、云和火焰)的组件。更多信息
    请参阅术语表
    .
  • 车辆、建筑物或角色,例如机器人,分解成许多碎片。在此场景中,示例脚本将删除完整的可运行机器人预制件并将其替换为损坏的机器人预制件。这个失事的预制件由机器人的独立破碎部件组成,每个部件都设置有自己的刚体组件和粒子系统。这种技术允许您仅用一行代码将机器人炸成许多碎片,从而用残破的预制件替换原始游戏对象。

实例化预制件

若要在运行时实例化预制件,您的代码需要对预制件的引用。若要进行此引用,可以创建类型为GameObject,然后将要使用的预制件分配给检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
请参阅术语表
.

以下脚本示例具有单个公共变量myPrefab,这是对预制件的引用。它在Start方法。

using UnityEngine;
public class InstantiationExample : MonoBehaviour 
{
    // Reference to the prefab. Drag a prefab into this field in the Inspector.
    public GameObject myPrefab;

    // This script will simply instantiate the prefab when the game starts.
    void Start()
    {
        // Instantiate at position (0, 0, 0) and zero rotation.
        Instantiate(myPrefab, new Vector3(0, 0, 0), Quaternion.identity);
    }
}

要使用此示例:

  1. 在项目中创建一个新的 MonoBehaviour 脚本,并将其命名为InstantiationExample.
  2. 复制代码并将其粘贴到新脚本中,然后保存。
  3. 使用菜单 GameObject > Create Empty 创建一个空的 GameObject。
  4. 通过将脚本拖到空的游戏对象上,将脚本作为组件添加到新的游戏对象中。
  5. 创建任何预制件,并将其从项目窗口一个窗口,显示您的内容Assets文件夹(项目选项卡)更多信息
    术语表中查看
    到脚本组件中的 My Prefab 字段中。

当您进入播放模式时,预制件会在场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表
.

您可以将不同的预制件拖到 Inspector 窗口中的 My Prefab 字段中,以更改 Unity 实例化的预制件,而无需更改脚本。

其他资源

在运行时实例化预制件
使用预制件构建结构