キャラクターモデルに「Musasi」君を使用している方は
に記載している通りStandardAssetsのEthanをご使用ください。
ごめんなさい。
今回からスクリプトを作成していきます。
前回3DモデルにCharacterControllerコンポーネントを取りつけてキャラクターを移動させる機能を取りつけました。
実際にキャラクターを動かすにはスクリプトを記述してキャラクターである「Musasi」君に取りつける必要があります。
キャラクターを移動させる方法を考える
まずはFPSゲームでキャラクターをどのように動かすか考えましょう。
第3者視点のアクションゲームでは↑のキーを押せばキャラクタが上の方向を向きそちらに移動します。
←のキーを押せば左の方向を向きそちらに移動します。
しかしFPSの場合はキーを押した方向にキャラクターの向きを変更しそちらに進むのではなく、
向きを変えずに押した方向に進むようにします。
前進は問題ないと思いますが、後進の場合は前を向いたまま後ろ歩き、左右に移動する場合は前を向いたままカニ歩きするという感じになります。
キャラクターが向きを変える場合はマウス操作やゲームパッドの右スティックを使うようにします。
キャラクターの向きに関しては次回以降やると思います。これ結構大変そう・・・・(^_^;)
キャラクター移動のスクリプトに関しては
を参照してください。
キャラクター移動のスクリプトの考え方を記載しています。
前後に動く場合はキー操作のInput.GetAxis(“Vertical”)
左右に動く場合はキー操作のInput.GetAxis(“Horizontal”)
キャラクターには重力を働かせ、地面と接地している時だけ移動出来るようにします。
キャラクターを移動させるスクリプトMyCharaの作成
ではスクリプトファイルを作成していきます。
作り方は何通りかありますが、
↑のようにProjectタブのAssetsフォルダで右クリックしてスクリプトファイルを作成する事が出来ます。
出来上がったスクリプトをゲームオブジェクトに設定する時はそのゲームオブジェクトのインスペクタのAdd Componentから選択する方法と、
スクリプトファイルをゲームオブジェクトにドラッグ&ドロップする方法があります。
↑のようにゲームオブジェクトのインスペクタでAdd Componentし、New Scriptを選択します。
新しい名前を付けCreate And Addを押します。
キャラクター操作スクリプトはMyCharaという名前に設定しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | using UnityEngine; using System.Collections; public class MyChara : MonoBehaviour { //キャラクターコントローラー private CharacterController cCon; // キャラクターの速度 private Vector3 velocity; void Start () { //キャラクターコントローラの取得 cCon = GetComponent<CharacterController>(); } void Update () { // キャラクターコントローラのコライダが地面と接触してるかどうか if(cCon.isGrounded) { velocity = Vector3.zero; // 横方向のキーの押し具合をx軸に入れる velocity.x = Input.GetAxis("Horizontal"); // y軸は高さなので0に設定(キー操作で重力を無視して動く事はないから) velocity.y = 0; // 手前と奥方向に移動するキーの押し具合をz軸に入れる velocity.z = Input.GetAxis("Vertical"); } // 重力値を計算 velocity.y += Physics.gravity.y * Time.deltaTime; // キャラクターコントローラのMoveを使ってキャラクターを移動させる cCon.Move(velocity * Time.deltaTime); } } |
詳細はさきほど紹介したキャラクター移動のスクリプトに関してのリンク先を見てください。
Startメソッド内でCharacterControllerコンポーネントの取得をし、Updateメソッド内ではCharacterControllerのisGroundedプロパティで地面にコライダが接地しているかどうかを確認しています。
地面に接地していたら重力加速度は0になるのと、移動値も0に初期化します。Vector3.zeroはnew Vector3(0, 0, 0)と同じです。
地面に接地していたら前後左右のキーの押している度合いをそれぞれの軸の速度に設定します。
地面に接地しているかしていないかにかかわらず重力は働くので重力値Physics.gravity.yの値にTime.deltaTimeをかけ重力を計算しています。
Time.deltaTimeはパソコンの処理能力によってUpdateメソッドの呼ばれる回数が変わってくるので、性能差で処理する回数が変わらないように
かけています。
重力に関しては
を参照してください。
最後にCharacterControllerのMoveメソッドでキャラクターを移動させています。
これでスクリプトが完成しました。
Assetエリアでスクリプトを作成し、まだキャラクターにスクリプトを取りつけていない場合はスクリプトを「Musasi」君にドラッグ&ドロップして取りつけてください。
↑のようにスクリプトファイルを「Musasi」君にドラッグ&ドロップするだけでコンポーネントを取りつけられます。
キャラクターの動きを確認する
それではUnityの実行ボタンを押してキャラクターが移動するかどうか確認しましょう。
現時点では床が真っ白で平らで広く、カメラの視点がキャラクターの視点なので移動している事が解りづらくなっています。
その為、Sceneタブで第3者目線で見えるようにして確認します。
SceneタブとGameタブを別のウインドウにドラッグ&ドロップして同時に確認出来るようにします。
↑のようにひとつのウインドウ内にSceneタブとGameタブがあると同時に確認が出来ません。
Sceneタブをちょっとだけ下にドラッグして上のような状態でドロップするとGameタブの左に別のウインドウが出来て横に並びます。
↑が横並びにした状態です。
ここでUnityの実行ボタンを押せば実際のゲーム画面(Gameタブ)と作者目線(Sceneタブ)とを同時に確認出来ます。
実際のゲームで見える範囲だけでなく周りの状況等を確認したい時はSceneタブが見えると便利です。
横並びがうまく出来ないという方は、Consoleタブ等がある下のウインドウにSceneタブをドラッグ&ドロップして確認するのもいいかもしれません。
これで同時確認が出来るようになったのでキャラクターの動きを確認してみましょう。
上が前後左右にキャラクターを移動させてみた結果になります。
Gameタブでは移動の確認が難しいのでSceneタブで確認しています。
キャラクターが前方を向いたまま前、後ろ、左、右に動くようになりました。
まだアニメーションの切り替えを行っていないのでキャラクターはずっと同じ状態のままおばけのようにスーッと動きます(=_=)
FPSだと自分自身を見る事はあまりないのでアニメーションを設定しない、というよりキャラクター自体を作らず手だけを動かすという場合もあるようです。
わたくしの場合はとりあえずキャラクターモデルを配置し、アニメーションを設定していこうと思います。
FPSからTPSに変更する時も結構楽にいけるかもしれません。
さて、これでキャラクターを簡易的に動かす事ができるようになりました。
まだ歩くモーションへの切り替えやキャラクターが走る、視点を切り替えるという機能を作成していないので、
キャラクターの動きとしては全然物足りませんが、少しづつ出来る事を増やしていきましょう。
次回はキャラクターが走る機能とアニメーションの切り替えの機能あたりを作っていこうかなと思います。