public override void BeginInteraction(NVRHand hand) { base.BeginInteraction(hand); var closestPoint = Vector3.zero; var shortestDistance = float.MaxValue; for (var index = 0; index < Colliders.Length; index++) { var closest = Colliders[index].bounds.ClosestPoint(AttachedHand.transform.position); var distance = Vector3.Distance(AttachedHand.transform.position, closest); if (distance < shortestDistance) { shortestDistance = distance; closestPoint = closest; } } InitialAttachPoint = new GameObject(string.Format("[{0}] InitialAttachPoint", this.gameObject.name)).transform; //InitialAttachPoint = GameObject.CreatePrimitive(PrimitiveType.Cube).transform; InitialAttachPoint.position = hand.transform.position; InitialAttachPoint.rotation = hand.transform.rotation; InitialAttachPoint.localScale = Vector3.one * 0.25f; InitialAttachPoint.parent = this.transform; }
public virtual void BeginInteraction(NVRHand hand) { AttachedHand = hand; if (DisableKinematicOnAttach == true) { Rigidbody.isKinematic = false; } }
public void RegisterHand(NVRHand hand) { var colliders = hand.GetComponentsInChildren<Collider>(); foreach (Collider coll in colliders) { if (_colliderToHandMapping.ContainsKey(coll) == false) { _colliderToHandMapping.Add(coll, hand); } } }
public override void BeginInteraction(NVRHand hand) { base.BeginInteraction(hand); InitialAttachPoint = new GameObject(string.Format("[{0}] InitialAttachPoint", this.gameObject.name)).transform; InitialAttachPoint.position = hand.transform.position; InitialAttachPoint.rotation = hand.transform.rotation; InitialAttachPoint.localScale = Vector3.one * 0.25f; InitialAttachPoint.parent = this.transform; HingeJoint.useMotor = false; }
public virtual void InteractingUpdate(NVRHand hand) { if (hand.UseButtonUp == true) { UseButtonUp(); } if (hand.UseButtonDown == true) { UseButtonDown(); } }
public virtual void EndInteraction() { AttachedHand = null; ClosestHeldPoint = Vector3.zero; if (EnableKinematicOnDetach == true) { Rigidbody.isKinematic = true; } if (EnableGravityOnDetach == true) { Rigidbody.useGravity = true; } }
public override void BeginInteraction(NVRHand hand) { base.BeginInteraction(hand); Vector3 closestPoint = Vector3.zero; float shortestDistance = float.MaxValue; for (int index = 0; index < Colliders.Length; index++) { Vector3 closest = Colliders[index].bounds.ClosestPoint(AttachedHand.transform.position); float distance = Vector3.Distance(AttachedHand.transform.position, closest); if (distance < shortestDistance) { shortestDistance = distance; closestPoint = closest; } } PickupTransform = new GameObject(string.Format("[{0}] PickupTransform", this.gameObject.name)).transform; PickupTransform.parent = hand.transform; PickupTransform.position = this.transform.position; PickupTransform.rotation = this.transform.rotation; }
public override void BeginInteraction(NVRHand hand) { this.Rigidbody.isKinematic = false; base.BeginInteraction(hand); }
public void Initialize(NVRHand trackingHand, bool initialState) { Hand = trackingHand; PhysicalController = GameObject.Instantiate(Hand.gameObject); PhysicalController.name = PhysicalController.name.Replace("(Clone)", " [Physical]"); var renderModel = PhysicalController.GetComponentInChildren<SteamVR_RenderModel>(); ModelParent = renderModel.transform; GameObject.DestroyImmediate(PhysicalController.GetComponent<NVRPhysicalController>()); GameObject.DestroyImmediate(PhysicalController.GetComponent<NVRHand>()); GameObject.DestroyImmediate(PhysicalController.GetComponent<SteamVR_TrackedObject>()); GameObject.DestroyImmediate(renderModel); GameObject.DestroyImmediate(PhysicalController.GetComponent<NVRPhysicalController>()); var clonedColliders = PhysicalController.GetComponentsInChildren<Collider>(); for (var index = 0; index < clonedColliders.Length; index++) { GameObject.DestroyImmediate(clonedColliders[index]); } PhysicalController.transform.parent = Hand.transform.parent; PhysicalController.transform.position = Hand.transform.position; PhysicalController.transform.rotation = Hand.transform.rotation; PhysicalController.transform.localScale = Hand.transform.localScale; Rigidbody = PhysicalController.GetComponent<Rigidbody>(); Rigidbody.isKinematic = false; Rigidbody.useGravity = false; Rigidbody.angularDrag = 0; Rigidbody.maxAngularVelocity = 100f; var controllerModel = Hand.GetDeviceName(); switch (controllerModel) { case "vr_controller_05_wireless_b": var dk1Trackhat = ModelParent.transform.Find("trackhat"); Collider dk1TrackhatCollider = dk1Trackhat.gameObject.GetComponent<BoxCollider>(); if (dk1TrackhatCollider == null) dk1TrackhatCollider = dk1Trackhat.gameObject.AddComponent<BoxCollider>(); var dk1Body = ModelParent.transform.Find("body"); Collider dk1BodyCollider = dk1Body.gameObject.GetComponent<BoxCollider>(); if (dk1BodyCollider == null) dk1BodyCollider = dk1Body.gameObject.AddComponent<BoxCollider>(); Colliders = new Collider[] { dk1TrackhatCollider, dk1BodyCollider }; break; case "vr_controller_vive_1_5": var dk2TrackhatColliders = ModelParent.transform.FindChild("VivePreColliders"); if (dk2TrackhatColliders == null) { dk2TrackhatColliders = GameObject.Instantiate(Resources.Load<GameObject>("VivePreColliders")).transform; dk2TrackhatColliders.parent = ModelParent.transform; dk2TrackhatColliders.localPosition = Vector3.zero; dk2TrackhatColliders.localRotation = Quaternion.identity; dk2TrackhatColliders.localScale = Vector3.one; } Colliders = dk2TrackhatColliders.GetComponentsInChildren<Collider>(); break; case "Custom": var customCollidersTransform = PhysicalController.transform.FindChild("VivePreColliders"); if (customCollidersTransform == null) { var customColliders = GameObject.Instantiate(Hand.CustomPhysicalColliders); customColliders.name = "CustomColliders"; customCollidersTransform = customColliders.transform; customCollidersTransform.parent = PhysicalController.transform; customCollidersTransform.localPosition = Vector3.zero; customCollidersTransform.localRotation = Quaternion.identity; customCollidersTransform.localScale = Vector3.one; } Colliders = customCollidersTransform.GetComponentsInChildren<Collider>(); break; default: Debug.LogError("Error. Unsupported device type: " + controllerModel); break; } var renderers = PhysicalController.GetComponentsInChildren<Renderer>(); for (var index = 0; index < renderers.Length; index++) { NVRHelpers.SetOpaque(renderers[index].material); } if (initialState == false) { Off(); } else { On(); } }