实现效果如图,差不多就是VR中常用到的交互按钮
一、变量
TrackingLocation:向量类型,记录触碰组件重叠时的位置,触碰组件一般是VrPawn里面手柄对应的Mesh或者碰撞体。
RequireButtonDistance:浮点类型,用于设置按钮达到按下状态需要的距离,同时也作为限制按钮触发行程大小的属性。
CurrentButtonDistance :计算触控组件和按钮组件的重叠距离 :
OriginalButtonLocation :初始化的时候记录按钮的原始位置(回弹位置)
TemporaryLocation :用于记录回弹前按钮的位置,用于回弹功能中通过设置相对位置变换将按钮从当前位置插值到相对位置的原点
二、函数和方法
1.BeginPlay
初始化时记录按钮组件相对于其父组件或拥有者的位置。它描述了该组件在父组件坐标系中的位置
2.TIck
(感觉性能方面可以优化一下做成事件响应不使用Tick)
①Tick中通过计算触碰组件在最开始触碰按钮时的位置和通过Tick中不断获取的位置差值来计算重叠距离,并且使用RequireButtonDistance来限制获取的按钮的行程上限
②通过OriginalButtonLocation存储的初始位置当前重叠位置不断更新相对位置来实现按钮下压
③当当前下压距离大于等于按钮行程上限后判定按钮触发,DoOnce后面是按钮触发后的逻辑
3.BeginOverlap&EndOverlap
BeginOverlap:使按钮在同一时间内只响应一个触碰组件,当触碰组件开始和按钮重叠的时候存储引用并记录坐标,并且中断回弹事件
EndOverlap:当触碰组件结束与按钮重叠的时候将引用置空,并开始调用回弹事件
4.ResetButton
调用之前先判断是启用还是中断,启用的话就记录回弹事件发生时按钮的位置,将其用于回弹功能中通过设置相对位置变换将按钮从当前位置插值到相对位置的原点