c# - Coroutine doesn't complete its execution every time -


i have following code using make user fly while , down.

void booster() { startcoroutine (booster (airtime)); }  ienumerator booster(float airtime) { isjumping = true;   var e = sphere.localeulerangles;  e.x = 0;  e.y = 0;  sphere.localeulerangles = e;  float startposy = -0.24f;  float finalposy = -0.24f + 2.5f;  float xstartangle = 0;  float xendangle = 90f;  float timer = 0f;  float timejump = animtime*2.5f;  while (timer <= timejump)   {      timer += time.deltatime;      float ypostemp = 0;      float xangletemp = 0;      ypostemp = mathf.lerp(startposy,finalposy,timer/timejump);      xangletemp = mathf.lerp(xstartangle,xendangle,timer/timejump);      var s = sphere.localposition;      s.y = ypostemp;      sphere.localposition = s;      var = sphere.localeulerangles;      a.x = xangletemp;      sphere.localeulerangles = a;      //debug.log("player angles: " + sphere.localeulerangles);      yield return null;  }  timer = 0f;  while (timer <= airtime)   {      timer += time.deltatime;       yield return null;  }  timer = 0f;  var hitcolliders = physics.overlapsphere(sphere.position, 10);  int = 0;  //time.timescale = 1.25f;  while (hitcolliders [i].name == "track_tiny")   {      += 1;  }  print(hitcolliders[i].name);  hittile = hitcolliders[i].gameobject;  debug.log("position: " + hittile.transform.parent.gameobject.transform.localposition + "angle: " + hittile.transform.parent.gameobject.transform.localeulerangles);  for(int j = 0; j < gamemanager.gamecubes.count;j++)  {      if(hitcolliders[i].name == gamemanager.gamecubes[j].name)      {          spawnchecker = j + 1;          break;      }  }  float zstartangle = hittile.transform.parent.gameobject.transform.localeulerangles.z;  float zstartpos = hittile.transform.parent.gameobject.transform.localposition.z;  float zendpos = transformparent.localposition.z;  float zendangle = sphere.localeulerangles.z;  if((zstartangle - zendangle) > 0)  {      if((zstartangle - zendangle) > 180)      {          zstartangle = -(360 - zstartangle);      }      else if((zstartangle - zendangle) <= 180)      {          zstartangle = zstartangle;      }  }  else if((zstartangle - zendangle) < 0)  {      if((zendangle - zstartangle > 180))      {          zendangle = -(360 - zendangle);      }      else if((zendangle - zstartangle) <= 180)      {          zendangle = zendangle;      }  } 

any suggestions welcome. thank you.

i wouldn't recommend naming functions same. i'm saying because unity able stop coroutine stopcoroutine(booster()) (which find strange). don't know unity doing under hood, though. also, on line:

while (hitcolliders [i].name == "track_tiny")  

check [i] not go above or equal hitcolliders.length.


Comments

Popular posts from this blog

sql - VB.NET Operand type clash: date is incompatible with int error -

SVG stroke-linecap doesn't work for circles in Firefox? -

python - TypeError: Scalar value for argument 'color' is not numeric in openCV -