Написал следующее запуская новую корутину из старой.
Синтаксис:
Используется csharp
void Start
{
StartCoroutine(Man5Updator());
}
IEnumerator Man5Updator()
{
if (transform.position != targetPos)
{
Man5Anim.SetBool("Walk", true);
Man5Navi.SetDestination(targetPos);
}
else
{
Man5Anim.SetBool("Walk", false);
}
//и сдесь еще куча разных проверок которые должны происходить как в Update
yield return new WaitForSeconds(0.5f);
RepCourMan5();
yield break;
}
public void RepCourMan5()
{
StartCoroutine(Man5Updator());
}
{
StartCoroutine(Man5Updator());
}
IEnumerator Man5Updator()
{
if (transform.position != targetPos)
{
Man5Anim.SetBool("Walk", true);
Man5Navi.SetDestination(targetPos);
}
else
{
Man5Anim.SetBool("Walk", false);
}
//и сдесь еще куча разных проверок которые должны происходить как в Update
yield return new WaitForSeconds(0.5f);
RepCourMan5();
yield break;
}
public void RepCourMan5()
{
StartCoroutine(Man5Updator());
}
Мне человек на другом форуме предложил заменить конструкцию на
Синтаксис:
Используется csharp
void Start
{
StartCoroutine(Man5Updator());
}
IEnumerator Man5Updator(Animator Man5Anim)
{
var wait = new WaitForSeconds(0.5f);;
while(true) {
if (transform.position != targetPos)
{
Man5Anim.SetBool("Walk", true);
Man5Navi.SetDestination(targetPos);
}
else
{
Man5Anim.SetBool("Walk", false);
}
yield return wait;
}
}
{
StartCoroutine(Man5Updator());
}
IEnumerator Man5Updator(Animator Man5Anim)
{
var wait = new WaitForSeconds(0.5f);;
while(true) {
if (transform.position != targetPos)
{
Man5Anim.SetBool("Walk", true);
Man5Navi.SetDestination(targetPos);
}
else
{
Man5Anim.SetBool("Walk", false);
}
yield return wait;
}
}
Но к сожалению он не обяснил как она работает, я понимаю как работает цыкл, но не понимаю что дает yield return wait; и var wait = new WaitForSeconds(0.5f); Это перезапускает корутину?
Еще он мне сказал что я пложу новые корутины занимая память, но я думал что в моем варианте старая корутина исчезает после запуска новой после return break;
Пожалуйста объясните мне как правильно с этим работать.