Hi5 2.0 VR手套代码解释

目录

Core(文件夹)

Glove(文件夹)

Hi5_Glove_Collider_Finger.cs

Hi5_Glove_Collider_Finger.Thumb.cs

Hi5_Glove_Collider_palm.cs

Hi5_Glove_Collider_Tail_Finger.cs

Hi5_Glove_Gesture_Recognition.cs

Hi5_Glove_Hand_Collider.cs

Hi5_Glove_Hand_Fly_Collider.cs

Hi5_Glove_Interaction_Collider.cs

Hi5_Glove_Interaction_Finger.cs

Hi5_Glove_Interaction_Hand.cs

Hi5_Glove_Property.cs

Hand(文件夹)

Hi5_Hand_Collider_Visible_Finger.cs

Hi5_Hand_Collider_Visible_Thumb_Finger.cs

Hi5_Hand_Nail_Collider.cs

Hi5_Hand_Nail_Controller.cs

Hi5_Hand_Palm.cs

Hi5_Hand_Palm_Move.cs

Hi5_Hand_Visible_Finger.cs

Hi5_Hand_Visible_Hand.cs

Hi5_Hand_Visible_Thumb_Finger.cs

Message(文件夹)

Hi5_Glove_Interface_Message.cs

Hi5_Interface_Message.cs

Object(文件夹)

Item(文件夹)

Hi5_Button_Item.cs

Hi5_Glove_Interaction_Item.cs

Hi5_Glove_Interaction_Item_Base.cs

Hi5_Glove_Interaction_Item_Trigger.cs

Hi5_Glove_Interaction_Simple_Item.cs

ItemCollider(文件夹)

Hi5_Interaction_Item_Collider.cs

Hi5_Interaction_Item_Collider_Base.cs

Hi5_Interaction_Item_Simple_Collider.cs

Hi5_Object_Lift_Collider.cs

Manager(文件夹)

Hi5_Interaction_Object_Base_Manager.cs

Hi5_Interaction_Object_Manager.cs

Hi5_Interaction_Simple_Object_Manager.cs

Hi5_Button_Reset.cs

Hi5_Object_Move.cs

Hi5_Object_Property.cs

Hi5_Plane.cs

Hi5_Simple_Object_Property.cs

state(文件夹)

GloveState(文件夹)

Hi5_Glove_Decision.cs

Hi5_Glove_Interaction_State.cs

Hi5_Glove_State_Base.cs

Hi5_Glove_State_Clap.cs

Hi5_Glove_State_Lift.cs

Hi5_Glove_State_Pinch.cs

Hi5_Glove_State_Pinch2.cs

Hi5_Glove_State_Release.cs

ObjectState(文件夹)

Hi5_Object_Judgement.cs

Hi5_Object_State_Base.cs

Hi5_Object_State_Clap.cs

Hi5_Object_State_Fly_Lift.cs

Hi5_Object_State_Manager.cs

Hi5_Object_State_Move.cs

Hi5_Object_State_Pinch.cs

Hi5_Object_State_Poke.cs

Hi5_Object_State_Static.cs

UI(文件夹)

Hi5UIBase.cs

Hi5UIButton.cs

RayCollider.cs

RayLine.cs

RayPoint.cs

Utilities(文件夹)

Hi5_Calculate_Utilities.cs

Hi5_Interaction_Const.cs

Hi5_Layer_Set.cs

Hi5_Record.cs

LaserPointer.cs

SingletonBehaviour.cs

Interface(文件夹)

Hi5_Glove_Interaction_Interface_Date.cs

Hi5_Interface_Button.cs

Hi5_Interface_Hand.cs

Hi5_Interface_Object.cs

Hi5_Interface_Object_Base.cs

Hi5_Interface_Object_Manager.cs

Hi5_Interface_Simple_Object.cs

Hi5_Reset_Button.cs

Hi5InteractionManager.cs

Hi5InteractionSceneManager.cs


Core(文件夹)

Glove(文件夹)

Hi5_Glove_Collider_Finger.cs

Hi5_Glove_Collider_Finger.Thumb.cs

Hi5_Glove_Collider_palm.cs

Hi5_Glove_Collider_Tail_Finger.cs

Hi5_Glove_Gesture_Recognition.cs

4个基本手势: (由Hi5_Glove_Gesture_Recognition脚本在Update方法中进行实时判断)
OKay,平掌(Flat Palm),拳头(Fist)、指(Pointing(index finger))

在Update中进行实时手势状态判断。

namespace Hi5_Interaction_Core
{
	手势状态枚举
	public enum Hi5_Glove_Gesture_Recognition_State
	{
		ENone = 0,
		EOk,
		EFist, //握拳
		EIndexPoint, //用食指指的动作(中指、无名指、小指弯曲)。
		EHandPlane //手掌摊平
	}
}

Hi5_Glove_Hand_Collider.cs

Hi5_Glove_Hand_Fly_Collider.cs

Hi5_Glove_Interaction_Collider.cs

Hi5_Glove_Interaction_Finger.cs

Hi5_Glove_Interaction_Finger脚本
单个手指的手势判断。
IsFingerFist()//判断握拳
IsFingerPlane()//判断手掌平摊
IsLift()//判断托举
IsClap()//判断拍打
IsFlyRunPinch()//判断轻握

//判断手指弯曲度,这是手指手势判断的关键原理。
float GetAngle(Transform leftTransform, Transform midTransform, Transform rightTransform)
{
	Vector3 left = leftTransform.position;
	Vector3 middle = midTransform.position;
	Vector3 right = rightTransform.position; // finger tip
	Vector3 vLeft = left - middle;
	Vector3 vRight = right - middle;
	float angle = Vector3.Angle(vLeft, vRight);
	return angle;
}

Hi5_Glove_Interaction_Hand.cs

Hi5_Glove_Interaction_Hand
管理单只手的各手指及关节。

Hi5_Glove_Property.cs

Hand(文件夹)

Hi5_Hand_Collider_Visible_Finger.cs

Hi5_Hand_Collider_Visible_Thumb_Finger.cs

Hi5_Hand_Nail_Collider.cs

Hi5_Hand_Nail_Controller.cs

Hi5_Hand_Palm.cs

Hi5_Hand_Palm_Move.cs

Hi5_Hand_Visible_Finger.cs

Hi5_Hand_Visible_Hand.cs

Hi5_Hand_Visible_Thumb_Finger.cs

Message(文件夹)

Hi5_Glove_Interface_Message.cs

Hi5_Interface_Message.cs

Hi5_MessageKey
消息类型常量类

namespace Hi5_Interaction_Core
{
    public class Hi5_MessageKey
    {
        public static readonly string messagePinchObject = "messagePinchObject";
        public static readonly string messageUnPinchObject = "messageUnPinchObject";
        public static readonly string messageGetObjectById = "messageGetObjectById";
        public static readonly string messageObjectReset = "messageObjectReset";
        public static readonly string messagePinchObject2 = "messagePinchObject2";
        public static readonly string messageUnPinchObject2 = "messageUnPinchObject2";
        public static readonly string messageFlyPinchObject = "messageFlyPinchObject";
        public static readonly string messageLiftObject = "messageLiftObject";
        public static readonly string messagePinchOtherHandRelease = "messagePinchOtherHandRelease";
        public static readonly string messageClap = "messageClap";
        public static readonly string messageReleaseClap = "messageReleaseClap";
        public static readonly string messageReleaseLiftObject = "messageReleaseLiftObject";
        //手套与物体之间事件同步
        public static readonly string messageObjectStatic = "messageObjectStatic";
        public static readonly string messageObjectFreeMove = "messageObjectFreeMove";
        public static readonly string messageObjectchangePlaneMove = "messageObjectchangePlaneMove";
        public static readonly string messageObjectchangeClap = "messageObjectchangeClap";
        public static readonly string messageObjectchangelift = "messageObjectchangelift";
        public static readonly string messageObjectchangePoke = "messageObjectchangePoke";
        public static readonly string messageObjectchangestaticTwo = "messageObjectchangestaticTwo";
        public static readonly string messageObjectchangePinch = "messageObjectchangePinch";
        public static readonly string messageObjectchangeThrowMove = "messageObjectchangeThrowMove";
        public static readonly string messageObjectchangeRelease = "messageObjectchangeRelease";
        public static readonly string messageObjectRemoveTrigger = "messageObjectRemoveTrigger";
        public static readonly string messageObjectRemoveOtherCollision = "messageObjectRemoveOtherCollision";
        public static readonly string messageObjectRemoveCollision = "messageObjectRemoveCollision";
    }

Object(文件夹)

Item(文件夹)

Hi5_Button_Item.cs
Hi5_Glove_Interaction_Item.cs

 

  • EStatic: 物体静止
  • EPinch: 物体被抓在手上
  • EMove: 物体移动
  • EClap: 物体被手拍打
  • EFlyLift: 物体被举起
  • EPoke: 物体被戳(食指)

 注意:作为按钮的几何体一般同时监听EClap和EPoke两个事件。 

