У меня есть некоторые тексты, которые я хочу скопировать содержимое другого. Для этого я получаю все экземпляры этих копий текстов в функции Start()
. Однако мне нужно сделать это только один раз. Для того, чтобы сделать этот компактный, я не хочу, чтобы сделать это в моем Singleton GameManager
, поэтому я использую static bool
, который изменяется, когда я делаю эту инициализацию следующим образом:Unity - убедитесь, что только один экземпляр выполняет заданную команду
#region Variables
//using this so that we get the references of the texts only once.
static bool _initDone = false;
CopyText[] scripts;
static Text[] texts;
#endregion
void Start()
{
#region What to do
/*
* Getting all this script's gameobjects, and their texts.
* note that this scripts is attached only to objects with Text attribute.
* after that nullifying the CopyText array to save space.
*/
#endregion
if (!_initDone)
{
//so only the first one of this instance will do it.
_initDone = true;
scripts = Object.FindObjectsOfType<CopyText>();
for (int i = 0; i < scripts.Length; i++)
{
try
{
texts[i] = scripts[i].GetComponent<Text>();
}
catch
{
//in case it is put on an object that doesn't have a Text
Destroy(scripts[i]);
}
}
scripts = null;
//by now we should have our references of all copycat texts.
}
}
Этот должен работу, но я не имеют понятия, если два экземпляра будут работать в одно и то же время, и оба они будут делать эту магию. Есть ли способ гарантировать, что функция Start()
работает только на один экземпляр этих текстов подражателей?
Итак, вы говорите, что я должен поместить этот материал в метод 'static', вызывать его в одной из моих функций' Start() ', что было так же, как сейчас? – hei
Да, ваш код будет работать, чтобы быть немного более аккуратным. Я бы переместил его на статический метод и назову его из 'Start()'. – AxelWass
Только что и да, это работает. Спасибо за вашу помощь. – hei