質問: false; } Debug.Log(z); } ```
回答: 現状のコードに複数点問題があります 1. rightがtrueになった後falseにならない 角度チェックを行ってright変数にfalseを入れている箇所が、`if (right == true)` に対応する `else if` 内で行っている為現状絶対にrightがfalseになることはありません 2. 角度の判定に負の値を使用している UnityのEulerAngles系で角度を取得すると0~360と正の数値で帰ってくるため-90になることがありません。 180度を超えている場合負の値に変換する処理を加える必要があります 上記を踏まえてコードを修正すると下記のようになります(これは一例です) ``` public float angle; public GameObject target; bool right; void Start() { right = true; } void Update() { float z = transform.localEulerAngles.z; // 180度を越えていた場合 -180~0 に変換 z = (z > 180) ? z - 360 : z; // 右回転処理 if (right == true) { Vector3 targetPos = target.transform.position; transform.RotateAround(targetPos, Vector3.back, angle * Time.deltaTime); // -90度を下回っていれば左回転開始 if (z <= -90) { right = false; } } // 左回転処理 else if (right == false) { Vector3 targetPos = target.transform.position; transform.RotateAround(targetPos, Vector3.forward, angle * Time.deltaTime); // 90度を越えていたら右回転開始 if (z >= 90) { right = true; } } Debug.Log(z); } ```