Unityに関連する記事です

プレイヤーの移動させるための設計を考える

 CubeのゲームオブジェクトにPlayerの役割を与えるため、CapsuleCollierコンポーネントとRigidbodyコンポーネントをアタッチします。
CapsuleCollierの大きさは適宜変更します。
RigidbodyはConstraintsの設定内のFreezeRotationの各項目にチェックを入れて、移動時に倒れてしまわないようにします。 

 Rigidbodyによって重力の影響を受けるようになりますので、地面の役割を持つゲームオブジェクトとして
3D Object => Plane を選択してCubeの下に別のゲームオブジェクトを配置しましょう。
PlaneはBoxCollierを持っているので、これでCubeが重力の影響を受けたとしても、このPlaneが地面の役割を果たすことで無限落下を防ぐことが出来ます。

 このままですと真っ白な地面になってしまい、Cubeが移動しているのか判別が難しくなりますので、
Materialを1つ作成(あるいは適宜なものを用意)して、PlaneのMeshuRendererのMaetrialにアタッチしましょう。

 以上の準備が整ったら、新しくPlayerを移動させるスクリプトを作成し、Cubeにアタッチします。
スクリプト名はPlayerControllerにします。

 サンプルコードの実装例を記載します。

 <= +ボタンを押すと開きますので、自分なりの実装を行った上で確認をしてみましょう。


 CubeにアタッチするとMoveSpeedがインスペクター上にて設定可能になりますので、まずは500という数字を仮に入れておきましょう。
ここの数字はPlayerの移動速度になりますので、後々も調整可能な設計にしています。

問題点の検証

 上記の方法でCubuは無事にPlayerとしての役割を持ち、移動をすることが出来ました。
ただし、いくつか残念な点があることに気づきましたでしょうか。

  Cubeが移動をしても、Cubeが移動に合わせて方向転換していない。
 ◆.メラが固定位置になってしまっており、Cubeのみが移動してしまう。

 問題が発生した場合には、すべてを一度に直そうとするのではなくて、1つずつ順番に解決をしていくように
問題点を切り離して考えていくようにしましょう。

プレイヤーの向きの修正

 Cubeが移動をしても、Cubeが移動に合わせて方向転換していない。
 
 先ほどまでに用意したプログラムには「方向転換」させる処理がありません。
ユーザーは右方向の入力をしたら、Playerにも右方向を向いてほしいと期待しますので
こちらの実装を考えていきましょう。

 Playerの移動がゲームオブジェクトの位置情報(TransformのPositon)を変更する、という処理であったように
Playerの方向を変えるという処理も、同じような観点で検討していくと
ゲームオブジェクトの回転情報(TransformのRotation)を変更する、という処理が「方向転換」ということになりそうです。

 すでに移動の処理は実装済ですので、同じスクリプトに「移動に合わせて、回転情報を変更する」という処理を追記していきましょう。
他にも方法はありますが、今回はすぐに回転して向きを切り替えてしまうのではなく、なめらかに方向転換をさせる処理を考えて実装していきます。

 サンプルコードの実装例です。

 <= +ボタンを押すと開きますので、自分なりの実装を行った上で確認をしてみましょう。

カメラの追従

◆.メラが固定位置になってしまっており、Cubeのみが移動してしまう。

 こちらの処理も実装されていない処理ですから、カメラの位置は固定です。
そのため、当然ながらCubeの移動に合わせて自動的にカメラは追いかけてはくれません。

 ユーザーはプレイヤーが移動する際、どういった挙動を期待するでしょうか。
恐らく、プレイヤーがいる位置を中心として、常にカメラがPlayerをフォーカスしている状態で
Playerに合わせて画面が動いていってくれるというものを想像し、期待すると思います。

 考え方としては、Playerのゲームオブジェクトを常に一定の位置で追いかけてくれるカメラが理想的でしょう。
