Сопрограммы с выходом новой waitforseconds(); перейти к исполнению других функций?
Я использую несколько сопрограмм следующим образом
Script1:
Считывает входные значения x,y,z и т. д.
передает значения x и there в script2 для выполнения одно за другим
Script2:
функция получает эти значения и проверяет для каждого, если это x с положительными значениями, она вызывает XPOS coroutine else, если y .....
затем эта сопрограмма перемещает объекты соответствующим образом, но когда она достигает yield return new WaitForSeconds(0.2 f); она возвращается к Script1 и начинает выполнение следующего шага, а затем возвращается и начинает выполнение после yield return new WaitForSeconds(0.2 f); . Если Script1 является finish, то сопрограммы переключаются друг с другом во время yield return new WaitForSeconds(0.2 f);
ниже приведены коды, которые я использую;
Код Script2: получение значений из Scipt1 и вызов сопрограммы для каждого из них
private void ObjSupport_PositionArrived(string Coordinate, double Value) { Debug.Log("Cordinate" + Coordinate); Debug.Log("Value" + Value); float ivalue = (float)Value; switch (Coordinate) { case "X+": { if (ivalue == 0) { } else { StartCoroutine("FuncXPlus", ivalue); } } break; case "X-": { if (ivalue == 0) { } else { StartCoroutine("FuncXMinus", ivalue); } } break; case "Z+": { if (ivalue == 0) { } else { StartCoroutine("FuncZPlus", ivalue); } } break; case "Z-": { if (ivalue == 0) { } else { StartCoroutine("FuncZMinus", ivalue); } } break; }
После этого следуют функции сопрограммы
IEnumerator FuncZPlus(float ivalue) { Vector3 Beemposition = Beem.transform.localPosition; float BeemCurrentXpos = Beemposition.y; Beemposition.y = Mathf.Clamp(Beemposition.y + ivalue, 0.04f, 0.07f); while (BeemCurrentXpos <= Beemposition.y) { BeemCurrentXpos += 0.0001f; Vector3 posX = new Vector3(Beemposition.x, BeemCurrentXpos, Beemposition.z); Beem.transform.localPosition = posX; yield return new WaitForSeconds(0.2f); } } IEnumerator FuncZMinus(float ivalue) { Debug.Log("FunZMinus"); Vector3 Beemposition = Beem.transform.localPosition; float BeemCurrentYpos = Beemposition.y; Beemposition.y = Mathf.Clamp(Beemposition.y + ivalue, 0.04f, 0.07f); while (BeemCurrentYpos >= Beemposition.y) { BeemCurrentYpos -= 0.0001f; Vector3 posX = new Vector3(Beemposition.x, BeemCurrentYpos,Beemposition.z); Beem.transform.localPosition = posX; yield return new WaitForSeconds(0.2f); } } IEnumerator FuncXPlus(float ivalue) { Debug.Log("FunXplus"); Vector3 positionX = HeadRight.transform.localPosition; float CurrentXpos = positionX.x; positionX.x = Mathf.Clamp(positionX.x + ivalue, -0.02f, -0.002f); HeadRight.transform.localPosition = positionX; while (CurrentXpos <= positionX.x) { CurrentXpos += 0.0001f; Vector3 posX = new Vector3(CurrentXpos, positionX.y, positionX.z); HeadRight.transform.localPosition = posX; yield return new WaitForSeconds(0.2f); } } IEnumerator FuncXMinus(float ivalue) { Debug.Log("FunXminus"); Vector3 xposition = HeadRight.transform.localPosition; float CurrentXpos = xposition.x; xposition.x = Mathf.Clamp(xposition.x - ivalue, -0.02f, 0f); while (CurrentXpos <= xposition.x) { Debug.Log("X-While"); CurrentXpos -= 0.0001f; Vector3 posX = new Vector3(CurrentXpos, xposition.y, xposition.z); HeadRight.transform.localPosition = posX; yield return new WaitForSeconds(0.2f); } }
Что я уже пробовал:
Коды, которые я дал, - это то, что я пробовал