触发框图形是让实体等游戏对象实现沟通的 Vision 内置系统的一部分。 触发框的设计是为了在某个预定义对象进入其边界时发送一个事件,例如主镜头进入触发框体积,这一事件可被链接到触发框的任何实体接收。
例如,您可以使用触发框作为门的自动激活装置,当玩家走向门,触发框因玩家镜头进入边界而激活,将事件信号发送到相连的门实体。
使用 API 的对象组件系统,可用代码定义触发器,并作为组件附加于对象。 因此,一个对象可附带不限数量的用户定义触发器源和触发器目标。
下图显示了一种可行的链接设置:
因为触发事件与具体项目密切相关,所以标准图形中只有少数写死在源代码中的触发器。 其中包括:
-
暂停 / 恢复粒子特效
-
开启 / 关闭动态光照
-
暂停 / 恢复声音回放
-- this method is called when the object is triggered function OnTrigger(self, sourceName, targetName) self:IncOrientation(90, 0, 0) Debug:PrintLine("Trigger Source: " .. sourceName.. ", Target: "..targetName) end
可以将 Lua 脚本分配给触发框图形本身,使其响应自身的某种触发事件。 以下是 4 种 Lua 函数原型:
-
函数 OnCameraEnter(self)
-
函数 OnCameraLeave(self)
-
函数 OnObjectEnter(self,entity)
-
函数 OnObjectLeave(self,entity)
-
Trigger Shape(触发图形): 可选择将您的触发体设为框体或球体。
-
Size(大小): 包围体内部体积大小的精确值。
ObserverFlags(观察者标签): 定义哪个对象进入触发框后会触发事件,可用选项有:
-
Main Camer(主镜头)
-
Observed Entities(被观察实体)
-
All Entities(所有实体)
镜头进 / 出功能可在 FPS 式应用程序中用作简单的游戏事件。 或者,触发框图形也可在其他实体进出时触发(使用实体边界框进行重叠测试)。
为了优化性能,有两种不同的实体观察模式: ObservedEntities(被观察实体)和 AllEntities(所有实体)。 在被观察实体模式下,只有在全局观察者列表中注册的实体会接受触发事件判定。 在所有实体模式下,触发框会判定上一帧后移动过位置的所有实体。 与仅判定观察者列表上的实体相比,这种模式可能会对性能造成大得多的负担。
MyEntityClass::MyEntityClass() { TriggerBoxEntity_cl::AddObservedEntity(this); // call static function to add to global list } MyEntityClass::~MyEntityClass() { TriggerBoxEntity_cl::RemoveObservedEntity(this); // call static function to remove from global list }
-
DestroyOnTrigger(触发时销毁): 如启用,该触发器在触发后自我销毁。
与触发框图形建立连接后,链接属性会随已连接输出路由一同生成。 在以下属性图片中,触发器和一个门类实体连接:
为帮助您对关卡进行设计,vForge 提供若干调试选项,可让您开启 / 关闭触发体的可视性,以便您将触发器摆放到准确的位置。
Havok™ 物理插件提供 Havok 触发体组件,可用来创建物理体积的触发器图形,其形状没有限制。 更多信息请访问以下主题:
可以将 Lua 脚本分配给自定义体对象图形,该图形附带 Havok™ 触发体组件。 以这种方式,该图形可响应一种附带的 Havok™ 触发体组件支持的触发事件。
以下是 4 种 Lua 函数原型:
-
函数 OnObjectEnter(self,entity)
-
函数 OnObjectLeave(self,entity)
-
函数 OnCharacterEnter(self,entity)
-
函数 OnCharacterLeave(self,entity)
参数 self 是自定义体对象,即 Havok™ 触发器组件所附对象。 参数 entity 是实体,该实体附带刚体(在使用 OnObjectEnter/ OnObjectLeave 的情况下)或角色控制器(在使用 OnCharacterEnter/ OnCharacterLeave 的情况下),由后者负责触发。
转自:projectanarchy中文社区 http://www.anarchy.cn/portal.php?mod=view&aid=56