Вы можете добавить логическую переменную в первый скрипт, после завершения вызова функции Sunglasses
установите для нее значение true
.
Script1:
public bool isDone = false;
public IEnumerator Sunglasses()
{
// Do stuff
isDone = true;
}
Script2:
Затем в вашем Script2 вы можете сделать свою функцию Start
функцией сопрограммы или IEnumerator
вместо функции void
.После этого вы можете подождать, пока isDone
будет истинным в каждом кадре.
public bool isDone;
Script1 script1Ref;
public IEnumerator Start()
{
GameObject s1Obj = GameObject.Find("GameObjectScript1IsAttachedTo");
script1Ref = s1Obj.GetComponent<Script1>();
//Wait here until we are done
while (!script1Ref.isDone)
yield return null;
//Done Waiting, now continue with the rest of the code
Function1();
String blah = "Things";
Function2();
StartCoroutine(Routine2());
StartCoroutine(Routine3());
}
Наконец, если вам также необходимо убедиться, что Script1 работает перед тем, как что-то делать в функции Update
Script2,просто проверьте переменную isDone
и верните, если она все еще false
.
void Update()
{
//Return if script 1 is not done
if (!script1Ref.isDone)
return;
//The rest of your code below
}
Обратите внимание, что вы хотите, чтобы StartCoroutine(Routine3())
ждал, пока StartCoroutine(Routine2())
не будет сделано, вы должны вернуть его,
Заменить StartCoroutine(Routine3())
на yield return StartCoroutine(Routine3())
.