用布娃娃或残骸替换角色
Swap an intact GameObject for an instantiated destroyed prefab to switch an object to a wrecked state.
阅读时间4 分钟最后更新于 1 个月前
在游戏中,您可能需要将角色、车辆、建筑物等资产从“完好无损”状态切换到“损毁”状态。与其修改完好无损的游戏对象(例如移除脚本、添加刚体组件等),不如直接删除原始游戏对象,并用一个损毁状态的预制体来替换它。这种方式通常更快速且更有效。
这样可以提供很大的灵活性。您可以为损毁版本使用不同的材质;可以附加完全不同的脚本;甚至可以实例化一个预制体,其中包含多个被物理系统控制的碎片,以模拟破碎或损毁的状态。所有这些效果都可以通过一次调用 实现,将损毁版本引入场景,同时删除原始游戏对象。
Instantiate最重要的是,您可以通过与原始游戏对象完全不同的游戏对象来创建损毁版本,并通过 方法实例化它。例如,要创建一个可破坏的机器人,您需要制作两个版本:一个版本由单个游戏对象组成,包含网格渲染器和控制机器人移动的脚本。另一个版本由多个骨骼部件组成,这些部件可以通过物理系统单独控制。
Instantiate使用单个游戏对象的模型时,游戏运行速度更快,因为该模型包含的三角形更少,渲染速度也更快。此外,当机器人正常行走时,没有必要将其拆分为多个部件。
无代码构建损毁机器人预制体
要无代码构建一个损毁机器人预制体,请按照以下步骤操作:
-
在您常用的 3D 建模软件中,为机器人建模,使其包含多个不同的骨骼部件,然后将模型导出到 Unity 项目的 Assets 文件夹中。
-
在 Unity 编辑器中创建一个空场景。
-
将模型从项目 (Project) 窗口拖入空场景中。
-
选中所有部件,然后选择组件 (Component) > 物理 (Physics) > 刚体 (Rigidbody),为所有部件添加刚体组件
-
选中所有部件,然后选择组件 (Component) > 物理 (Physics) > 网格碰撞体 (Mesh Collider) 并启用 Convex 选项以提高性能,为所有部件添加碰撞体。
-
确保将所有损毁机器人的部件作为单个根游戏对象的子对象。
-
为了增加特效,可以为每个部件添加一个类似烟雾的粒子系统作为子对象。
-
现在,您已经创建了一个具有多个可爆炸部件的机器人。这些部件会因物理作用掉落,并且每个部件都会因附加的粒子系统而产生轨迹。
-
点击运行 (Play) 按钮预览模型的反应,并根据需要进行调整。
-
将根游戏对象拖入项目 (Project) 窗口的资源 (Assets) 文件夹中,创建一个新的预制体。
通过代码构建损毁机器人预制体
以下示例展示了如何通过代码实现上述步骤:
using UnityEngine;public class WreckOnCollision : MonoBehaviour{ public GameObject wreckedVersion; void OnCollisionEnter() { Destroy(gameObject); Instantiate(wreckedVersion,transform.position,transform.rotation); }}

当机器人预制件被飞弹击中时被替换为残骸预制件的示例
可以从此处下载包含上述所有示例的项目:InstantiatingPrefabsExamples.zip