概述
这个脚本可以绑定在任何需要交互的游戏对象上。
直接把该脚本绑定在游戏对象上,手柄就可以与它进行简单的交互,如触碰,抓取,使用等。但是推荐为不同类型和功用的物体写单独的类,继承该类,个性化添加功能。
Inspector可见参数
触碰交互
· Highlight On Touch: 如果勾选,那么物体只有在手柄碰到它的时候才高亮。
· Touch Highlight Color: 物体被碰到高亮时的颜色. 这个颜色会覆盖任何其他的颜色设置 (例如VRTK_InteractTouch 脚本)。
· Rumble On Touch: 当手柄碰到物体时触发触觉反馈, x表示持续时间, y表示脉冲强度。 (在编辑器里可以修改其值)
· Allowed Touch Controllers: 决定哪个手柄可以触碰物体.可用选项有:
· Both 两个手柄都可以
· Left_Only 只有左边手柄可以
· Right_Only 只有右边手柄可以
· Hide Controller On Touch: 是否覆盖手柄相关设置 (触碰物体时隐藏手柄):
· Default 使用手柄的设置
· Override Hide 无论手柄设置为何,隐藏
· Override Dont Hide 无论手柄设置为何,不隐藏
抓取交互
· Is Grabbable: 物体是否可被抓取。
· Is Droppable: 使用grab按钮是否可以把已被抓取的物体放下。如果未勾选此项那么一旦物体被抓取就不能被放下。但是当很大的力施加在连接处的时候,连接断裂,物体也会放下。为了避免这种情况最好使用child Of Controller方式。
· Is Swappable: 物体是否可以在两个手柄之间传递。如果未勾选此项,那么物体被另一个手柄抓取之前必须先从当前手柄上放下。
· Hold Button To Grab: 如果此项被勾选,那么要一直按着按钮才能保持物体抓取,松开按钮物体会掉落。如果未勾选此项那么按一下抓取按钮物体会被抓取且在按第二下之前它不会掉落。
· Rumble On Grab: 当手柄抓取物体时震动反馈,x表示持续时间, y表示脉冲强度。 (在编辑器里可以修改其值)。
· Allowed Grab Controllers: 决定哪个手柄可以抓取物体.可用选项有:
· Both 两个手柄都可以
· Left_Only 只有左边手柄可以
· Right_Only 只有右边手柄可以
· Precision_Snap: 如果此项勾选那么当手柄抓取物体的时候, 它会在手柄触碰点精确地抓取物体。物体被抓取后与手柄触碰物体时两者的相对位置保持一致,不勾选时,物体的中心会与指定连接点重合