  • ENone: 没移动
  • EThrowMove: 在空中掉落
  • EPlaneMove: 在平面上移动(或滚动)
  • EFree: X、Y、Z轴都不受旋转约束
Hi5_Glove_Interaction_Item_Base.cs
Hi5_Glove_Interaction_Item_Trigger.cs

该代码段是一个命名空间 Hi5_Interaction_Core 中的脚本 Hi5_Glove_Interaction_Item_Trigger。这个脚本用于处理与物体交互的触发器。主要功能包括:

  • 在物体进入触发器时,根据不同的层级来判断是否与平面接触或与其他物体接触。
  • 在触发器内持续停留时,更新触发器的状态,包括与平面的接触状态和与其他物体的接触状态。
  • 在离开触发器时,更新触发器的状态,标记之前是否与平面接触或与其他物体接触。
  • Update() 方法中,检查物体与其他物体的接触情况是否发生变化,并进行相应的处理。
Hi5_Glove_Interaction_Simple_Item.cs

ItemCollider(文件夹)

Hi5_Interaction_Item_Collider.cs

Hi5_Interaction_Item_Collider
处理碰撞
//当处于以下设置的物体与手指发生碰撞时会触发E_Object_State.EPoke事件(物体为按钮的情况,相当于OnMouseDown事件)
itemObject.mObjectType=EObject_Type.EButton
itemObject.state=E_Object_State.EStatic

主要有OnCollisionEnter、OnCollisionStay、OnCollisionExit()、OnTriggerEnter、OnTriggerExit函数

Hi5_Interaction_Item_Collider_Base.cs
Hi5_Interaction_Item_Simple_Collider.cs
Hi5_Object_Lift_Collider.cs

Manager(文件夹)

Hi5_Interaction_Object_Base_Manager.cs
Hi5_Interaction_Object_Manager.cs
Hi5_Interaction_Simple_Object_Manager.cs

Hi5_Button_Reset.cs

Hi5_Object_Move.cs

Hi5_Object_Property.cs

附加属性设置

Hi5_Plane.cs

Hi5_Simple_Object_Property.cs

state(文件夹)

GloveState(文件夹)

Hi5_Glove_Decision.cs
Hi5_Glove_Interaction_State.cs
Hi5_Glove_State_Base.cs
Hi5_Glove_State_Clap.cs
Hi5_Glove_State_Lift.cs
Hi5_Glove_State_Pinch.cs
Hi5_Glove_State_Pinch2.cs
Hi5_Glove_State_Release.cs

ObjectState(文件夹)

Hi5_Object_Judgement.cs
Hi5_Object_State_Base.cs
Hi5_Object_State_Clap.cs
Hi5_Object_State_Fly_Lift.cs
Hi5_Object_State_Manager.cs
Hi5_Object_State_Move.cs
Hi5_Object_State_Pinch.cs
Hi5_Object_State_Poke.cs
Hi5_Object_State_Static.cs

UI(文件夹)

Hi5UIBase.cs

Hi5UIButton.cs

RayCollider.cs

RayLine.cs

RayPoint.cs

Utilities(文件夹)

Hi5_Calculate_Utilities.cs

Hi5_Interaction_Const.cs

Hi5_Layer_Set.cs

Hi5_Record.cs

LaserPointer.cs

SingletonBehaviour.cs

Interface(文件夹)

Hi5_Glove_Interaction_Interface_Date.cs

Hi5_Interface_Button.cs

按钮基类,可以继承它,并重写MessageFun()方法。在MessageFun()方法中可监听不同的触发事件,然后调用ObjectItem.ChangeColor(Color.red);来改变几何体颜色。参见Hi5_Reset_Button、EObject_Type

Hi5_Interface_Hand.cs

Hi5_Interface_Object.cs

上述代码的作用是实现对象交互功能。具体来说,它包含以下功能和作用:

  1. 在对象激活时,注册消息处理方法,用于监听对象事件消息。
  2. 在每一帧更新时,检查对象的状态,并对处于静态状态的对象进行操作,例如改变颜色等。
  3. 在对象禁用时,取消注册消息处理方法。
  4. 提供一个消息处理方法,用于接收和处理对象事件消息。根据事件类型进行相应的处理,例如拍击事件、触碰事件、捏取事件等。

总的来说,该代码实现了与Hi5交互引擎的集成,并为对象交互提供了事件处理和状态管理的功能。它可以根据接收到的消息,对对象进行相应的操作和响应,以实现对象的交互行为。

Hi5_Interface_Object_Base.cs

Hi5_Interface_Object_Manager.cs

Hi5_Interface_Simple_Object.cs

Hi5_Reset_Button.cs

Hi5InteractionManager.cs

Hi5InteractionSceneManager.cs

猜你喜欢

转载自blog.csdn.net/weixin_43042683/article/details/131419332