在游戏中,您可能希望将角色、车辆或建筑物等资产从完整状态切换到破坏状态。与其修改 GameObject 的完整版本(通过删除脚本、添加 Rigidbody 组件等),不如删除完整的 GameObject 并将其替换为实例化的破坏预制体,这通常更高效且更有效。
这为您提供了很大的灵活性。您可以对破坏版本使用不同的材质,附加完全不同的 脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间推移修改组件属性以及以任何您喜欢的方式响应用户输入。 更多信息
查看 词汇表,或者实例化一个包含 GameObject 的预制体,将其分成许多部分,以代表损坏或破碎的状态。所有这些选项都可以通过一次调用 Instantiate
来实现,以将您的破坏版本带入 场景场景包含游戏的环境和菜单。将每个独特的场景文件视为一个独特的关卡。在每个场景中,您可以放置环境、障碍物和装饰物,从而设计和构建您的游戏。 更多信息
查看 词汇表,同时删除原始版本。
最重要的是,您可以使用与原始版本完全不同的 GameObjects 创建您要 Instantiate
的破坏版本。例如,要创建一个可破坏的机器人,您将建模两个版本:一个由单个 GameObject 组成,具有 网格Unity 中的主要图形基元。网格构成了 3D 世界的大部分。Unity 支持三角形或四边形多边形网格。Nurbs、Nurms、Subdiv 表面必须转换为多边形。 更多信息
查看 词汇表 渲染器和用于机器人移动的脚本,另一个由多个骨骼部分组成,可以由物理引擎单独控制。
当使用只有一个 GameObject 的模型时,您的游戏运行速度更快,因为该模型包含的三角形更少,因此渲染速度比具有许多小部件的机器人更快。同样,当您的机器人快乐地四处走动时,没有理由将其分成单独的部分。
要构建一个没有代码的残骸机器人预制体
在您喜欢的 3D 建模软件中使用许多不同的骨骼部分对您的机器人进行建模,并将其导出到 Unity 项目的 Assets 文件夹中。
在 Unity 编辑器中创建一个空场景。
将模型从 Project 窗口拖放到空场景中。
通过选择所有部件并选择 Component > Physics > Rigidbody,将刚体添加到所有部件。
通过选择所有部件并选择 Component > Physics > Mesh Collider(启用 Convex 选项以提高性能),将碰撞器添加到所有部件。
确保将残骸机器人的所有部件都作为父级添加到一个根 GameObject。
为了获得额外的特殊效果,将一个类似烟雾的 粒子系统通过在场景中生成和动画化大量小型 2D 图像来模拟液体、云层和火焰等流体实体的组件。 更多信息
查看 词汇表 作为子 GameObject 添加到每个部件。
现在您拥有一个具有多个可爆炸部件的机器人。这些部件可以掉落到地面,因为它们受物理引擎控制,并且每个部件都会由于附加的粒子系统而产生粒子轨迹。
单击播放以预览模型的反应方式,并进行必要的调整。
将根 GameObject 拖放到 Project 窗口中的 Assets 文件夹中,以创建一个新的预制体。
以下示例演示了如何在代码中模拟这些步骤
using UnityEngine;
public class WreckOnCollision : MonoBehaviour
{
public GameObject wreckedVersion;
void OnCollisionEnter()
{
Destroy(gameObject);
Instantiate(wreckedVersion,transform.position,transform.rotation);
}
}
您可以在此处下载包含所有这些示例的项目:InstantiatingPrefabsExamples.zip