そのため、MainCaeraオブジェクトにも、スクリプトを作成して、それをアタッチするようにします。
このスクリプトの役割は「あるゲームオブジェクト(今回はPlayer)をカメラのフォーカス先として認識させて、そのゲームオブジェクトを追いかけるようにする」というものです。
 
 こうすればPlayerが移動するだけで、自動的にカメラも動いてくれるようになりますね。

 サンプルの新規スクリプトの実装例です。クラス名はCameraControllerにしています。

 <= +ボタンを押すと開きますので、自分なりの実装を行った上で確認をしてみましょう。

作成したらMainCameraにアタッチし、インスペクター上にて追従する対象としてCube(Player)をアサインしましょう。

CubuのプレイヤーをUnityちゃんに変更

 ここまで問題なくできてきたら、実際にCubeをキャラクターモデルに変更して動かしてみましょう。

アセットストアよりUnityChanを検索して、Unityのプロジェクトにインポートします。
あるいは下記リンクの公式サイトから3Dモデルをダウンロードしてインポートします。

https://unity-chan.com/contents/guideline/
© Unity Technologies Japan/UCL



上記のスクショのようなフォルダ構成になると思いますので、UnityChanのプレファブをヒエラルキーにドラッグアンドドロップします。
Cubeにアタッチしていたコンポーネントを確認しながら、同じように設定をして、コライダーの形状などは適正な形状のものに変えていきましょう。

歩くアニメーションを同期


 UnityChanにはあらかじめ、いくつかのアニメーションが用意されています。
アニメーション同期の設計としては、キー入力の際には走る移動アニメーションを再生し
キー入力がない場合には待機アニメーションを再生するようにしたいと思います
それを念頭に設定をしていきましょう。

AnimatorControllerの作成と新しいState(待機用)の追加

初めからUnitychanについているAnimatorControllerではなくて、新しいAnimatorControllerを作成して、それを利用します。
今回はUnitychanSampleという名称にしておきます。(適宜変更してください。)

 新しく作成したAnimatorを開いて、新しいStateを作成します。Animatorシーン内で右クリックをして Create State を選択すると
New State が1つ作成されますので、名前をIdleに変更します。インスペクターを確認して、AnimationClipを WAIT00 に設定します。



この状態で再生すると、Unityちゃんのモデルが左右に伸ばしていた腕を下ろして立っている状態になると思います。これが待機用のアニメーションです。
 Entry というStateがありますので、こちらからIdleへとTransitionをつないでおきます。ゲーム実行と同時にEntryが走りますので
これで自動的にUnityちゃんのアニメーションは待機状態が同期されます。


移動用のStateの追加


 続いて、走る移動用のアニメーションですが、これにはUnityちゃんの方で用意してあるAnimationClipを利用します。
インポートしたUnity-chanフォルダの中からUnitychanLocomotionsというAnimatorControllerを探して、それを左クリックすると



AnimationシーンがそのAnimatorControllerの内容に切り替わります。この中に Locomotion というStateがありますので
その上で右クリックをしてCopyを選択します。これでStateのコピーが出来ましたので、先ほど作成した自分のAnimatorControllerを再度選択して
そのAnimationシーン内でPasteを選択すると、シーン内に Locomotion が追加されます。またParameterにもDirectionというFloat型の遷移設定値が追加されます。
 こちらのStateに対して、Idle => Locomotion とLocomotion => Idle へとTransitionを追加します。
各StateへのTransitionの遷移の設定についてはスクショを参考してください。





 AnimatorのTransitionの設定と、移動用に新しいParameterを作成しておきます。
ParameterはFloat型で用意して、名前を「Speed」にしておきます。Float型の場合には、Parameterの名前の横に小数点表示が出ます。
(なお、Trigger型は〇、Bool型は□のマークが表示されます。)








 アニメーションを同期再生すると、キャラクターを実際に操作していることがダイレクトにユーザーに伝わりますので
先ほどの移動用のスクリプトに、アニメーションを再生させる処理を追記していきましょう。

 実装例です。

 <= +ボタンを押すと開きますので、自分なりの実装を行った上で確認をしてみましょう。


 こちらの動画が、ここまでの完成形です。

https://gyazo.com/5605ef9fb9f3b8e6c4296683b479fc61

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます