Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。0今回はUnityでゲームオブジェクトの回転について見ていきます。UnityのインスペクタではTransformのRotationでゲームオブジェクトの角度を見る事が出来ますが、これはオイラー角を表しています。Unityの内部ではQuaternion型で角度の処理をしています。Quaternion型の数値は人が見てすぐにわかる数値ではないのでインスペクタではオイラー角で表示されています。マニュアルは、Unityの使い方を学ぶ手助けとなります。ゲームを作成したり、ゲーム以外のアプリを作成したりして多くの経験を積みましょう。docs.unity3d.comUnityのスクリプトリファレンスを見てください。Unityのスクリプトでもオイラー角をQuaternion型へと変換しそれをキャラクターの角度に設定したりと必ず変換をして角度を変更しています。使用するのがQuaternion.Eulerで指定したオイラー角をQuaternion型に変換します。0)ではXを0、Yを90、Zを0のオイラー角をQuaternion型に変換し利用しています。スポンサーリンクゲームオブジェクトを回転させるゲームを本格的に制作していくとゲームオブジェクトの角度を扱う場面によく遭遇する事になります。主人公キャラを敵キャラの方に向かせたい、主人公キャラと敵キャラの位置の角度の計算をしたいといった場面です。これらの処理はtransform.LookAtやVector3.Angleを用いて機能を作成する事が出来ます。Unityで滑らかにターゲットの方向を向くようにするUnityで武器を構えた時にターゲットである敵の方向に滑らかに回転し、敵の方向に体を傾ける方法を簡単にしてみました。19:47他には、あるゲームオブジェクトを他のゲームオブジェクトからの角度で相対的に変更したい場面があります。現在の角度の状態から新しい角度回転させるという場合です。文章を見ても解り辛いですね・・・・(^_^;)ゲームオブジェクトを回転させるサンプル試しにサンプルを作成し実行してみましょう。↑のように2つのCubeを作成し、回転するゲームオブジェクトをRotatingGameObject、回転角度用のゲームオブジェクトをRotationAngleとします。RotatingGameObjectは↑のような角度に設定しました。RotationAngleの角度は↑のようにしました。左がRotationAngleで右がRotatingGameObjectになります。次にスクリプトを作成し、マウスの左ボタンが押されるたびにRotatingGameObjectの角度をRotationAngleの角度分変更していきます。スクリプトはRotatingGameObjectゲームオブジェクトに設定します。RotationTestのインスペクタのobjにRotationAngleゲームオブジェクトをドラッグ&ドロップして設定します。obj.rotation;}}}元の角度から新しい角度の影響を与えるには元の角度に新しい角度をかけます。0)という角度が得られます。前の角度から90度回転させているのでこうなります。↑のスクリプトの例ではRotatingGameObjectゲームオブジェクトの角度をインスペクタで設定したobjの角度分回転させています。Quaternionの角度は掛けるとその分の回転結果が得られますが、オイラー角の場合はTransform.Rotateを使用します。Space.Self);でotherBaseの角度をobjのオイラー角分回転させます。第2引数がローカル(Space.Self)かワールド(Space.World)の角度で回転させるかの指定です。ローカルとワールドの部分で少し混乱しますが、ゲームオブジェクトを選択した時にUnityのツールバーでローカルとワールド座標を切り替えられますが、その状態で回転するかどうかです。ローカルだとそのゲームオブジェクトが向いている向きを軸として回転させますが、ワールドだとX、Y、Z軸は常に同じ方向を向いていてその向きで回転させます。今回の例ではotherBaseの角度をローカルで回転させています。ローカルとワールドどちらで回転させるかわからなくなった時はツールバーでローカル、ワールドの座標を切り替えて確認してみるとわかりやすいです。↑がワールド座標軸で表示した時で常に同じ方向を示しています。Space.Worldを選択した場合はこの軸で回転させます。↑がローカル座標軸で表示した時でそのゲームオブジェクトのローカルの方向軸を示しています。Space.Selfまたは何も設定しない時はこの方向軸で回転させます。それでは実行してみましょう。↑のように元のゲームオブジェクトが自身の角度からRotateゲームオブジェクトの角度分回転していきます。結局このサンプルのような事は何に使えるんだ!?という声も聴こえてきそうですが・・・。キャラクターの向いている角度に合わせてそのゲームオブジェクトの角度を回転させたい時などです。20:34の当たりでこの角度の掛け算を利用しています。角度にベクトルをかけた場合は何が得られる?Quaternion型とQuaternion型をかけると最初の角度を次の角度分回転させた角度が得られますが、Quaternion型にVector3型の値をかけると何が得られるんでしょうか?Quaternion型にVector3の値をかけるとその角度方向のベクトル値(Vector3)が得られます。試しにメインカメラにスクリプトを取り付け検証してみます。2f)をかけて出力しています。出力した値だけでは解り辛いのでUpdateメソッドでメインカメラから角度にベクトルをかけた方向に線を引いてわかりやすく表示します。↑のように角度にベクトルをかけるとその角度のベクトルが得られる事がわかります。1f)の長さの2倍のベクトルです。2f)の方向ベクトルをかけるとメインカメラの前方のベクトルが得られます。2f)のベクトルが求められます。↑のような感じですね。Debug.DrawRayでレイを視覚化しているのは長さが1mなので実際にはあと1m先が計算で求められる位置です。Debug.DrawRayの長さも2にすればよかったかも・・・・(-_-)終わりに今回角度について取り上げたのは自分がいまいちわかっていなかったからです。結局の所いまいちわかっていない状態は変わっていないですが・・・・(^_^;)元の角度から回転させたい時も出てくると思うのでそんな時にこの記事が役立つかもしれません(謎)わたくしは以前からオイラー角を足して計算した結果をそのままオイラー角に入れたり、Quaternion型に変換して角度を変更していますが、オブジェクトを回転させる時はTransform.Rotateを使った方が良さそうですね。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。サイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事への質問はコメント欄にお願いいたします)。kamekumechan@gmail.comいずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;)名前の由来はカメが好きだからです。Д`)シクシク...お知らせ2020/01/18個人的にUnity2019.2.18f1をインストールしました。2020/01/01あけましておめでとうございます。(^^)/ユニティちゃんのRPGを作ってみようのPartyStatusスクリプトでpartyMembersのListの型がCharacterStatusとなっていたのでAllyStatusに変更しました。変更したというか、元々AllyStatusに書き換える前のスクリプトを掲載していたので修正しました。ユニティちゃんのRPGを作ってみよう10ーコマンド画面の作成とステータスの表示ーユニティちゃんのRPGでコマンド画面の作成とステータスコマンドを作成し、選択したキャラクターのステータスを表示するようにしていきます。20:00GetPartyStatusメソッドの戻り値もそれに伴って変更しています。2018/08/07コメント欄へのわたくしの返信は停止しております。わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._.)またブログの最初の方の機能を積み上げていく記事に関しての疑問点は当ブログ記事のスクリプトの説明と寄せられた質問への回答Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。21:41も参照してみてください。コメントの返信はありませんが、回答は記事に反映されている可能性があります。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。Unityを使った3Dゲームの作り方(かめくめ).。