教程:编写触发器脚本
初级 设计师
在本教程中,我们将创建一个触发器,当球穿过它时将球的大小加倍。
Note
本教程中的截图和视频是使用早期版本的 Stride 制作的,因此某些 UI 部分以及默认的天空盒和球体可能与你的版本看起来不同。
1. 创建弹跳球
按照创建弹跳球教程中的说明操作。这将创建一个简单的场景,球从半空中落下、撞击地面并弹跳。
2. 添加触发器
现在我们将在球和地面之间添加一个触发器,让球穿过它。
在 Scene Editor 中,点击白色加号按钮(创建新实体)并选择 Empty entity。

Game Studio 会向场景中添加一个默认名称为 Entity 的实体。
这个实体将作为我们的触发器,因此将它重命名为 Trigger,以便于识别。
由于我们不需要触发器移动,我们将把它设为静态组件。在 Property Grid 中,点击 Add component 并选择 Static component。

在 Property Grid 中,展开 Static Component 以查看其属性。
我们需要给触发器一个形状。在 Colliders 旁边,点击
(添加)并选择 Box。
这会为触发器赋予一个盒体形状。
3. 为触发器添加模型
目前,触发器在运行时是不可见的。为了更好地展示触发器的工作原理,我们将把它做成一个透明的盒体。这对触发器的功能没有任何影响;这只是意味着我们可以轻松地看到它在运行时的位置。
创建一个新的程序化模型资源。为此,在 Asset View 中点击 Add asset,并选择 Models > Cube。

创建一个新的空材质资源。为此,在 Asset View 中点击 Add asset,并选择 Materials > Material。

我们重命名材质以便于识别。为此,右键单击,选择 Rename,并输入一个新名称(例如 Transparent)。
选择 Trigger 实体。在 Property Grid 中,点击 Add component 并选择 Model。

Game Studio 会为实体添加一个模型组件。
在 Model 下,点击
(选择资源)。
选择我们在步骤 1 中创建的 Cube 模型并点击 OK。

在 Property Grid 中,在 Model > Materials 下,点击
(选择资源)。
选择我们在步骤 2 中创建的 Transparent 材质并点击 OK。

在 Asset View 中,选择 Transparent 材质资源。

在 Property Grid 中,在 Misc > Transparency 下选择 Blend。

默认情况下,Alpha 设置为 1。这使材质完全不透明。要将其设置为 50% 不透明度,请将 Alpha 设为 0.5。

现在触发器区域在运行时将可见。
4. 放置触发器的位置
我们需要把触发器放在地面和球体之间,这样球才能从它中间落下。
在 Property Grid 中,在 Transform 下将 Position 设置为:X:0, Y:3, Z:0
现在触发器实体位于地面和球体之间。
5. 用脚本改变球的大小
如果我们现在运行项目(F5),球会从触发器上弹开,但什么也不会发生。
让我们编写一个脚本,在球进入触发器时改变它的大小。
Note
有关脚本的更多信息,请参见脚本。
在 Asset View 中,点击 Add asset 并选择 Scripts > Sync Script。
在 Create a script 对话框中,将脚本命名为 Trigger 并点击 Create script。
2a. 如果 Game Studio 询问是否要保存脚本,请点击 Save。
2b. 如果 Game Studio 询问是否要重新加载程序集,请点击 Reload。
打开脚本,将其内容替换为以下代码,并保存文件:
using Stride.BepuPhysics; using Stride.BepuPhysics.Definitions.Contacts; using Stride.Core.Mathematics; using Stride.Engine; namespace TransformTrigger { // 添加 IContactHandler 以监听接触事件 public class Trigger : SyncScript, IContactHandler { public override void Start() { // 脚本的初始化。 } public override void Update() { // 每个新帧都执行一些操作 } // 让对象穿过此触发器,设为 false 会使对象从它上面弹开 public bool NoContactResponse => true; void IContactHandler.OnStartedTouching<TManifold>(Contacts<TManifold> contacts) { // 当某个对象进入此对象内部时 contacts.Other.Entity.Transform.Scale = new Vector3(2.0f); } void IContactHandler.OnStoppedTouching<TManifold>(Contacts<TManifold> contacts) { // 当某个对象离开此对象时 contacts.Other.Entity.Transform.Scale = new Vector3(1.0f); } } }这段代码会将任何进入触发器的实体的大小(缩放)加倍。当实体离开触发器时,它会被设置为单位大小。
重新加载程序集。
6. 添加脚本
最后,让我们把这个脚本作为组件添加到触发器实体上。
在 Game Studio 中,选择 Trigger 实体。
在 Property Grid 中,点击 Add component 并选择 Trigger 脚本。

在你的 Static Component 内部,点击
Contact Event Handler属性旁边的手形图标
选择你新创建的
Trigger组件并点击Ok
7. 运行项目
运行项目(F5)查看触发器的实际效果。
球穿过触发器,大小加倍,离开触发器后恢复原来的大小。