VisionEngine 游戏对象中触发器介绍

引言

触发框图形是让实体等游戏对象实现沟通的 Vision 内置系统的一部分。 触发框的设计是为了在某个预定义对象进入其边界时发送一个事件,例如主镜头进入触发框体积,这一事件可被链接到触发框的任何实体接收。

例如,您可以使用触发框作为门的自动激活装置,当玩家走向门,触发框因玩家镜头进入边界而激活,将事件信号发送到相连的门实体。

使用 API 的对象组件系统,可用代码定义触发器,并作为组件附加于对象。 因此,一个对象可附带不限数量的用户定义触发器源触发器目标

下图显示了一种可行的链接设置:

 触发框图形

触发框图形位于对象图形组,从图形创建面板将触发框图形实例拖拽到场景中即可完成添加。

 链接触发器

每个触发框都有输出连接,连接至接收实体。 将触发框放到场景中后,您需要选择链接工具栏图标,使连接可见。

链接被启用后,触发框将显示其连接。

 触发事件

因为触发事件与具体项目密切相关,所以标准图形中只有少数写死在源代码中的触发器。 其中包括:

  • 暂停 / 恢复粒子特效
  • 开启 / 关闭动态光照
  • 暂停 / 恢复声音回放
 在 Lua 脚本中使用触发器
触发事件传送至与对象关联的 Lua 脚本。 脚本的  OnTrigger  函数随即请求传递资源和作为整数参数的目标组件 ID。 示例:
-- 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(所有实体)。 在被观察实体模式下,只有在全局观察者列表中注册的实体会接受触发事件判定。 在所有实体模式下,触发框会判定上一帧后移动过位置的所有实体。 与仅判定观察者列表上的实体相比,这种模式可能会对性能造成大得多的负担。

  技术说明: 被观察实体全局观察者列表包含要接受触发判定的实体,需使用 C++ 代码设置。 以下嗅探程序可添加到您自己的实体类中,为被观察实体模式添加全局注册实体:
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值