Version: Unity 6.0 (6000.0)
语言 : 中文
使用预制体构建结构
Prefab instance Inspector reference

实例化飞弹和爆炸

在此示例中,当玩家按下射击按钮时,一个 Launcher 游戏对象会实例化一个飞弹预制体。预制件包含一个网格、一个刚体和一个碰撞器,因此它可以在空中飞行并检测碰撞事件。

当飞弹与某个物体碰撞时,它会实例化一个爆炸预制体。爆炸预制件包含粒子系统和一个脚本,该脚本会对周围的其他游戏对象施加力的效果。

与前面的 Block 示例类似,无论飞弹预制体的复杂程度如何,都可以通过一行代码完成实例化。在实例化预制体后,还可以修改实例化后的游戏对象的任何属性。例如,可以设置飞弹刚体的速度。

这种方式不仅易于使用,还可以在不修改代码的情况下随时调整预制体。例如,如果飞弹是一枚火箭,后续可以为其添加一个粒子系统,使其留下尾迹。完成此操作后,所有实例化的火箭都会带有粒子轨迹。

以下脚本展示了如何使用 Instantiate 方法发射飞弹。

using UnityEngine;
public class FireProjectile : MonoBehaviour
{
    public Rigidbody projectile;
    public float speed = 4;
    void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            Rigidbody p = Instantiate(projectile, transform.position, transform.rotation);
            p.velocity = transform.forward * speed;
        }
    }
}

在代码中,预制件变量类型是刚体,而不是游戏对象。这种做法有两个优点:

  1. 只能将具有刚体组件的游戏对象分配给此变量。此功能很有用,其有助于确保分配给变量的是正确的游戏对象。

  2. Instantiate 方法返回新实例上刚体组件的引用。此功能很有用,其使得在实例化后可以立即设置刚体的速度。

在创建公共预制体变量时,变量类型可以是游戏对象,也可以是任何有效的组件类型(Unity 内置组件或自定义的 MonoBehaviour 脚本)。

对于游戏对象类型的变量,可以分配任意游戏对象,而 Instantiate 函数会返回新游戏对象实例的引用。

对于组件类型变量(例如刚体、碰撞体和光源),只能分配带有该组件的游戏对象,而 Instantiate 函数会返回新游戏对象实例上对应组件的引用。

以下脚本(放置在飞弹预制体上)会在飞弹碰撞物体后,在飞弹的当前位置实例化爆炸,并销毁飞弹游戏对象。

using UnityEngine;
public class Projectile : MonoBehaviour
{
   public GameObject explosion;
   void OnCollisionEnter()
   {
       Instantiate(explosion,transform.position,transform.rotation);
       Destroy(gameObject);
   }
}
实例化飞弹预制体的示例,在发生撞击时替换为爆炸预制件
实例化飞弹预制体的示例,在发生撞击时替换为爆炸预制件

在上图中,运行模式下的脚本显示,实例化后的游戏对象会出现在层级视图中,并在名称后附加 (Clone) 字样。

其他资源

使用预制体构建结构
Prefab instance Inspector reference
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961