virtual protected void OnTriggerEnter(Collider other) { if (other.gameObject.layer == Hi5_Interaction_Const.PlaneLayer()) { planeTransform = other.gameObject.transform; IsTrigger = true; TouchPlaneY = transform.position.y; IsPreNoTouchPlane = false; //Debug.Log("Hi5_Glove_Interaction_Item_Trigger IsTigger true"); //if (!Hi5_Interaction_Const.TestFlyMoveUsedGravity) { if (itemObject != null) { itemObject.OnItemTriggerEnter(other); } } //Debug.Log("TouchPlaneY ="+TouchPlaneY); } if (other.gameObject.layer == Hi5_Interaction_Const.ObjectTriggerLayer()) { if (other.gameObject.GetComponent <Hi5_Glove_Interaction_Item_Trigger> () != null && other.gameObject.GetComponent <Hi5_Glove_Interaction_Item_Trigger> ().itemObject != null) { mTriggerObjectId = other.gameObject.GetComponent <Hi5_Glove_Interaction_Item_Trigger> ().itemObject.idObject; IsTriggerObject = true; IsPreNoTouchObject = false; //Debug.Log("IsTiggerObject true"); TouchObjectY = transform.position.y; //Debug.Log("TouchObjectY ="+TouchObjectY); } } }
override protected void OnTriggerEnter(Collider other) { base.OnTriggerEnter(other); if (mObjectType == EObject_Type.EButton || mObjectType == EObject_Type.ECommon) { if (other.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer() || other.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer()) { //Debug.Log ("item OnTriggerEnter Tail"); if (other.gameObject.GetComponent <Hi5_Glove_Collider_Finger>() != null && other.gameObject.GetComponent <Hi5_Glove_Collider_Finger>().mFinger != null && other.gameObject.GetComponent <Hi5_Glove_Collider_Finger>().mFinger.mHand != null) { if (mObjectType == EObject_Type.EButton) { if (state == E_Object_State.EStatic) { this.ChangeState(E_Object_State.EPoke); NotifyPokeEvent(other); } } else { if (state == E_Object_State.EStatic || state == E_Object_State.EFlyLift) { } } } //ChangeColor(Color.black); } } }
internal float Pich2RealseTailDistance(Hi5_Glove_Interaction_Item item, out bool ContactIsSelf) { float distance = Hi5_Interaction_Const.GetDistance(mChildNodes[4].transform, item, out ContactIsSelf); //Debug.DrawLine(mChildNodes[4].transform.position, item.transform.position, Color.red, 1); return(distance); }
override protected void OnCollisionStay(Collision collision) { base.OnCollisionStay(collision); if (itemObject.mObjectType == EObject_Type.ECommon) { if (/*collision.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer() || */collision.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer() /*|| collision.gameObject.layer == Hi5_Interaction_Const.PalmRigidbodyLayer()*/) { if (itemObject.mstatemanager == null) { return; } // if (collision.gameObject.GetComponent<Hi5_Hand_Collider_Visible_Finger>()) { //if (Hi5_Interaction_Const.TestChangeState) { if (itemObject.mstatemanager.State == E_Object_State.EStatic || (itemObject.mstatemanager.State == E_Object_State.EMove && itemObject.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EPlaneMove)) { if (/*collision.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer() ||*/ collision.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer()) { if (collision.gameObject.GetComponent <Hi5_Hand_Collider_Visible_Thumb_Finger>() == null) { return; } Hi5_Hand_Visible_Finger finger = collision.gameObject.GetComponent <Hi5_Hand_Collider_Visible_Thumb_Finger>().mFinger; if (finger && (finger is Hi5_Hand_Visible_Thumb_Finger)) { if (!(finger as Hi5_Hand_Visible_Thumb_Finger).IsMoveTowardHand()) { Hi5_Hand_Visible_Hand handTemp = collision.gameObject.GetComponent <Hi5_Hand_Collider_Visible_Finger> ().mHand; itemObject.ChangeState(E_Object_State.EMove); if (itemObject.mstatemanager != null) { itemObject.mstatemanager.SetPlaneMove(collision); } { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(itemObject.idObject, itemObject.mObjectType, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventObjectType.EMove); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } } } } else { } } } } } } }
override protected void OnTriggerEnter(Collider other) { base.OnTriggerEnter(other); if (Hi5_Interaction_Const.TestPinchOpenCollider) { if (other.gameObject.GetComponent <Hi5_Hand_Nail_Collider>() != null) { itemObject.ColliderNailNum++; if (itemObject.ColliderNailNum > 0) { if (other.gameObject.GetComponent <Hi5_Hand_Nail_Collider>().mHand != null) { other.gameObject.GetComponent <Hi5_Hand_Nail_Collider>().mHand.AddNailColliderCount(); } //if (itemObject.state == E_Object_State.EStatic // || (itemObject.state == E_Object_State.EMove && itemObject.moveType == Hi5ObjectMoveType.EPlaneMove)) //{ // itemObject.SetIsKinematic(true); // itemObject.GetComponent<Rigidbody>().Sleep(); //} } } } if (itemObject.mObjectType == EObject_Type.EButton || itemObject.mObjectType == EObject_Type.ECommon) { if (other.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer()) { if (other.gameObject.GetComponent <Hi5_Glove_Collider_Finger>() != null && other.gameObject.GetComponent <Hi5_Glove_Collider_Finger>().mFinger != null && other.gameObject.GetComponent <Hi5_Glove_Collider_Finger>().mFinger.mHand != null) { if (itemObject.mObjectType == EObject_Type.EButton) { if (itemObject.state == E_Object_State.EStatic) { itemObject.ChangeState(E_Object_State.EPoke); itemObject.NotifyPokeEvent(other); } } else { if (itemObject.state == E_Object_State.EStatic || itemObject.state == E_Object_State.EFlyLift) { } } } } } }
//#if Test_Assembly internal void OnItemTriggerEnter(Collider collision) { //Debug.Log ("Hi5_Glove_Interaction_Item OnItemTriggerEnter ENTER"); if (collision.gameObject.layer == Hi5_Interaction_Const.PlaneLayer()) { if (mObjectType == EObject_Type.ECommon) { //Debug.Log ("Hi5_Glove_Interaction_Item OnItemTriggerEnter"); mstatemanager.StopThrowMove(true); //if (Hi5_Interaction_Const.TestPlanePhycis) { //} //else // transform.rotation = Quaternion.Euler(0.0f, transform.eulerAngles.y, 0.0f); { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(idObject, mObjectType, EHandType.EHandLeft, EEventObjectType.EStatic); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } } } if (collision.gameObject.layer == Hi5_Interaction_Const.ObjectGrasp()) { if ((collision.gameObject.GetComponent <Hi5_Glove_Interaction_Item> () != null && collision.gameObject.GetComponent <Hi5_Glove_Interaction_Item> ().state == E_Object_State.EStatic) || (collision.transform.parent.gameObject.GetComponent <Hi5_Glove_Interaction_Item> () != null && collision.transform.parent.gameObject.GetComponent <Hi5_Glove_Interaction_Item> ().state == E_Object_State.EStatic)) { if (mObjectType == EObject_Type.ECommon) { //Debug.Log ("Hi5_Glove_Interaction_Item OnItemTriggerEnter"); mstatemanager.StopThrowMove(true); //transform.rotation = Quaternion.Euler(0.0f, transform.eulerAngles.y, 0.0f); //if (Hi5_Interaction_Const.TestChangeState) { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(idObject, mObjectType, EHandType.EHandLeft, EEventObjectType.EStatic); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } } } } }
override protected void OnTriggerExit(Collider other) { base.OnTriggerExit(other); if (mObjectType == EObject_Type.EButton) { if (other.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer() || other.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer()) { if (other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> () != null && other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger != null && other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger.mHand != null) { if (state == E_Object_State.EPoke) { this.ChangeState(E_Object_State.EStatic); if (Hi5_Interaction_Const.TestChangeState) { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(idObject, mObjectType, other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger.mHand.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventObjectType.EStatic); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } } } } } else if (mObjectType == EObject_Type.ECommon) { if (other.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer() || other.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer()) { if (other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> () != null && other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger != null && other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger.mHand != null) { IsPokeInLoop = false; } } } }
virtual protected void OnTriggerExit(Collider other) { if (other.gameObject.layer == Hi5_Interaction_Const.PlaneLayer()) { IsPreNoTouchPlane = true; //Debug.Log("IsPreNoTouchPlane true"); //IsTrigger = false; } if (other.gameObject.layer == Hi5_Interaction_Const.ObjectTriggerLayer()) { if (other.gameObject.GetComponent <Hi5_Glove_Interaction_Item_Trigger> () != null) { IsPreNoTouchObject = true; //mTiggerObjectId = -1000; //IsTiggerObject = false; //Debug.Log("IsTiggerObject true"); //TouchObjectY = transform.position.y; } } //Debug.Log("Hi5_Glove_Interaction_Item_Trigger OnTriggerStay false"); //Debug.Log("IsTrigger false"); }
internal void OnItemTriggerEnter(Collider collision) { if (collision.gameObject.layer == Hi5_Interaction_Const.PlaneLayer()) { if (mObjectType == EObject_Type.ECommon) { //Debug.Log ("OnItemTriggerEnter collision"+transform.eulerAngles.y); mstatemanager.StopThrowMove(); transform.rotation = Quaternion.Euler(0.0f, transform.eulerAngles.y, 0.0f); if (Hi5_Interaction_Const.TestChangeState) { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(idObject, mObjectType, EHandType.EHandLeft, EEventObjectType.EStatic); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } //transform.position = new Vector3(transform.position.x, Y-0.001f, transform.position.z); //Debug.Log ("transform.rotation x"+ transform.rotation.x+" y"+ transform.rotation.y+"transform.rotation z"+ transform.rotation.z); } } if (collision.gameObject.layer == Hi5_Interaction_Const.ObjectGrasp() && collision.gameObject.GetComponent <Hi5_Glove_Interaction_Item>() != null && collision.gameObject.GetComponent <Hi5_Glove_Interaction_Item>().state == E_Object_State.EStatic) { if (mObjectType == EObject_Type.ECommon) { //Debug.Log ("OnItemTriggerEnter collision"+transform.eulerAngles.y); mstatemanager.StopThrowMove(); transform.rotation = Quaternion.Euler(0.0f, transform.eulerAngles.y, 0.0f); if (Hi5_Interaction_Const.TestChangeState) { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(idObject, mObjectType, EHandType.EHandLeft, EEventObjectType.EStatic); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } //transform.position = new Vector3(transform.position.x, Y-0.001f, transform.position.z); //Debug.Log ("transform.rotation x"+ transform.rotation.x+" y"+ transform.rotation.y+"transform.rotation z"+ transform.rotation.z); } } }
virtual protected void OnTriggerStay(Collider other) { if (other.gameObject.layer == Hi5_Interaction_Const.PlaneLayer()) { planeTransform = other.gameObject.transform; IsTrigger = true; //TouchPlaneY = transform.position.y; IsPreNoTouchPlane = false; //Debug.Log("IsTigger true"); } if (other.gameObject.layer == Hi5_Interaction_Const.ObjectTriggerLayer()) { if (other.gameObject.GetComponent <Hi5_Glove_Interaction_Item_Trigger> () != null && other.gameObject.GetComponent <Hi5_Glove_Interaction_Item_Trigger> ().itemObject != null) { mTiggerObjectId = other.gameObject.GetComponent <Hi5_Glove_Interaction_Item_Trigger> ().itemObject.idObject; IsTiggerObject = true; IsPreNoTouchObject = false; //TouchObjectY = transform.position.y; //Debug.Log("IsTiggerObject true"); } } //Debug.Log("Hi5_Glove_Interaction_Item_Trigger OnTriggerStay true"); //Debug.Log("IsTrigger true"); }
override protected void OnTriggerExit(Collider other) { base.OnTriggerExit(other); if (Hi5_Interaction_Const.TestPinchOpenCollider) { if (other.gameObject.GetComponent <Hi5_Hand_Nail_Collider>() != null) { itemObject.ColliderNailNum--; if (itemObject.ColliderNailNum <= 0) { if (other.gameObject.GetComponent <Hi5_Hand_Nail_Collider>().mHand != null) { other.gameObject.GetComponent <Hi5_Hand_Nail_Collider>().mHand.RemoveNailColliderCount(); } //if (itemObject.state == E_Object_State.EMove // || itemObject.state == E_Object_State.EPoke // || itemObject.state == E_Object_State.EStatic) //{ // itemObject.SetIsKinematic(false); //} } } } if (itemObject.mObjectType == EObject_Type.EButton) { if (/*other.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer () ||*/other.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer()) { if (other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> () != null && other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger != null && other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger.mHand != null) { if (itemObject.state == E_Object_State.EPoke) { //Debug.Log("EPoke"); itemObject.ChangeState(E_Object_State.EStatic); //if (Hi5_Interaction_Const.TestChangeState) { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(itemObject.idObject, itemObject.mObjectType, other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger.mHand.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventObjectType.EStatic); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } } } } } else if (itemObject.mObjectType == EObject_Type.ECommon) { if (/*other.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer () ||*/other.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer()) { if (other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> () != null && other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger != null && other.gameObject.GetComponent <Hi5_Glove_Collider_Finger> ().mFinger.mHand != null) { itemObject.IsPokeInLoop = false; } } } }
internal bool IsPinch() { if (mHand.gameObject.GetComponent <Hi5_Glove_Property>() != null) { if (!mHand.gameObject.GetComponent <Hi5_Glove_Property>().Property_Data.IsPinch) { return(false); } } List <int> pinchs; int ObjectId = -1; bool isPinch = mHand.mState.mJudgeMent.IsPinch(out pinchs, out ObjectId); if (isPinch && !(mHand.GetRecognitionState() == Hi5_Glove_Gesture_Recognition_State.EFist) && !(mHand.GetRecognitionState() == Hi5_Glove_Gesture_Recognition_State.EIndexPoint)) { Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(ObjectId); if (item != null && item.mObjectType == EObject_Type.ECommon && item.mstatemanager != null && item.mstatemanager.GetMoveState() != null && (item.state == E_Object_State.EStatic || item.state == E_Object_State.EPinch || item.state == E_Object_State.EFlyLift || item.state == E_Object_State.EClap || (item.state == E_Object_State.EMove && item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EPlaneMove))) { Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messagePinchObject, pinchs, mHand, ObjectId); //isPinchCollider Hi5_Glove_State_Base baseState = mState.GetBaseState(E_Hand_State.EPinch); if (baseState != null) { (baseState as Hi5_Glove_State_Pinch).isPinchCollider = true; (baseState as Hi5_Glove_State_Pinch).objectId = ObjectId; } if (item != null && item.state == E_Object_State.EMove && (item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EThrowMove || item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EFree) && !item.mstatemanager.GetMoveState().IsProtectionFly()) { bool ContactIsSelf = false; float distance = Hi5_Interaction_Const.GetDistance(mHand.mPalm.transform, item, out ContactIsSelf); if (ContactIsSelf) { Vector3 offset = new Vector3(mHand.mPalm.transform.position.x - item.transform.position.x, mHand.mPalm.transform.position.y - item.transform.position.y, mHand.mPalm.transform.position.z - item.transform.position.z).normalized; offset = offset * distance; } } item.CleanRecord(); Hi5_Glove_Interaction_Hand handTemp = mHand; mHand.mGestureRecognition.CleanRecord(); mState.ChangeState(E_Hand_State.EPinch); { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(item.idObject, item.mObjectType, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventObjectType.EPinch); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } { Hi5_Glove_Interaction_Hand_Event_Data data = Hi5_Glove_Interaction_Hand_Event_Data.Instance(item.idObject, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventHandType.EPinch); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageHandEvent, (object)data, null); } return(true);; } return(false); } return(false); }
private bool IsPinchOne(out List <int> pinchs, out int ObjectId) { bool resultbool = false; List <int> thumbs; bool thumb = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb].IsPinchTrigger(out thumbs); List <int> indexs; bool index = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].IsPinchTrigger(out indexs); List <int> mids; bool mid = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].IsPinchTrigger(out mids); List <int> rings; bool ring = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ERing].IsPinchTrigger(out rings); List <int> results = null; if (thumb) { if (index && mid) { List <int> intersects = indexs.Intersect(mids).ToList(); if (intersects != null && intersects.Count > 0) { results = thumbs.Intersect(intersects).ToList(); } } else if (ring && mid) { List <int> intersects = rings.Intersect(mids).ToList(); if (intersects != null && intersects.Count > 0) { results = thumbs.Intersect(intersects).ToList(); } } } int distanceminId = -1; if (results != null && results.Count > 0) { List <int> listresult = new List <int>(); if (Hand.mPalm != null) { List <int> removeIds = new List <int>(); foreach (int id in results) { Transform temp = null; //mPalm.JudgeObjectHandInside(); List <Hi5_Glove_Interaction_Item> array = new List <Hi5_Glove_Interaction_Item>(); Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messageGetObjecById, (object)id, (object)array); if (array != null && array.Count > 0) { Transform value = array[0].transform; if (!Hand.mPalm.JudgeObjectHandInside(value)) { removeIds.Add(id); } } //else // Debug.Log("temp = empty"); } listresult = results.Except(removeIds).ToList(); } float distanceMin = 20.0f; for (int i = 0; i < listresult.Count; i++) { int objectIdTemp = listresult[i]; Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(objectIdTemp); if (item != null) { bool ContactIsSelf = false; float distance = Hi5_Interaction_Const.GetDistance(mHand.mPalm.transform, item, out ContactIsSelf); if (ContactIsSelf) { if (distance < distanceMin) { distanceMin = distance; distanceminId = objectIdTemp; } } } } //没用 if (listresult != null && listresult.Count > 0) { pinchs = results; if (thumb) { Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb].NotifyEnterPinchState(); } if (index) { Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].NotifyEnterPinchState(); } if (mid) { Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].NotifyEnterPinchState(); } if (ring) { Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ERing].NotifyEnterPinchState(); } resultbool = true; } else { pinchs = null; } } else { pinchs = null; } if (distanceminId != -1) { ObjectId = distanceminId; return(true); } else { ObjectId = -1; return(false); } }
internal bool IsPinch2(out List <int> results, out List <Hi5_Glove_Interaction_Finger> fingers, out int ObjectId) { //resultValues = null; results = null; List <int> thumbs; bool index = false; List <int> indexcs; bool index1 = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].IsPinch2Trigger(out indexcs); if (index1 && indexcs != null) { } bool thumb = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb].IsPinch2TailTrigger(out thumbs); if (thumb && thumbs != null) { List <int> indexs; index = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].IsPinch2Trigger(out indexs); if (index && indexs != null) { //Debug.Log ("pinch2 Index"); foreach (int indexTemp in indexs) { //Debug.Log ("indexIndex" + indexTemp); } List <int> intersects = indexs.Intersect(thumbs).ToList(); if (intersects != null) { results = intersects; } } if (results == null) { //Debug.Log ("pinch2 middle"); List <int> middles; bool middle = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].IsPinch2Trigger(out middles); if (middle && middles != null) { // foreach (int indexTemp in middles) // { // Debug.Log ("middleIndex" + indexTemp); // } List <int> intersects = middles.Intersect(thumbs).ToList(); if (intersects != null) { results = intersects; } } } } if (results != null && results.Count > 0) { List <Hi5_Glove_Interaction_Finger> fingertemps = new List <Hi5_Glove_Interaction_Finger>(); fingertemps.Add(Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb]); //Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb].NotifyEnterPinch2State(); if (index) { //Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].NotifyEnterPinch2State(); //fingerType = Hi5_Glove_Interaction_Finger_Type.EIndex; fingertemps.Add(Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex]); } else { fingertemps.Add(Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle]); //Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].NotifyEnterPinch2State(); //fingerType = Hi5_Glove_Interaction_Finger_Type.EMiddle; } float distanceMin = 20.0f; int distanceminId = -1; for (int i = 0; i < results.Count; i++) { //Debug.Log ("pinch2 1"); int objectIdTemp = results[i]; Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(objectIdTemp); if (item != null) { //Debug.Log ("pinch2 2"); bool ContactIsSelf = false; float distance = Hi5_Interaction_Const.GetDistance(mHand.mPalm.transform, item, out ContactIsSelf); if (ContactIsSelf) { //Debug.Log ("pinch2 3"); if (distance < distanceMin) { //Debug.Log ("pinch2 4"); distanceMin = distance; distanceminId = objectIdTemp; } } } } ObjectId = distanceminId; if (fingertemps != null && fingertemps.Count >= 2) { fingers = fingertemps; } else { fingers = null; } return(true); } else { fingers = null; ObjectId = -1; return(false); } }
internal bool IsFlyIngPinch(out List <int> results, out int ObjectId) { //if (Hi5_Interaction_Const.TestFlyMoveNoUsedGravity && Hand.mHandCollider != null) { int count = 0; List <int> handList; if (Hand.mHandFlyCollider.IsFlyPinch(out handList)) { // Debug.Log("Hand.mHandCollider.IsFlyPinch"); bool thumb = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb].IsFlyPinch; //Debug.Log("Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb] angel "+ Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb].flyPinch); if (thumb) { count++; } bool index = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].IsFlyPinch; //Debug.Log("Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex] angel " + Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].flyPinch); if (index) { count++; } bool middle = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].IsFlyPinch; //Debug.Log("Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle] angel " + Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].flyPinch); if (middle) { count++; } bool ring = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ERing].IsFlyPinch; // Debug.Log("Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ring] angel " + Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ERing].flyPinch); if (ring) { count++; } bool pinky = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EPinky].IsFlyPinch; if (pinky) { count++; } if (count >= 2) { results = handList; if (results != null) { float distanceMin = 20.0f; int distanceminId = -1; for (int i = 0; i < results.Count; i++) { int objectIdTemp = results[i]; Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(objectIdTemp); //if (item != null) //{ // Debug.Log("itemstate"+ item.state); //} if (item != null && item.state == E_Object_State.EMove && //&& (item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EThrowMove || item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EFree) //&& !item.mstatemanager.GetMoveState().IsProtectionFly()) { bool ContactIsSelf = false; float distance = Hi5_Interaction_Const.GetDistance(mHand.mPalm.transform, item, out ContactIsSelf); if (ContactIsSelf) { if (distance < distanceMin) { distanceMin = distance; distanceminId = objectIdTemp; } } } } if (distanceminId != -1) { ObjectId = distanceminId; //Hi5_Glove_Interraction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(ObjectId); //item.transform.position = Hand.mPalm.transform.position; return(true); } else { results = null; ObjectId = -1; return(false); } } else { results = null; ObjectId = -1; return(false); } } else { results = null; ObjectId = -1; return(false); } } else { results = null; ObjectId = -1; return(false); } } }
private bool IsPalmPinch(out List <int> pinchs, out int ObjectId) { List <Collider> colliders = Hand.IsPalmTrigger(); if (colliders == null) { pinchs = null; ObjectId = -1; return(false); } int idObject = -10000; List <int> temp = new List <int>(); foreach (Collider item in colliders) { if (item.GetComponent <Hi5_Glove_Interaction_Item>() != null) { idObject = item.GetComponent <Hi5_Glove_Interaction_Item>().idObject; if (Hand.mPalm.JudgeObjectHandInside(item.transform)) { temp.Add(idObject); } } } if (idObject == -10000) { pinchs = null; ObjectId = -1; return(false); } List <int> thumbs; bool thumb = Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb].IsPinchTrigger(out thumbs); if (thumb) { Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EThumb].NotifyEnterPinchState(); int count = 0; if (Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].PalmPinch()) { ///Debug.Log("Hi5_Glove_Interaction_Finger_Type.EIndex"); Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EIndex].NotifyEnterPinchState(); count++; } if (Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].PalmPinch()) { Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EMiddle].NotifyEnterPinchState(); //Debug.Log("Hi5_Glove_Interaction_Finger_Type.EMiddle"); count++; } if (Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ERing].PalmPinch()) { Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.ERing].NotifyEnterPinchState(); //Debug.Log("Hi5_Glove_Interaction_Finger_Type.ERing"); count++; } if (Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EPinky].PalmPinch()) { Hand.mFingers[Hi5_Glove_Interaction_Finger_Type.EPinky].NotifyEnterPinchState(); // Debug.Log("Hi5_Glove_Interaction_Finger_Type.EPinky"); count++; } if (count > 2) { pinchs = temp; float distanceMin = 20.0f; int distanceminId = -1; for (int i = 0; i < temp.Count; i++) { int objectIdTemp = temp[i]; Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(objectIdTemp); if (item != null) { bool ContactIsSelf = false; float distance = Hi5_Interaction_Const.GetDistance(mHand.mPalm.transform, item, out ContactIsSelf); if (ContactIsSelf) { if (distance < distanceMin) { distanceMin = distance; distanceminId = objectIdTemp; } } } } ObjectId = distanceminId; return(true); } else { pinchs = null; ObjectId = -1; return(false); } } else { pinchs = null; ObjectId = -1; return(false); } }
internal bool IsPinch() { List <int> pinchs; int ObjectId = -1; bool isPinch = mHand.mState.mJudgeMent.IsPinch(out pinchs, out ObjectId); if (isPinch) { Hi5_Glove_Interaction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(ObjectId); if (item != null && item.mObjectType == EObject_Type.ECommon && item.mstatemanager != null && item.mstatemanager.GetMoveState() != null && (item.state == E_Object_State.EStatic || item.state == E_Object_State.EPinch || item.state == E_Object_State.EFlyLift || item.state == E_Object_State.EClap || (item.state == E_Object_State.EMove && item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EPlaneMove))) { Hi5_Interaction_Message.GetInstance().DispenseMessage(Hi5_MessageKey.messagePinchObject, pinchs, mHand, ObjectId); //isPinchCollider Hi5_Glove_State_Base baseState = mState.GetBaseState(E_Hand_State.EPinch); if (baseState != null) { (baseState as Hi5_Glove_State_Pinch).isPinchCollider = true; (baseState as Hi5_Glove_State_Pinch).objectId = ObjectId; } //Hi5_Glove_Interraction_Item item = Hi5_Interaction_Object_Manager.GetObjectManager().GetItemById(ObjectId); if (item != null && item.state == E_Object_State.EMove && (item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EThrowMove || item.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EFree) && !item.mstatemanager.GetMoveState().IsProtectionFly()) { bool ContactIsSelf = false; float distance = Hi5_Interaction_Const.GetDistance(mHand.mPalm.transform, item, out ContactIsSelf); if (ContactIsSelf) { Vector3 offset = new Vector3(mHand.mPalm.transform.position.x - item.transform.position.x, mHand.mPalm.transform.position.y - item.transform.position.y, mHand.mPalm.transform.position.z - item.transform.position.z).normalized; offset = offset * distance; //item.transform.position = new Vector3(item.transform.position.x + offset.x, // item.transform.position.y + offset.y, // item.transform.position.z + offset.z); } } item.CleanRecord(); Hi5_Glove_Interaction_Hand handTemp = mHand; mState.ChangeState(E_Hand_State.EPinch); // if (handTemp.m_IsLeftHand) // { // Debug.Log ("Left pinch"); // } { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(item.idObject, item.mObjectType, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventObjectType.EPinch); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } { Hi5_Glove_Interaction_Hand_Event_Data data = Hi5_Glove_Interaction_Hand_Event_Data.Instance(item.idObject, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventHandType.EPinch); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageHandEvent, (object)data, null); } //Hi5_Glove_Interaction_Object_Event_Data data = new Hi5_Glove_Interaction_Object_Event_Data(); //if (Hand.m_IsLeftHand) // data.mHandType = EHandType.EHandLeft; //else // data.mHandType = EHandType.EHandRight; //data.mObjectType = item.mObjectType; //data.mEventType = EEventType.EPinch; //data.mObjectId = item.idObject; //Hi5InteractionManger.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); return(true);; } return(false); } return(false); }
override protected void OnCollisionEnter(Collision collision) { base.OnCollisionEnter(collision); if (itemObject.mObjectType == EObject_Type.ECommon) { if ((collision.gameObject.layer == Hi5_Interaction_Const.PlaneLayer()) || ((collision.gameObject.layer == Hi5_Interaction_Const.ObjectGrasp() && (collision.gameObject.GetComponent <Hi5_Glove_Interaction_Item>() != null && collision.gameObject.GetComponent <Hi5_Glove_Interaction_Item>().state == E_Object_State.EStatic) || (collision.transform.parent.gameObject.GetComponent <Hi5_Glove_Interaction_Item>() != null && collision.transform.parent.gameObject.GetComponent <Hi5_Glove_Interaction_Item>().state == E_Object_State.EStatic))) ) { if (itemObject.state == E_Object_State.EPinch) { return; } //Debug.Log ("Hi5_Interaction_Item_Collider OnCollisionEnter"); itemObject.mstatemanager.StopThrowMove(true); Vector3 separationVector = Vector3.zero; ContactPoint[] contactPoints = collision.contacts; if (contactPoints != null && contactPoints.Length > 0) { itemObject.contactPointTemp = new Hi5_Glove_Interaction_Item.ContactPointClass(); itemObject.contactPointTemp.contactPoint = contactPoints [0]; float separation = itemObject.contactPointTemp.contactPoint.separation; Vector3 contactPointNormal = itemObject.contactPointTemp.contactPoint.normal; contactPointNormal.Normalize(); separationVector = (contactPointNormal) * separation; itemObject.transform.position = new Vector3(itemObject.transform.position.x, itemObject.transform.position.y + Mathf.Abs(separationVector.y), itemObject.transform.position.z); } itemObject.PlaneY = itemObject.transform.position.y; //transform.rotation = initRotation; //if (!Hi5_Interaction_Const.TestPlanePhycis) // itemObject.transform.rotation = Quaternion.Euler(0.0f, transform.eulerAngles.y, 0.0f); //if (Hi5_Interaction_Const.TestChangeState) { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(itemObject.idObject, itemObject.mObjectType, EHandType.EHandLeft, EEventObjectType.EStatic); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } } if (collision.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer() /*|| collision.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer()*/) { if (collision.gameObject.GetComponent <Hi5_Hand_Collider_Visible_Finger>()) { if (itemObject.mObjectType == EObject_Type.ECommon) { if (itemObject.state == E_Object_State.EStatic || itemObject.state == E_Object_State.EFlyLift) { if (!itemObject.IsPokeInLoop) { ContactPoint[] contactPoints = collision.contacts; if (contactPoints != null && contactPoints.Length > 0) { Vector3 normal = contactPoints [0].normal; float angle = Vector3.Angle(Hi5_Interaction_Object_Manager.GetObjectManager().transform.up, normal); if (Mathf.Abs(angle) > 25.0f) { itemObject.NotifyPokeEvent(collision); itemObject.IsPokeInLoop = true; } } } } { if (itemObject.mstatemanager.State == E_Object_State.EStatic || (itemObject.mstatemanager.State == E_Object_State.EMove && itemObject.mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EPlaneMove)) { Hi5_Hand_Visible_Hand handTemp = collision.gameObject.GetComponent <Hi5_Hand_Collider_Visible_Finger>().mHand; itemObject.ChangeState(E_Object_State.EMove); if (itemObject.mstatemanager != null) { itemObject.mstatemanager.SetPlaneMove(collision); } { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(itemObject.idObject, itemObject.mObjectType, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventObjectType.EMove); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } } } } } } } }
override protected void OnCollisionEnter(Collision collision) { UnityEngine.Profiling.Profiler.BeginSample("Hi5_Glove_Interaction_Item"); base.OnCollisionEnter(collision); if (mObjectType == EObject_Type.ECommon) { if ((collision.gameObject.layer == Hi5_Interaction_Const.PlaneLayer()) || ((collision.gameObject.layer == Hi5_Interaction_Const.ObjectGrasp() && collision.gameObject.GetComponent <Hi5_Glove_Interaction_Item>() != null && collision.gameObject.GetComponent <Hi5_Glove_Interaction_Item>().state == E_Object_State.EStatic))) { if (state == E_Object_State.EPinch) { return; } mstatemanager.StopThrowMove(); Vector3 separationVector = Vector3.zero; ContactPoint[] contactPoints = collision.contacts; if (contactPoints != null && contactPoints.Length > 0) { contactPointTemp = new ContactPointClass(); contactPointTemp.contactPoint = contactPoints [0]; float separation = contactPointTemp.contactPoint.separation; Vector3 contactPointNormal = contactPointTemp.contactPoint.normal; contactPointNormal.Normalize(); separationVector = (contactPointNormal) * separation; transform.position = new Vector3(transform.position.x, transform.position.y + Mathf.Abs(separationVector.y), transform.position.z); } PlaneY = transform.position.y; //transform.rotation = initRotation; transform.rotation = Quaternion.Euler(0.0f, transform.eulerAngles.y, 0.0f); if (Hi5_Interaction_Const.TestChangeState) { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(idObject, mObjectType, EHandType.EHandLeft, EEventObjectType.EStatic); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } } if (collision.gameObject.layer == Hi5_Interaction_Const.OtherFingerTailLayer() || collision.gameObject.layer == Hi5_Interaction_Const.ThumbTailLayer()) { //Debug.Log ("Hi5_Interaction_Const.OtherFingerTailLayer"); if (collision.gameObject.GetComponent <Hi5_Hand_Collider_Visible_Finger>()) { //float dot = Vector3.Dot(collision.contacts[0].normal, collision.gameObject.transform.parent.right); //if (dot < 0.0f) if (mObjectType == EObject_Type.ECommon) { if (state == E_Object_State.EStatic || state == E_Object_State.EFlyLift) { if (!IsPokeInLoop) { ContactPoint[] contactPoints = collision.contacts; if (contactPoints != null && contactPoints.Length > 0) { Vector3 normal = contactPoints [0].normal; float angle = Vector3.Angle(Hi5_Interaction_Object_Manager.GetObjectManager().transform.up, normal); if (Mathf.Abs(angle) > 25.0f) { NotifyPokeEvent(collision); IsPokeInLoop = true; } } } } if (Hi5_Interaction_Const.TestChangeState) { if (mstatemanager.State == E_Object_State.EStatic || (mstatemanager.State == E_Object_State.EMove && mstatemanager.GetMoveState().mMoveType == Hi5ObjectMoveType.EPlaneMove)) { Hi5_Hand_Visible_Hand handTemp = collision.gameObject.GetComponent <Hi5_Hand_Collider_Visible_Finger>().mHand; if (mstatemanager != null) { mstatemanager.SetPlaneMove(collision); } ChangeState(E_Object_State.EMove); { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(idObject, mObjectType, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventObjectType.EMove); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } } } else { if (mstatemanager.State == E_Object_State.EStatic || mstatemanager.State == E_Object_State.EMove) { Hi5_Hand_Visible_Hand handTemp = collision.gameObject.GetComponent <Hi5_Hand_Collider_Visible_Finger>().mHand; if (mstatemanager != null) { mstatemanager.SetPlaneMove(collision); } ChangeState(E_Object_State.EMove); { Hi5_Glove_Interaction_Object_Event_Data data = Hi5_Glove_Interaction_Object_Event_Data.Instance(idObject, mObjectType, handTemp.m_IsLeftHand ? EHandType.EHandLeft : EHandType.EHandRight, EEventObjectType.EMove); Hi5InteractionManager.Instance.GetMessage().DispenseMessage(Hi5_Glove_Interaction_Message.Hi5_MessageMessageKey.messageObjectEvent, (object)data, null); } } } } } } } UnityEngine.Profiling.Profiler.EndSample();; }
//GameObject Clone = null; internal void CalculateThrowMove(Queue <Hi5_Position_Record> records, Transform handPalm, Hi5_Glove_Interaction_Hand hand) { mIsFlyMovePause = false; int index = 0; int weightPointCount = 0; float timeCount = 0.0f; Vector3 distanceVector = Vector3.zero; foreach (Hi5_Position_Record item in records) { if (Hi5_Interaction_Const.RecordPositionWeight.Length > index) { int weight = Hi5_Interaction_Const.RecordPositionWeight[index]; weightPointCount += weight; timeCount += item.mIntervalTime * weight; distanceVector += item.mMoveVector * weight; } index++; } if (index <= 1) { // mMoveData = new ObjectMoveData(); // mMoveData.mDirection = new Vector3 (0.0f, 0.08598139f, 0.0f); // mMoveData.y = mMoveData.mDirection.y; // mMoveData.ySpeed = mMoveData.mDirection.y; //Debug.Log("index <= 1"); Vector3 temp = hand.MoveAnchor.position - hand.mPalm.transform.position; temp.Normalize(); mMoveData = new ObjectMoveData(); mMoveData.mDirection = temp * 0.3998139f; mMoveData.y = mMoveData.mDirection.y; mMoveData.ySpeed = mMoveData.mDirection.y; // mMoveData = new ObjectMoveData(); // mMoveData.mDirection = distanceVector / timeCount* Hi5_Interaction_Const.ThrowSpeed; // mMoveData.y = mMoveData.mDirection.y; // mMoveData.ySpeed = mMoveData.mDirection.y; Hi5_Interaction_Const.WriteItemMoveXml(records, mMoveData); } else { //Debug.Log("index > 1"); mMoveData = new ObjectMoveData(); mMoveData.mDirection = distanceVector / timeCount * Hi5_Interaction_Const.ThrowSpeed; mMoveData.y = mMoveData.mDirection.y; mMoveData.ySpeed = mMoveData.mDirection.y; Hi5_Interaction_Const.WriteItemMoveXml(records, mMoveData); } //if (Hi5_Interaction_Const.TestPhycis) //if (Hi5_Interaction_Const.TestModifyConstraints) { //mItem.SetIsKinematic (false); //mItem.SetUseGravity (true); //mItem.CleanLock (); if (mItem.GetComponent <Hi5_Object_Property>() != null && mItem.GetComponent <Hi5_Object_Property>().ObjectProperty.AirMoveProperty != null) { mItem.SetIsKinematic(false); mItem.SetUseGravity(true); mItem.GetComponent <Rigidbody>().constraints = RigidbodyConstraints.None; mItem.GetComponent <Hi5_Object_Property>().SetRotation(mItem.GetComponent <Hi5_Object_Property>().ObjectProperty.AirMoveProperty.ConstraintsFreezeRotation, mItem.GetComponent <Hi5_Object_Property>().ObjectProperty.AirMoveProperty.ConstraintsFreezeRotation, mItem.GetComponent <Hi5_Object_Property>().ObjectProperty.AirMoveProperty.ConstraintsFreezeRotation); } else { mItem.SetIsKinematic(false); mItem.SetUseGravity(true); mItem.CleanLock(); } } mMoveType = Hi5ObjectMoveType.EThrowMove; protectedTransform = handPalm; IsProtectFly = true; }
internal void CacullateThrowMove(Queue <Hi5_Position_Record> records, Transform handPalm, Hi5_Glove_Interaction_Hand hand) { mIsFlyMovePause = false; int index = 0; int weightPointCount = 0; float timeCount = 0.0f; Vector3 distanceVector = Vector3.zero; foreach (Hi5_Position_Record item in records) { if (Hi5_Interaction_Const.RecordPositionWeight.Length > index) { int weight = Hi5_Interaction_Const.RecordPositionWeight[index]; weightPointCount += weight; timeCount += item.mIntervalTime * weight; distanceVector += item.mMoveVector * weight; } index++; } if (index <= 1) { // mMoveData = new ObjectMoveData(); // mMoveData.mDirection = new Vector3 (0.0f, 0.08598139f, 0.0f); // mMoveData.y = mMoveData.mDirection.y; // mMoveData.ySpeed = mMoveData.mDirection.y; Vector3 temp = hand.MoveAnchor.position - hand.mPalm.transform.position; temp.Normalize(); mMoveData = new ObjectMoveData(); mMoveData.mDirection = temp * 0.3998139f; mMoveData.y = mMoveData.mDirection.y; mMoveData.ySpeed = mMoveData.mDirection.y; // mMoveData = new ObjectMoveData(); // mMoveData.mDirection = distanceVector / timeCount* Hi5_Interaction_Const.ThrowSpeed; // mMoveData.y = mMoveData.mDirection.y; // mMoveData.ySpeed = mMoveData.mDirection.y; Hi5_Interaction_Const.WriteItemMoveXml(records, mMoveData); } else { mMoveData = new ObjectMoveData(); mMoveData.mDirection = distanceVector / timeCount * Hi5_Interaction_Const.ThrowSpeed; mMoveData.y = mMoveData.mDirection.y; mMoveData.ySpeed = mMoveData.mDirection.y; Hi5_Interaction_Const.WriteItemMoveXml(records, mMoveData); } //if (Hi5_Interaction_Const.TestFlyMoveNoUsedGravity) { mItem.SetIsKinematic(true); mItem.SetUseGravity(false); } //else //{ // mItem.SetIsKinematic(false); // mItem.SetUseGravity(true); //} mMoveType = Hi5ObjectMoveType.EThrowMove; protecedTransform = handPalm; IsProtectFly = true; }