Я запускаю сопрограмму, в которой манипулируют игровые материалы GameObject's children.saders. Я просто не могу понять, как заставить меня ждать, пока все материалы не достигнут желаемого уровня смешивания, прежде чем переходить к следующему шагу. Все работает отлично, мне просто нужно, чтобы сопрограмма не продолжалась до строки 28 до тех пор, пока все материалы не будут изменены. Есть предположения?Нужна помощь Уступка Coroutine
public GameObject changeInto;
private bool coroutineStarted = false;
private Renderer[] renderersArray;
private List<Material> materialsList = new List<Material>();
private GameObject newForm;
void Start(){
renderersArray = this.gameObject.GetComponentsInChildren<Renderer>();
}
void Update(){
if(!coroutineStarted){
coroutineStarted = true;
StartCoroutine(Change());
}
}
private IEnumerator Change(){
foreach(Renderer renderer in renderersArray){
for(int i = 0; i < renderer.materials.Length; i++){
if(renderer.materials[i].shader.name == "Toon/Basic Blender"){
materialsList.Add(renderer.materials[i]);
}
}
}
foreach(Material material in materialsList){
StartCoroutine(ChangeToWhite(material));
}
animation.Play("Evolution");
newForm = Instantiate(changeInto, this.transform.position, this.transform.rotation) as GameObject;
yield return null;
}
private IEnumerator ChangeToWhite(Material mat){
float counter = mat.GetFloat("_Blend");
while(counter != 1f){
float increase = mat.GetFloat("_Blend") + 0.01f;
mat.SetFloat("_Blend", increase);
counter += increase;
yield return null;
}
}
Так вы предполагаете, что в части ... 'в то время как (! Счетчик = 1f)' ... добавить некоторый фактор времени.deltaTime? –
Думаю, я должен был сказать это в OP, но я знаю, где должен быть урожай, я просто не уверен, какими должны быть критерии. Например ... в то время как x истинно, возвращает доход null ... и т. Д. ... –
Я обновил ответ с точным кодом, который вам нужен. –