こんばんは、いまだにはてなブログについてよくわかってないzankです。
今回はユニティちゃんにカメラを追従させていこうと思います。
前回から話が続いているため、もしその3を見てない方はこちらをお先にお読みください。
思った以上に長くなったので、本来やるはずだったモーションの追加に関しては次回やります。
さて、前回ユニティちゃんを動かすことができようになりましたが、カメラは固定されたままです。
基本的にゲームではカメラはプレイヤーに追従している(TPSなど)、又はプレイヤーの目線がカメラになっている(FPSなど)ことが多いです。
なのでユニティちゃんにカメラを追従させてみましょう。
スクリプトを使った方法もありますが今回はスクリプトを使わない比較的簡単な方法を紹介します。
(まぁ後々スクリプトを使ってやると思いますが)
まずはMain CameraをクリックしInspector内のAdd ComponentからCamera-Controlを選択します。
そうするとSmooth Followというものが出てくるのでクリックします。
するとこのようなものがMein CameraのInspectorに追加されますのでTargetにunitychanを入れましょう。
これは上から説明していきますと、
- Target 追従するオブジェクトの指定(右端から選択またはヒエラルキーから ドラッグ&ドロップ)
- Distance Targetからの距離
- Height Targetからの高さ
- Height Damping 高さの調整の速さ
- Rotation Damping 回転の調整の速さ
- Look At Angle カメラのアングルをTargetを中心に横回転
となります。
早速いろいろいじりながらカメラがどのように動くのか見てみましょう。
Hight=2
Hight=0
あれ思ったようにカメラが追従しないぞ?
いろいろいじってみましたが自分の思っているような目線にはならない。
しばらく悩んだ結果、問題はカメラの中心点はユニティちゃんの足元になっているからではないか?という結論に達しました。
でもそれがわかったからってどうしろというのか。
これを解決するためのとっかかりは中心点が足元にあるならそれを上にあげてしまおうということです。
そのためにはどうするのか?
ユニティちゃんを親オブジェクトにしてユニティちゃんの子オブジェクトにカメラを追従させるという方法です!!
今回初めて出てきましたオブジェクトの親子関係
一体どのようなものかというと、
このような形になっているものです。
これは子にしたい方を親にしたい方にドラッグ&ドロップしてもらえばできます。
いったいどのような効果があるのかというと
親は子の影響を受けないが、子は親の影響を受けます。
つまり親が動くと子は勝手に動いてくれます。
このことを理解した上で実際にユニティちゃんに子オブジェクトを追加してみます。
画像では見えませんがunitychanを選択しながらCreate Empty Childを選択するとユニティちゃんに子オブジェクトが追加されます。
追加されたオブジェクトの名前をとりあえずcamera pointと名付けておきます。
次にcamera pointの高さをユニティちゃんの顔付近に合わせます
次にMain CameraのSmooth FollowのTargetを変更します。
後は細かな数値をいじっていくと大丈夫なはずですが実際に動かしてみましょう。
ちゃんとうまくいきました
(なんか後ろに見えてるのはoyaとkoなので気にしないでください。)
まだカメラが正面しか向いていないという欠点はありますが、
後は実際にステージを作った後でスクリプトで調整すれば大丈夫のはず・・・
話は変わりますが、
これの調整しているときに気付きましたことがあって、それはまだユニティちゃんに当たり判定などをつけていなかったということです。
それの何が問題化というと
床がなくなっても落ちませんし、
壁はすり抜けます。
完全に忘れていました。
本来なら前回に終わらしておくべきなのに完全にど忘れです。
というわけでモーションの追加の代わりにこちらを説明していきます。
まずunitychanを選択しInspector内のAdd ComponentからPhysicsをクリックし、Character Controllerを選択します
(Physicsは非常によく使います)
するとInspector内にこのようなものが追加されます。
これの各値の説明をしますと、
- Slope Limit 移動可能な傾斜の限界値の設定
- Step Offset 移動可能な段差の限界値の設定
- Skin Width コライダー(当たり判定やトリガーの図形)がどれくらいめり込めるかの限界値の設定
- Min Move Distance 移動を行う最小値
- Center 当たり判定の中心位置
- Radius 当たり判定の半径
- Height 当たり判定の高さ
以上のようになりますが基本的に下3つを使います。
初めではこのようにカプセルみたいなのが下の方にあります。
これがコライダーであり当たり判定になります。
なのでこれをうまいこと数値をいじってユニティちゃんを包むようにします
これの数値は何度も実際動かしてみて地面との接触に違和感がなかったらいいと思います。(コライダーが下の方にあると床から浮いて動きます)
これで当たり判定の設定が完了したので、このユニティちゃんは宙を歩いたり、壁をすり抜けたりしないので、どのゲームに出してもちゃんと動きます。(モーションは走るしかないですが)
以上でユニティちゃんにカメラを追従させ、当たり判定をつけることが完了しました。
今回は初めて使う機能があったので(Smooth Followのことです)説明に少し時間がかかってしまいました。
こんなことなら素直にスクリプトでやればよかったかもと思っています。
実際カメラで実装しなきゃいけないこともまだ残っていてどうしようかと考え中です。
基本的に私の記事はテーマは決めますが、そこから思いついたまま適当に書きなぐっているため、計画性というものが一切ありません。
カメラの追従についてもとりあえず初めて見る方法だし実装してみよう、と思ってやったら問題があったけどもう実装したし、直すのめんどくさいからあとで直そうという適当っぷりなので、後々やばいことになりそうな気がしてます。
次回はユニティちゃんにモーションを追加していきます。
アニメーションとスクリプトの説明が入るので次回は結構長くなっちゃうかもしれません。(この予告は変更される可能性があります)
それでは今回結構グダってしまいましたがどうでしょうか。
わかりにくかったり、思っていた追従ではなかったとかいろいろあるかもしれませんが、今回の内容は人によっていろいろな実装方法があるため、頑張って自分が望んだ方法をしているところを見つけるのは根気がいります。
なので、とりあえず簡単な方法で実装して、後でUnityについてわかってきたあたりに自分で直すのが一番いいと思います。
後書きが長くなってしまいました。
それでは皆さんまた次の記事でお会いしましょう。
次の記事
カメラ修正