//Disable unity physics and collision. For moving item through code static public void FreezeItem(GameObject item, bool disableAllColliders = false, bool disableTriggerColliders = false, bool disableNonTriggerColliders = false) { VRInteractableItem.DisableObjectColliders(item, disableAllColliders, disableTriggerColliders, disableNonTriggerColliders); Rigidbody itemBody = item.GetComponent <Rigidbody>(); if (itemBody != null) { RigidbodyMarker.ReplaceRigidbodyWithMarker(itemBody); } }
//Enable unity physics static public void UnFreezeItem(GameObject item) { Collider[] itemColliders = item.GetComponentsInChildren <Collider>(); foreach (Collider col in itemColliders) { VRInteractableItem ii = null; VRItemCollider ic = col.GetComponent <VRItemCollider>(); if (ic != null) { ii = ic.item; } if (ii == null) { ii = col.GetComponent <VRInteractableItem>(); } if (ii != null && (ii.parents.Count != 0 || !ii.enabled || ii.interactionDisabled)) { continue; } col.enabled = true; } RigidbodyMarker bodyMarker = item.GetComponent <RigidbodyMarker>(); if (bodyMarker != null) { Rigidbody body = bodyMarker.ReplaceMarkerWithRigidbody(); body.isKinematic = false; } else { Rigidbody body = item.GetComponent <Rigidbody>(); if (body != null) { body.isKinematic = false; } } /*Rigidbody itemBody = item.GetComponentInChildren<Rigidbody>(); * if (itemBody != null) * { * itemBody.useGravity = true; * itemBody.isKinematic = false; * itemBody.constraints = RigidbodyConstraints.None; * itemBody.interpolation = RigidbodyInterpolation.Interpolate; * }*/ }
static public RigidbodyMarker ReplaceRigidbodyWithMarker(Rigidbody body) { body.isKinematic = true; RigidbodyMarker marker = body.GetComponent <RigidbodyMarker>(); if (marker == null || marker.markToDestroy) { marker = body.gameObject.AddComponent <RigidbodyMarker>(); } marker.mass = body.mass; marker.drag = body.drag; marker.angularDrag = body.angularDrag; marker.useGravity = body.useGravity; marker.isKinematic = body.isKinematic; marker.interpolate = body.interpolation; marker.collisionDetection = body.collisionDetectionMode; marker.constraints = body.constraints; Destroy(body); return(marker); }
//Set item up to be held correctly static public void HeldFreezeItem(GameObject item) { Collider[] itemColliders = item.GetComponentsInChildren <Collider>(); foreach (Collider col in itemColliders) { VRInteractableItem ii = null; VRItemCollider ic = col.GetComponent <VRItemCollider>(); if (ic != null) { ii = ic.item; } if (ii == null) { ii = col.GetComponent <VRInteractableItem>(); } if (ii != null && (ii.parents.Count != 0 || !ii.enabled || ii.interactionDisabled)) { continue; } col.enabled = true; } RigidbodyMarker bodyMarker = item.GetComponent <RigidbodyMarker>(); if (bodyMarker != null) { Rigidbody body = bodyMarker.ReplaceMarkerWithRigidbody(); body.isKinematic = false; } else { Rigidbody body = item.GetComponent <Rigidbody>(); if (body != null) { body.isKinematic = false; } } }