HTC VIVE丨4. 使用InteractionSystem实现与物体的交互

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添加物理材质—金属材质

猜你喜欢

转载自blog.csdn.net/weixin_38239050/article/details/81260151
今日推荐