ユーザがボタンをクリックしたときに一定量だけオブジェクトを回転させるUnity 5 GameObjectにスクリプトが添付されています。ローテーションはコルーチンで実行され、時間の経過と共に円滑に実行されます。Unityコルーチンの予期せぬ制御フロー(完了検出中)
最初に完了するまで、同じオブジェクトの別の回転を実行しないようにユーザーをブロックします。これを行うために、コルーチンの開始時にtrueに設定されたisRotating
ブール値を追加しました。コルーチンがローテーションを完了したときにfalseに設定されています。
using UnityEngine;
using System.Collections;
public class ObjectScript : MonoBehaviour {
private bool isRotating = false;
/* Rotate the object 90 degrees around the x axis centered on the origin */
IEnumerator RotateObject() {
isRotating = true;
var updateRotation = 0.0f; // amount to rotate this tick
for (var totalRotation = 0.0f; totalRotation <= 90.0f; totalRotation += updateRotation) {
updateRotation = 90.0f * (Time.deltaTime/0.5f);
if (totalRotation + updateRotation > 90.0f) {
updateRotation = 90.0f - totalRotation;
}
transform.RotateAround (Vector3.zero, Vector3.right, updateRotation);
yield return null;
}
isRotating = false; // This line is never reached
}
void Update() {
if (Input.GetKeyDown(KeyCode.X) && !isRotating) {
StartCoroutine (RotateObject());
}
}
}
私の問題は、isRotating = false
ラインに到達されることはありませんということですコルーチンは、オブジェクトを回転させ終えた後でも、そうisRotating
はtrue
にセットしたままで、次のようにコードがあります。 (私は決してヒットしないライン上にデバッグブレークポイントを置くことでこれをチェックしました)。オブジェクトが一度回転すると、再び回転することはありません。
なぜコントロールがループ本体の外部の行に到達しないのですか?
? –
@CùĐứcHiếu申し訳ありませんが、カットアンドペーストのエラーだったので、私はリストを更新しました。 –