版本:Unity 6 (6000.0)
语言:English
实例化弹丸和爆炸
处理事件

用布娃娃或残骸替换角色

在游戏中,您可能希望将角色、车辆或建筑物等资产从完整状态切换到破坏状态。与其修改 GameObject 的完整版本(通过删除脚本、添加 Rigidbody 组件等),不如删除完整的 GameObject 并将其替换为实例化的破坏预制体,这通常更高效且更有效。

这为您提供了很大的灵活性。您可以对破坏版本使用不同的材质,附加完全不同的 脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间推移修改组件属性以及以任何您喜欢的方式响应用户输入。 更多信息
查看 词汇表
,或者实例化一个包含 GameObject 的预制体,将其分成许多部分,以代表损坏或破碎的状态。所有这些选项都可以通过一次调用 Instantiate 来实现,以将您的破坏版本带入 场景场景包含游戏的环境和菜单。将每个独特的场景文件视为一个独特的关卡。在每个场景中,您可以放置环境、障碍物和装饰物,从而设计和构建您的游戏。 更多信息
查看 词汇表
,同时删除原始版本。

最重要的是,您可以使用与原始版本完全不同的 GameObjects 创建您要 Instantiate 的破坏版本。例如,要创建一个可破坏的机器人,您将建模两个版本:一个由单个 GameObject 组成,具有 网格Unity 中的主要图形基元。网格构成了 3D 世界的大部分。Unity 支持三角形或四边形多边形网格。Nurbs、Nurms、Subdiv 表面必须转换为多边形。 更多信息
查看 词汇表
渲染器和用于机器人移动的脚本,另一个由多个骨骼部分组成,可以由物理引擎单独控制。

当使用只有一个 GameObject 的模型时,您的游戏运行速度更快,因为该模型包含的三角形更少,因此渲染速度比具有许多小部件的机器人更快。同样,当您的机器人快乐地四处走动时,没有理由将其分成单独的部分。

构建一个没有代码的残骸机器人预制体

要构建一个没有代码的残骸机器人预制体

  1. 在您喜欢的 3D 建模软件中使用许多不同的骨骼部分对您的机器人进行建模,并将其导出到 Unity 项目的 Assets 文件夹中。

  2. 在 Unity 编辑器中创建一个空场景。

  3. 将模型从 Project 窗口拖放到空场景中。

  4. 通过选择所有部件并选择 Component > Physics > Rigidbody,将刚体添加到所有部件。

  5. 通过选择所有部件并选择 Component > Physics > Mesh Collider(启用 Convex 选项以提高性能),将碰撞器添加到所有部件。

  6. 确保将残骸机器人的所有部件都作为父级添加到一个根 GameObject。

  7. 为了获得额外的特殊效果,将一个类似烟雾的 粒子系统通过在场景中生成和动画化大量小型 2D 图像来模拟液体、云层和火焰等流体实体的组件。 更多信息
    查看 词汇表
    作为子 GameObject 添加到每个部件。

  8. 现在您拥有一个具有多个可爆炸部件的机器人。这些部件可以掉落到地面,因为它们受物理引擎控制,并且每个部件都会由于附加的粒子系统而产生粒子轨迹。

  9. 单击播放以预览模型的反应方式,并进行必要的调整。

  10. 将根 GameObject 拖放到 Project 窗口中的 Assets 文件夹中,以创建一个新的预制体。

从代码构建一个残骸机器人预制体

以下示例演示了如何在代码中模拟这些步骤

using UnityEngine;
public class WreckOnCollision : MonoBehaviour
{
   public GameObject wreckedVersion;

   void OnCollisionEnter()
   {
       Destroy(gameObject);
       Instantiate(wreckedVersion,transform.position,transform.rotation);
   }
}
An example of a robot Prefab being swapped for a wrecked Prefab when hit by a projectile
机器人预制体被弹丸击中时被交换为残骸预制体的示例

您可以在此处下载包含所有这些示例的项目:InstantiatingPrefabsExamples.zip

其他资源

  • 预制体一种资产类型,允许您存储包含组件和属性的完整 GameObject。预制体充当模板,您可以在场景中从该模板创建新的对象实例。 更多信息
    查看 词汇表
  • GameObjectUnity 场景中的基本对象,可以代表角色、道具、场景、摄像机、航点等。GameObject 的功能由附加到它的组件定义。 更多信息
    查看 词汇表
实例化弹丸和爆炸
处理事件