Physical Trigger
Physical Trigger是当物理对象进入内部或外部时触发回调的对象。根据其形状,有四种类型的物理触发器:
- 指定半径的球面触发器
- 指定半径和高度的胶囊触发器
- 指定半径和高度的圆柱触发器
- 沿轴具有指定大小的箱形扳机
要被触发器检测到,物理对象必须同时具有身体(具有与触发器的Physical掩码匹配的Physical掩码)和一个形状(具有与触发器的Collision掩码匹配的Collision掩码)。
也可以为Physical Trigger指定Exclusion掩码,用于防止检测形状冲突。此掩码独立于Collision掩码。
- 对于具有形状的物体,可以在Parameters面板的Physics选项卡上设置Exclusion蒙版。
- 对于Physical Trigger,可以通过以下方式设置掩码C ++,C#或UnigineScript API 。
为了避免检测形状与Physical Trigger之间的碰撞,必须满足以下条件:
- 为形状设置的Collision遮罩必须比赛Physical Trigger的Collision掩码。
- 为形状设置的Exclusion遮罩必须比赛Physical Trigger的Exclusion掩码。
可以通过API获取参与Physical Trigger接触的物理对象。还可以获得这种对象扫描的形状。此外,您可以获得对象穿透的深度,接触点的坐标及其法线。
也可以看看#
- PhysicalTrigger类,用于通过API管理Physical Trigger节点
位于data/samples/physicals文件夹中的一组样本:
- trigger_00
- trigger_01
- trigger_02
- 来自的片段演示Physical Trigger的物理视频教程
- 视频教程: 如何使用物理触发器捕获物理对象
添加物理触发器#
通过UnigineEditor将Physical Trigger添加到场景中:
- 跑步UnigineEditor的项目。
-
在菜单栏上,单击Create -> Logic -> Physical Trigger。
-
单击世界上的某个地方以放置Physical Trigger。
新的Physical Trigger节点将被添加到UnigineEditor,您将能够通过Parameters窗口对其进行编辑。默认情况下,将创建半径为1的球体触发器。
编辑物理触发器#
在Physical Trigger部分(Parameters窗口→Node选项卡)中,可以调整物理触发器的以下参数:
Edit Size |
切换Physical Trigger节点的编辑模式。启用后,节点的大小或半径(取决于其大小)类型)可以更改:每侧/轴都用彩色的矩形/圆形突出显示。要更改大小/半径,请拖动相应的矩形/圆形。 球形物理触发器的编辑
|
---|---|
Physical Mask | Physical Trigger的Physical掩码必须比赛物理对象的Physical掩码。否则,当对象进入或离开对象时,Physical Trigger不会触发回调。 |
Collision Mask | |
Type | Physical Trigger的类型:sphere, capsule, cylinder或box。 |
Size |
Physical Trigger的大小,即:
|
事件处理#
要添加回车或离开回调,请编写一个回调函数,该函数将Body作为其第一个参数。然后使用getEventEnter()或getEventLeave()方法指定要调用的函数。
// subscribe to Enter event when a body enters the physical trigger with your handler
physicalTrigger->getEventEnter().connect(enter_event_handler);
// subscribe to Leave event when a body leaves the physical trigger with your handler
physicalTrigger->getEventLeave().connect(leave_event_handler);
// subscribe to Enter event when a body enters the physical trigger with your handler
physicalTrigger.EventEnter.Connect(enter_event_handler);
// subscribe to Leave event when a body leaves the physical trigger with your handler
physicalTrigger.EventLeave.Connect(leave_event_handler);