Unity備忘録31頁目「親子関係と回転制御」

江上宿六です。

 

少々記しておきたい感じの手法がいくつかあるのでやっていこうかと。

それにしてもUnityは色々と用意されすぎてて必要な処理を探したりするのが大変で。

とは言えググればだいたいすぐ見つかる良い時代です。

・オブジェクトの親子関係

恐らくですけど、むき出しのモデルをシーンに配置してプレイヤーとして扱うのは

管理的に無理があると思うんです。 この後キャラに武器やアイテムを持たせたり

する事を考えるとヒエラルキーも大変な事になりそうなので一纏めにします。

 

特に難しい事はなく、Create→CreateEmptyで空のオブジェクトを作り、そこに

モデルデータをドラッグ&ドロップし、親子関係を作ります。 もしかしたら

プレハブ化したやつを渡す方が良いかもとは思ったり。

 

この空のオブジェクトをプレハブ化してInstantiateするのはまた別の話として。

キャラを制御するスクリプトのアタッチ先についても再考する必要があるかと。

上記にもある通り物を持たせたりするなら、親オブジェクトの方にスクリプト

アタッチする方が制御しやすいと思うんです。 なのでそうします。

f:id:y6yegami:20181211153501p:plain

実行すると色々とエラーが出ます。 親オブジェクトにはAnimatorが無いので

参照が出来ないのは当然ですね。 なので子オブジェクトであるモデルのAnimatorを

指し示すようにスクリプトを書き換えましょう。

f:id:y6yegami:20181211153941p:plain

transform.GetChild(0)とする事で子オブジェクトを取得出来ます。

このGetChildに渡している数字は子の番号で、ヒエラルキーでの並び順から

番号が割り当てられるものだと思います。

f:id:y6yegami:20181211154720p:plain

こういう場合ならこういう感じになるハズです。 なので親オブジェクト内で

子オブジェクトを消したり生成したりというのは控えた方が良さそうな気がします。

 

・スティックでキャラ回転

スティックでキャラを回転させられたら素敵ですよね、よくある操作ですけど。

過去にスティックの制御はやりましたが、軽く振り返るとInput.GetAxisに

Edit→ProjectSettings→Inputで開くInputManagerに登録されている名前を渡す

という感じのものでした。 早速それっぽい事を書いてみましょう。

f:id:y6yegami:20181211161419p:plain

float型のst_h,st_vにはそれぞれ-1.0~1.0の値が入ります、簡単ですね。 これを

どのようにしてキャラの向きに利用するかというと、クォータニオンを使います。

f:id:y6yegami:20181211162154p:plain

まずMathf.Absを使ってそれぞれの絶対値が0.2fより大きいか判定しています。

これはスティックが離されている状態の時に処理を行わないためのものですね。

 

次にlookにst_hとst_vを用いたVector3を入れています。 こうすることで

スティックがどの方向にどれだけ傾いたかを表すベクトルを作る事が出来ます。

xとzに値を入れているのはy軸が基軸になっているからですね。

 

そしてtransform.rotationにQuaternion.LookRotation(look)を入れます。 

これは指定したベクトルの方向にオブジェクトを回転させるという感じのやつです。

よってスティックの倒された方向を向いてくれます。

f:id:y6yegami:20181211183644g:plain

せっかく作ったUIは活用されていませんが、スティックで回転してくれています。

ただこれだとカメラの向きが変わった時に正しく回転してくれないというか、

単にカメラが回転してる分だけズレるというワケですね。 次回その辺を色々と

試してみたいと思います。