You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.2 KiB
C#

//======= 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<Rigidbody>();
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>();
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<FixedJoint>() );
colliders[i].SetActive( false );
}
}
}
//-------------------------------------------------
void OnDestroy()
{
for ( int i = 0; i < colliders.Length; ++i )
{
Destroy( colliders[i] );
}
}
}
}