目录
Hi5_Glove_Collider_Finger.Thumb.cs
Hi5_Glove_Collider_Tail_Finger.cs
Hi5_Glove_Gesture_Recognition.cs
Hi5_Glove_Hand_Fly_Collider.cs
Hi5_Glove_Interaction_Collider.cs
Hi5_Glove_Interaction_Finger.cs
Hi5_Hand_Collider_Visible_Finger.cs
Hi5_Hand_Collider_Visible_Thumb_Finger.cs
Hi5_Hand_Visible_Thumb_Finger.cs
Hi5_Glove_Interface_Message.cs
Hi5_Glove_Interaction_Item_Base.cs
Hi5_Glove_Interaction_Item_Trigger.cs
Hi5_Glove_Interaction_Simple_Item.cs
Hi5_Interaction_Item_Collider.cs
Hi5_Interaction_Item_Collider_Base.cs
Hi5_Interaction_Item_Simple_Collider.cs
Hi5_Interaction_Object_Base_Manager.cs
Hi5_Interaction_Object_Manager.cs
Hi5_Interaction_Simple_Object_Manager.cs
Hi5_Glove_Interaction_State.cs
Hi5_Glove_Interaction_Interface_Date.cs
Hi5_Interface_Object_Manager.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
上述代码的作用是实现对象交互功能。具体来说,它包含以下功能和作用:
- 在对象激活时,注册消息处理方法,用于监听对象事件消息。
- 在每一帧更新时,检查对象的状态,并对处于静态状态的对象进行操作,例如改变颜色等。
- 在对象禁用时,取消注册消息处理方法。
- 提供一个消息处理方法,用于接收和处理对象事件消息。根据事件类型进行相应的处理,例如拍击事件、触碰事件、捏取事件等。
总的来说,该代码实现了与Hi5交互引擎的集成,并为对象交互提供了事件处理和状态管理的功能。它可以根据接收到的消息,对对象进行相应的操作和响应,以实现对象的交互行为。