· Right Snap Handle: 一个空物体的Transform,它必须是被抓取物体的子对象,当右侧手柄抓取该物体时,就会抓取这个Transform。如果没有提供Right Snap Handle但是提供了Left Snap Handle,那么就代而使用Left Snap Handle。如果没有提供任何Snap Handle那么该物体被抓取的位置就是它的中心点。
· Left Snap Handle: 一个空物体的Transform,它必须是被抓取物体的子对象,当右侧手柄抓取该物体时,就会抓取这个Transform。如果没有提供Left Snap Handle但是提供了Right Snap Handle,那么就代而使用Right Snap Handle。如果没有提供任何Snap Handle那么该物体被抓取的位置就是它的中心点。
· Hide Controller On Grab: 是否覆盖手柄相关设置 (抓取物体时隐藏手柄):
· Default 使用手柄的设置
· Override Hide 无论手柄设置为何,隐藏
· Override Dont Hide 无论手柄设置为何,不隐藏
抓取方式
· Grab Attach Type: 当物体被抓取的时候,以什么样的形式附着在手柄上面
· Fixed Joint: 物体和手柄以固定关节连接,抓取时为物体添加FixedJoint组件,连接至手柄上的刚体组件
· Spring Joint: 物体和手柄以弹簧关节连接,抓取时为物体添加SpringJoint组件,连接至手柄上的刚体组件,让它们像被弹簧连接着一样联动
· Track Object: 物体不会吸附在手柄上, 但是它会随着手柄的方向移动, 铰链关节的物体可以使用这种
· Rotator Track: 跟随手柄的动作旋转. 例如手柄控制门的开关
· Child Of Controller 让该物体直接变成手柄的一个子对象
· Climbable 用来攀爬的静态物体,不随手柄运动
· Detach Threshold: 把物体和手柄分离时需要的力的大小。如果手柄意图给物体施加一个比这个值要大的力,那么物体与手柄之间的连接就会断开,这样物体便不再被抓取.如果物体是以Track Object方式被抓取,没有吸附在手柄上的话,那就把这个参数作为一个最大距离,来判断是否分离。
· Spring Joint Strength: 物体与手柄连接弹簧的弹力。数值越小弹簧越松,那么需要更大的力才能移动物体,数值越大弹簧越紧,一点点力就会让物体移动。
· Spring Joint Damper: 弹簧的阻尼,当弹簧激活时减少弹簧强度
· Throw Multiplier: 当物体被手柄释放时可以随着手柄的运动有一个初速度,实现抛出的效果,此参数为速度乘上一个值,控制抛出的初速度。
· On Grab Collision Delay: 当物体第一次被抓取时,给碰撞效果一个延时。在物体被手柄抓取的过程中取消它的碰撞,等到被抓取完成一段时间以后才恢复碰撞效果,以防抓取时发生不必要的碰撞。
使用交互
· Is Usable: 物体是否可以被使用
· Use Only If Grabbed: 如果此项勾选那么物体使用之前必须先被抓取
· Hold Button To Use: 如果勾选此项那么要一直按着使用按钮物体才能被持续使用.如果此项未勾选那么在按第二次按钮之前物体会持续使用
· Pointer Activates Use Action: 如果勾选此项,那么手柄发出指示射线击中该物体时,也可以触发物体的使用逻辑,且此时World Pointer 中会判断,不执行传送的逻辑
· Rumble On Use: 当手柄使用物体时触发触觉反馈, x表示持续时间, y表示脉冲强度. (在编辑器里可以修改其值).
· Allowed Use Controllers: 决定哪个手柄可以使用物体.可用选项有:
· Both 两个手柄都可以.
· Left_Only 只有左边手柄可以.
· Right_Only 只有右边手柄可以.
· Hide Controller On Use: 是否覆盖手柄相关设置 (使用物体时隐藏手柄):
· Default 使用手柄的设置.
· Override Hide 无论手柄设置为何,隐藏.
· Override Dont Hide 无论手柄设置为何,不隐藏.
事件类
· InteractableObjectTouched - 其他物体(例如手柄)触碰当前物体时发送事件.
· InteractableObjectUntouched - 其他物体(例如手柄)停止触碰当前物体时发送事件.
· InteractableObjectGrabbed - 其他物体(例如手柄)抓取当前物体时发送事件.
· InteractableObjectUngrabbed - 其他物体(例如手柄)停止抓取当前物体时发送事件.
· InteractableObjectUsed - 其他物体(例如手柄)使用当前物体时发送事件.
· InteractableObjectUnused - 其他物体(例如手柄)停止使用当前物体时发送事件.
事件参数
· GameObject interactingObject - 发起交互行为的游戏对象(例如手柄)
内置参数
· rb: 物体上的刚体组件
· touchingObject: 正在触碰物体的游戏对象(例如手柄)
· grabbingObject: 正在抓取物体的游戏对象(例如手柄)
· usingObject: 正在使用物体的游戏对象(例如手柄)
· usingState: 手柄对物体按下使用按钮的次数,如果物体不勾选holdButtonToUse,一个使用周期内第二次按下使用按钮,即usingState>=2,物体才会停止使用
· originalObjectColours: 物体默认的材质颜色
· grabbedSnapHandle: 被当前手柄抓取的部位,根据自己的设置和手柄的处理动态生成
· trackPoint: 追踪连接的连接点,当物体勾选了Precision_Snap,并且以追踪连接方式被抓取,那么就会在手柄对象下生成一个连接点,位置和旋转与物体一致

· customTrackPoint: 如果trackPoint就是手柄默认的那个连接点子对象,就为false,否则为true
· originalControllerAttachPoint: 物体的一个子对象,记录手柄在抓取物体前与物体的接触点

· previousParent: 物体初始的父对象
· previousKinematicState: 物体初始的Kinematic状态
· previousIsGrabbable: 物体初始的可抓取属性
· forcedDropped: 默认为false,在强制停止物体的方法执行后会置其为true,如果强制停止物体交互时脚本被禁用,那么下次脚本启用的时候看见这个参数为true就知道应该加载脚本被禁用之前的状态
公有方法
CheckHideMode/2
1publicboolCheckHideMode(booldefaultMode, ControllerHideMode overrideMode)
· Parameters
· bool defaultMode - 手柄上的默认设置(true=隐藏, false=不隐藏).
· ControllerHideMode overrideMode - 物体的设置,将覆盖手柄默认设置.
· Default 使用手柄的设置.(returns overrideMode).
· OverrideHide 无论手柄设置为何,隐藏.(even if defaultModeis true).
· OverrideDontHide 无论手柄设置为何,不隐藏.(even if defaultModeisfalse).
· Returns
· bool - 返回true,如果综合defaultMode和overrideMode考虑后依旧要隐藏手柄 .
CheckHideMode方法是一个供其他脚本(例如InteractTouch InteractGrab InteractUse)使用的简单的方法,它通过同时考虑手柄默认设置和可交互物体的设置(物体的设置优先级更高),用来得到最终决定手柄是否隐藏
IsTouched/0
网友评论