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
Post a Comment