InteractionSystem延续Unity基于组件思想,只要将相关功能的Script放到物体上,或Add Component,修改其属性即可
摘要
1、交互的基础:Interactable组件
2、手柄高亮的实现:ControllerHoverHighlight组件
3、物体如何相应Hand交互事件:InteractableHoverEvents组件和InteractableButtonEvents组件
4、抓取物体:Throwable组件
5、[RequireComponent]标签的使用
6、如何为物体添加Physics Material
1、Interactable组件
所有交互最基础的组件(必添加)。添加后相当于告诉系统,该物体可以与手柄进行交互
2、手柄高亮、震动效果实现
Hand下两个物体的ControllerHoverHighlight组件,包含高亮效果的Material,更改其Material便可改变手柄高亮效果
FireHapticsOnHightlight:勾选后,当手柄接触物体时,会触发震动
控制震动时间函数:
...GetComponent<Hand>().controller.TriggerHapticPulse(500);
3、物体如何相应Hand交互事件
上段说明了手柄如何实现接触到物体的效果,这段讲的则是当物体被手柄碰触后,通过哪些脚本,实现对物体本身的控制。
1). InteractableHoverEvents组件
On Hand Hover Begin:当手柄接触到物体时(事件触发,一帧);
On Hand Hover End:悬停结束时调用(类似OnTriggerExit,一帧)
On Attached To Hand:附加到手柄上时调用
On Detached From Hand:从手柄上分离时调用(一帧)
2). InteractableButtonEvents组件
下面介绍两种实现物体交互的方法:
1、静态添加
在检视面板像类似于UI Button一样添加触发事件
2、动态添加
using UnityEngine;
using Valve.VR.InteractionSystem;
public class InteractWithHandButton : MonoBehaviour {
void Start () {
InteractableButtonEvents ibe = GetComponent<InteractableButtonEvents>();
ibe.onTriggerDown.AddListener(triggerDownHandler);
}
void triggerDownHandler()
{
}
}
4、抓取物体
给要被拾取起来的物体添加Throwable脚本,即可完成该物体的拾取
Attachment Flags:抓取实现效果
public enum AttachmentFlags
{
//物体吸附于手柄某一点
SnapOnAttach = 1 << 0, // The object should snap to the position of the specified attachment point on the hand.
//Unity设定一只手可抓取多个物体,勾选此项意味着除了现在抓到的物体,之前抓到的其他物体都将会被释放
DetachOthers = 1 << 1, // Other objects attached to this hand will be detached.
//这个物体将会从其他控制器上脱离
DetachFromOtherHand = 1 << 2, // This object will be detached from the other hand.
//该物体将成为手的子物体
ParentToHand = 1 << 3, // The object will be parented to the hand.
};
Attachment Point:指定一个坐标(物体坐标等),让它跟我们抓取的物体坐标保持一致,让物体与它吸附
Catch Speed Threshold:按下Trigger后延迟一定时间,实现物体的吸附
Restore Original Parent:松开物体后,该物体是否跟父物体保持原有的层级关系。勾选则保持原有关系
Attach Ease In:抓取时是否有缓动,即物体慢慢吸附到指定物体上
Snap Attach Ease In Curve:缓动类型
Snap Attach Ease In Time:缓动时间
On Pick Up:拿起时事件
On Detach From Hand:被手柄释放实现的事件
5、[RequireComponent]标签
在代码中添加该标签代码,往物体上拖入该脚本时,同时也会添加上标签中的脚本
[RequireComponent( typeof( Interactable ) )]
6、如何为物体添加Physics Material
例如为box添加物理材质—金属材质