Invoking a Function From A Variblized Script And Object
Hello!
I am currently trying to find a way to run a function from a script in another object. Now I Realize this sounds simple enough but there is a catch. I need to be able to call this function when the object, script, and function are all variables. and i believe the best way if not the only way to do so is with a reflection. But if i'm being totally honest i don't quite understand how to do so. if anyone could tell me the best way to do so and explain it for me it will be greatly appreciated.
Thank You In Advanced!
Answer by Commoble · Mar 06, 2017 at 08:33 PM
public FirstScript : MonoBehaviour
{
public void someFunction()
{
// function code goes here
}
}
// and then in a different script file
public OtherScript : MonoBehaviour
{
public FirstScript scriptOnOtherObject;
// SOLUTION 1:
// if you can access both objects in the scene editor,
// link your first script here by dragging the other object
// to this script's scriptOnOtherObject field in the inspector,
// and then the field above will reference that script.
// SOLUTION 2:
// if you can't do Solution 1 because one or both objects
// aren't instantiated until runtime,
// then first you'll have to get a reference to the other GameObject, i.e.
// GameObject otherGameObject = (other game object)
// then use
// this.scriptOnOtherObject = otherGameObject.GetComponent<FirstScript>();
// How you get the reference to the other game object depends on the context.
// For example, if the two objects collide, the collision event will give you a reference
// to the other game object.
// Then, in either case, wherever you need to call that function:
void Update() // (for example)
{
this.scriptOnOtherObject.someFunction();
}
}
If the function is also a variable (i.e. you're using delegates), then the lower script is exactly the same, it calls the function in the same manner.
e.g. if x is a variable holding a function, then you invoke that function by calling x().