Unity C#でオブジェクトを90°回転させるプログラムの書き方と修正ポイント

C言語関連

Unity C#でオブジェクトを右矢印キー(→)を押すと90°回転させるプログラムを作成する際、動作しない問題が発生することがあります。この記事では、そのプログラムの修正方法と動作しない原因を解説します。

プログラムの問題点

最初に記載されたコードには、いくつかのエラーがあります。特に重要なのは、条件式で`KeyCode.RightArrow && transform.localRotation.y < 90`の部分です。これは論理的に間違っており、`&&`演算子で両方の条件が同時に評価されるため、予期しない結果を生むことになります。

この問題を解決するには、条件式を修正し、正しい論理演算を行うようにする必要があります。

正しいコードの書き方

右矢印キーが押された場合にオブジェクトを90°回転させるプログラムを作成するためには、以下のようにコードを修正します。

if (Input.GetKey(KeyCode.RightArrow) && transform.localRotation.eulerAngles.y < 90) {
transform.Rotate(0, 1, 0);
}

この修正点は、`transform.localRotation.eulerAngles.y`を使って、オブジェクトのY軸回転を扱う点です。`localRotation`はQuaternion型であり、直接比較することができません。そこで`eulerAngles`を使って、回転角度を直感的に取得します。

←キー(左矢印キー)の処理

同様に、左矢印キー(←)を押したときにもオブジェクトを回転させたい場合、以下のようにコードを修正します。

if (Input.GetKey(KeyCode.LeftArrow) && transform.localRotation.eulerAngles.y > -90) {
transform.Rotate(0, -1, 0);
}

ここでも同様に、`eulerAngles`を使ってオブジェクトのY軸回転を正しく比較しています。

回転角度の制限について

上記のコードでオブジェクトは90°回転しますが、この回転はあくまで連続的に行われます。例えば、オブジェクトが90°を超えて回転し続けてしまう場合があります。このような動作を防ぐためには、回転角度の制限を追加することが重要です。

例えば、回転が90°を超えないように制限を設けるには、次のようなコードを追加できます。

if (transform.localRotation.eulerAngles.y >= 90) {
transform.localRotation = Quaternion.Euler(0, 90, 0);
}

まとめ

Unity C#でオブジェクトを90°回転させるプログラムを書く際、条件式の論理演算が間違っていると正しく動作しません。修正後、`eulerAngles`を使用して回転角度を適切に比較することで、正しく動作するようになります。また、回転角度を制限することで、オブジェクトが必要以上に回転するのを防げます。

コメント

タイトルとURLをコピーしました