I have a GameObject that holds all of the scripts that run my scene. I want to detect when a collision has occurred between two objects, but I want the collision to trigger events in a script contained by my script GameObject, which is itself not involved in the collision. As far as I understand, the OnCollisionEnter and OnTriggerEnter functions will only be called in scripts attached to a GameObject that is taking part in a collision. Thus I can’t figure out how to impact variables owned by a script in another GameObject that isn’t involved in the collision.
I figured out a way to do it. I took the object acting as the trigger and wrote a simple script using OnTriggerEnter() to detect collisions between itself and other objects. Then I declared my Scripts GameObject as a public variable and added it in the Editor. After that I declared a variable to hold the particular script I wanted to access and accessed it using gameObject.GetComponent(). With that I was able to change a boolean in my script attached to the Scripts object in the script attached to the collider. Here is the script attached to the trigger collider:
//Using UnityScript
#pragma strict
//The gameobject that holds the scripts
public var scripts : GameObject;
//The particular script I want to access the variable in.
private var actionScript : ActionScript;
function Start ()
{
actionScript = scripts.GetComponent("ActionScript");
actionScript.collision = false; //ActionScript contains a boolean named "collision"
}
function Update () {}
function OnTriggerEnter(collider : Collider)
{
if (collider.gameObject.tag == "MyTag")
{
Debug.Log("Collision Detected!");
actionScript.collision = true;
}
}