Event Trigger and Scripting, how to avoid duplicate initialization?

I have an UI Canvas with several objects. In some of them, I have added an Event Trigger component since I need to call certain functions when they are clicked. To do so, I have added that script in each of those objects, so the method “onClick(int)” I have defined inside that script, is visible for the Event Trigger component in each object.

Everything seemed to work fine this way, until I need to perform some initialization within such scripts. It seems the methods OnAwake and OnStart are called once for each object in which the script is. It is quite logical, since they are different instances, but the problem is how to solve this.

Is there any other place in which I could put such script just once and such that its methods are accessible to every object?

Arguably the simplest (though not necessarily the best) option would be to just include a static variable inside your interface script and set it to true once the initialisation had occurred once.

e.g.

//place this at the top of the class where you store other variables
static bool init = false;

void Start()
{
    if(!init)
    {
        //Do stuff
        //..

        //init=true;
    }
}

This is probably not the best way to implement, but it will work with negligible performance impact.

Alternatively, you could create a Singleton class and then store a reference to it as a variable to your main class. See also Loading...

Let me know if I’ve completely misunderstood the question :wink: