目标点标记(VRTK_DestinationMarker)
发表于2016-11-05
概述
这个抽象类提供在游戏世界里发送目的标记事件的功能. 它可以用于实现一些特定功能的地点标记需求,例如传送功能.
它的派生子类 VRTK_WorldPointer 用于处理指示射线的事件,当指示射线接触到游戏中的区域的时候发送事件.
Inspector可见参数
Enable Teleport: 如果勾选此项那么事件参数中的teleport会被置为true,传送相关脚本就能知道是否该移动到新的位置.
事件类
DestinationMarkerEnter - 当与其他gameobject发生collision时发送事件.
DestinationMarkerExit - 当与其他gameobject结束collision时发送事件.
DestinationMarkerSet - 当destination marker是active时发送事件,确定最新的目标点 (可用于选择和传送).
事件装载参数
1 2 3 4 5 6 7 8 | public struct DestinationMarkerEventArgs { public float distance; public Transform target; public Vector3 destinationPosition; public bool enableTeleport; public uint controllerIndex; } |
· float distance - 原点和碰撞点之间的距离.
· Transform target - 指示射线碰撞到游戏对象的的Transform.
· Vector3 destinationPosition - 目标点的世界坐标.
· bool enableTeleport - 是否应该触发传送.
· uint controllerIndex 发送指示射线的手柄索引.
可以看出来这个事件,需要记录指示射线碰到别的物体时,碰撞点的位置,与手柄之间的距离等
方法
SetInvalidTarget/1
1 | > public virtual void SetInvalidTarget( string name) |
· Parameters
· string name - 无效target的tag或class的name.
· Returns
· none
SetInvalidTarget方法用于将包含匹配name的给定tag或class设为invalid destination targets.
SetNavMeshCheckDistance/1
1 | > public virtual void SetNavMeshCheckDistance( float distance) |
· Parameters
· float distance - nav mesh采样的最大距离.
· Returns
· none
SetNavMeshCheckDistance方法返回从标记点开始进行nav mesh采样的最大距离
SetHeadsetPositionCompensation/1
1 | > public virtual void SetHeadsetPositionCompensation( bool state) |
· Parameters
· bool state - 当设置destination marker时是否要考虑头显在play area中的位移改变.
· Returns
· none
SetHeadsetPositionCompensation方法决定当设置destination marker时,是否要将头显关于play area中心的偏移量计入考虑. 如果为 true 那么位置的偏移会被考虑影响.
发送事件代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | //发送事件,实际调用 public virtual void OnDestinationMarkerEnter(DestinationMarkerEventArgs e) { if (DestinationMarkerEnter != null ) { DestinationMarkerEnter( this , e); } } //发送事件,实际调用 public virtual void OnDestinationMarkerExit(DestinationMarkerEventArgs e) { if (DestinationMarkerExit != null ) { DestinationMarkerExit( this , e); } } //发送事件,实际调用 public virtual void OnDestinationMarkerSet(DestinationMarkerEventArgs e) { if (DestinationMarkerSet != null ) { DestinationMarkerSet( this , e); } } |
事件装载代码
1 2 3 4 5 6 7 8 9 10 | protected DestinationMarkerEventArgs SetDestinationMarkerEvent( float distance, Transform target, Vector3 position, uint controllerIndex) { DestinationMarkerEventArgs e; e.controllerIndex = controllerIndex; e.distance = distance; e.target = target; e.destinationPosition = position; e.enableTeleport = enableTeleport; return e; } |
这个类主要就是一些事件的声明和装载,所有继承它的子类都可以使用里面的事件机制,根据内容看来应该是一些与发送射线然后碰撞目标的逻辑。
腾讯GAD游戏程序交流群:484290331