using EZXR.Glass.Core;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace EZXR.Glass.Inputs
{
///
/// 手部碰撞
///
public class HandCollision : MonoBehaviour
{
Dictionary rigidbodyForCollision = new Dictionary();
///
/// 是否启用手部物理碰撞
///
public bool enablePhysicsInteraction;
GameObject prefab_KeyPointForCollision;
HandInfo handInfo;
private void Awake()
{
Init();
}
void Init()
{
handInfo = GetComponent();
prefab_KeyPointForCollision = ResourcesManager.Load("KeyPoint/KeyPointForCollision");
}
void LateUpdate()
{
if (enablePhysicsInteraction)
{
if (handInfo.Exist)
{
if (rigidbodyForCollision != null)
{
foreach (HandJointType key in rigidbodyForCollision.Keys)
{
int id = (int)key;
//更新KeyPoint的Pose
rigidbodyForCollision[id].MovePosition(handInfo.GetJointData(key).position);
rigidbodyForCollision[id].MoveRotation(handInfo.GetJointData(key).rotation);
}
}
}
}
}
///
/// 启用/禁用手部物理碰撞
///
public void SetPhysicsInteraction(bool value)
{
if (handInfo == null)
{
Init();
}
enablePhysicsInteraction = value;
HandJointType[] handJointTypes = new HandJointType[7] { HandJointType.Thumb_3, HandJointType.Index_4, HandJointType.Middle_4, HandJointType.Ring_4, HandJointType.Pinky_4, HandJointType.Palm, HandJointType.Wrist_Middle };
if (enablePhysicsInteraction)
{
if (rigidbodyForCollision.Count == 0)
{
foreach (HandJointType handJointType in handJointTypes)
{
Rigidbody rigidbodyForCollision = Instantiate(prefab_KeyPointForCollision, handInfo.root).GetComponent();
rigidbodyForCollision.name = "Physics_" + handInfo.handType + "_" + handJointType.ToString();
this.rigidbodyForCollision.Add((int)handJointType, rigidbodyForCollision);
}
}
}
else
{
foreach (KeyValuePair item in rigidbodyForCollision)
{
Destroy(item.Value.gameObject);
}
rigidbodyForCollision.Clear();
}
}
}
}