88 lines
2.2 KiB
C#
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] );
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|