//======= Copyright (c) Valve Corporation, All rights reserved. =============== // // Purpose: Can be attached to the controller to collide with the balloons // //============================================================================= using UnityEngine; using System.Collections; namespace Valve.VR.InteractionSystem { //------------------------------------------------------------------------- public class BalloonColliders : MonoBehaviour { public GameObject[] colliders; private Vector3[] colliderLocalPositions; private Quaternion[] colliderLocalRotations; private Rigidbody rb; //------------------------------------------------- void Awake() { rb = GetComponent(); colliderLocalPositions = new Vector3[colliders.Length]; colliderLocalRotations = new Quaternion[colliders.Length]; for ( int i = 0; i < colliders.Length; ++i ) { colliderLocalPositions[i] = colliders[i].transform.localPosition; colliderLocalRotations[i] = colliders[i].transform.localRotation; colliders[i].name = gameObject.name + "." + colliders[i].name; } } //------------------------------------------------- void OnEnable() { for ( int i = 0; i < colliders.Length; ++i ) { colliders[i].transform.SetParent( transform ); colliders[i].transform.localPosition = colliderLocalPositions[i]; colliders[i].transform.localRotation = colliderLocalRotations[i]; colliders[i].transform.SetParent( null ); FixedJoint fixedJoint = colliders[i].AddComponent(); fixedJoint.connectedBody = rb; fixedJoint.breakForce = Mathf.Infinity; fixedJoint.breakTorque = Mathf.Infinity; fixedJoint.enableCollision = false; fixedJoint.enablePreprocessing = true; colliders[i].SetActive( true ); } } //------------------------------------------------- void OnDisable() { for ( int i = 0; i < colliders.Length; ++i ) { if ( colliders[i] != null ) { Destroy( colliders[i].GetComponent() ); colliders[i].SetActive( false ); } } } //------------------------------------------------- void OnDestroy() { for ( int i = 0; i < colliders.Length; ++i ) { Destroy( colliders[i] ); } } } }