// to に向かって今の位置から t 秒で進む // 速度調整するときは t を調整すれば良い public IEnumerator move(Vector3 to, float t) { float buffer = 0f; // getIntervalに渡すやつ // 動きが終わるまでは while から抜けないこと while (true) { // 各オブジェクトを目標位置に動かす for (int i = 0; i < geneSize; i++) { gameObjects[i].GetComponent <AMElement>().moveWith(to + i * (new Vector3(cubeSize, 0, 0)), t); } // 目的地にいけてるなら終了フラグを立てる if (gameObjects[0].GetComponent <AMElement>().progress == 1) { for (int i = 0; i < geneSize; i++) { gameObjects[i].GetComponent <AMElement>().progress = 0; } Debug.Log("finish!"); yield break; } yield return(new WaitForSeconds(AMCommon.getInterval(interval, ref buffer))); } }
// 配列で指定されたオブジェクトを t 秒間点滅させる public IEnumerator blink(int[] v, float t) { if (v == null) { yield break; } float buffer = 0f; // getIntervalに渡すやつ while (true) { for (int i = 0; i < v.Length; i++) { gameObjects[v[i]].GetComponent <AMElement>().blinkWith(t); } // 点滅が終了したら終了フラグを立てる if (gameObjects[v[0]].GetComponent <AMElement>().progress == 1) { for (int i = 0; i < v.Length; i++) { gameObjects[v[i]].GetComponent <AMElement>().progress = 0; } Debug.Log("finish!"); yield break; } // 10 は適当 yield return(new WaitForSeconds(AMCommon.getInterval(10 * interval, ref buffer))); } }
// 交差専用 // 同時に複数の GenePieces と頭を自然消滅させる private IEnumerator fadeOut(GameObject face, GameObject[] gps) { float fadeTime = 0.2f / vp.playSpeed; float currentRemainTime = fadeTime; float interval = AMCommon.interval; int sz = gps.Length; float buffer = 0f; // getIntervalに渡すやつ while (true) { currentRemainTime -= interval; // Debug.Log(currentRemainTime); if (currentRemainTime <= 0f) { Destroy(face); for (int i = 0; i < sz; i++) { gps[i].GetComponent <AMGenePieces>().delete(); Destroy(gps[i]); } yield break; } float alpha = currentRemainTime / fadeTime; face.GetComponent <AMElement>().setAlpha(alpha); for (int i = 0; i < sz; i++) { gps[i].GetComponent <AMGenePieces>().setAlpha(alpha); } yield return(new WaitForSeconds(AMCommon.getInterval(interval, ref buffer))); } }
// オブジェクトを t 秒の間点滅させる public IEnumerator blink(float t) { float buffer = 0f; // getIntervalに渡すやつ while (true) { GetComponent <Renderer>().enabled = !GetComponent <Renderer>().enabled; blinkElapsed += 10 * interval; if (blinkElapsed > t) { blinkElapsed = 0; GetComponent <Renderer>().enabled = true; yield break; } else { yield return(new WaitForSeconds(AMCommon.getInterval(10 * interval, ref buffer))); } } }
// to に向かって今の位置から t 秒で進む // 速度調整するときは t を調整すれば良い // 単体で動かす場合はこちらを使う // AMGroup に動くのを任せる場合は moveWith を使う public IEnumerator move(Vector3 to, float t, bool mode) // mode false: Linear, true: Nonlinear { if (t == 0) { transform.position = to; yield break; } float buffer = 0f; // getIntervalに渡すやつ while (true) { // 目的地にいけてるなら終了フラグを立てる if (mode ? moveWithNonlinear(to, t) : moveWithLinear(to, t)) { progress = 1; transform.position = to; // 行き過ぎを修正 (cexen) yield break; } yield return(new WaitForSeconds(AMCommon.getInterval(interval, ref buffer))); } }