触发器
初级 设计师
Warning
Bullet Physics is being phased out. We no longer plan to support or expand its features as our focus shifts to Bepu Physics. We recommend transitioning to Bepu Physics for access to the latest updates and ongoing improvements.
如果你将碰撞体设置为触发器(Trigger),其他碰撞体就不再撞到它,而是直接穿过它。
触发器检测碰撞体何时进入它,你可以用它来编写事件脚本。例如,你可以检测玩家角色何时进入房间,并在脚本中使用它来触发事件。更多信息请参见事件。
Note
角色碰撞体不能用作触发器。
创建触发器
创建一个碰撞体。
在 Property Grid 中,在碰撞体组件属性下选择 Is Trigger。

检测触发器碰撞
你可以使用以下代码查看某物何时进入触发器:
// 等待某个实体与触发器碰撞
var firstCollision = await trigger.NewCollision();
var otherCollider = trigger == firstCollision.ColliderA
? firstCollision.ColliderB
: firstCollision.ColliderA;
或者,直接访问 TrackingHashSet:
var trigger = Entity.Get<PhysicsComponent>();
foreach (var collision in trigger.Collisions)
{
//对碰撞进行一些处理
}
或者使用 TrackingHashSet 的事件:
var trigger = Entity.Get<PhysicsComponent>();
trigger.Collisions.CollectionChanged += (sender, args) =>
{
if (args.Action == NotifyCollectionChangedAction.Add)
{
//新的碰撞
var collision = (Collision) args.Item;
//进行一些处理
}
else if (args.Action == NotifyCollectionChangedAction.Remove)
{
//旧的碰撞
var collision = (Collision)args.Item;
//进行一些处理
}
};
有关如何使用触发器的示例,请参见编写触发器脚本教程。