2016.10.13
第9回目:ユニティちゃんにジャンプ機能を実装する
前回作成したユニティちゃんがPlane上を駆け巡る処理に、キーボードの「スペース キー」を押すとジャンプルをする機能を追加してみましょう。
はじめに
今回は、前回作成した、ユニティちゃんがPlane上を駆け巡る処理に、キーボードの「スペース キー」を押すとジャンプルをする機能を追加してみましょう。前回と同じプロジェクトファイルを使用します。 前回の図12を見るとPlane(床)が少し狭いので、HierarchyからPlaneを選択して、Inspector内のTransformの「Scale」を「X、Y、Z」ともに「5」を指定して広くしておきます。今回はユニティちゃんを走り回らせてジャンプさせますので、床が狭いと、床からはみ出て下に落ちてしまいます。図1のような大きさになります。
図1 Unitychanがキーボードの「前後左右矢印キー」で自由に動き回るPlane(床)のサイズを大きくした
Asset StoreからAssetのダウンロード
ジャンプ機能を追加するために、ジャンプの機能を含んでいる下記のAssetをダウンロードします。
1.Raw Mocap Data For Mecanim(無料)
https://www.assetstore.unity3d.com/jp/#!/content/5330
検索欄に「Raw Mocap」と入力して「虫眼鏡アイコン」をクリックすると、該当するファイルの一覧が表示されますので、「Raw Mocap Data For Mecanim」をクリックして、DownloadからImportしてください(図2)。
図2 「Raw Mocap Data for Mecanim」をDownloadからImportする
Importには結構時間がかかりますので、気長にお待ちください。Importが完了すると図3のように、「Raw Mocap Data for Mecanim」のファイルがProject内に追加されます。
図3 Project内にImportしたファイルが追加された
Locomotion.controllerファイルを編集する
次に、Hierarchyからunitychanを選択し、Inspector内のAnimatorのControllerに指定している「Locomotion」をクリックします。すると図4のようにLocomotion.controllerファイルの文字が黄色の背景色で表示されて、Locomotion.controllerの所在が分かります。
図4 Locomotion.controllerファイルの所在が分かる
このLocomotionファイルをダブルクリックします。すると図5のような画面が表示されます。表示されているオレンジの六角形のアイコンは「アニメーションステートマシン」と呼ばれるもので、アニメーションの状態(State)とその遷移(Transition)をグラフィカルに表したものです。
図5 Locomotion.controllerの中が表示された
この六角形の「アニメーションステートマシン」をダブルクリックします。するとたくさんの四角形と、その間を接続している矢印線が表示されます。この「四角形をState」、「矢印線をTransition」と呼びます(図6)。
図6 StateとTransitionが表示された
ジャンプの機能を実装する
まず、図6の左上にある「Parameters」というボタンをクリックします。すると図7のような画面が表示されます。
図7 Parameterボタンをクリックした
図7の画面で赤の矩形で囲った「+」アイコンをクリックします。図8のようにデータ型が表示されますので、「Bool」を選択します。
図8 Boolを選択する
「New Bool」という項目が作成されますので、名前を「is_jumping」としておきます(図9)。
図9 名前をis_jumpingとしておく
次に、図6の何もない場所で、マウスの右クリックをします。すると図10のような項目が表示されますので、「Create State→Empty」と選択します。
図10 「Create State→Empty」と選択する
すると「New State」という新しい四角形が作成されますので、これを選択して、右のInspectorから名前に「Jump」と付け、Motionの横にある“○に・”のアイコンをクリックして、Select Motionの画面を開きます。たくさんのMotionが表示されますので、目的のジャンプのモーションを見つけるのが大変なので、一番上の検索欄に「RunJump」と入力します。するとJumpに関するMotionが表示されますので、その中から、「RunJump_ToLeft_2」を選択します(図11)。
図11 RunJump_ToLeft_2 を選択した
次に、中央に表示されている「WalkRun」と今作成した「Jump」をTransitionで接続します。「Jump」の四角形の上でマウスを右クリックすると「Make Transition」の項目が表示されますので(図12)、これを選択します。すると矢印線が表示されますので、「WalkRun」上でクリックすると、これら2つが接続されます(図13)。
図12 Make Transitionの項目が表示された
図13 JumpとWalkRunが接続された
同じ手順で、今度は「WalkRun」上でマウスの右クリックをして、Make Transitionを表示して、「Jump」と接続します。図14のようにお互いが2本の矢印線(Transition)で接続されます。
図14 WalRunとJumpが2本のTransitionで接続された
Transitionの条件を設定する
まず、「WalkRun」から「Jump」に伸びているTransitionを選択します。すると右のInspectorの下にConditionsという項目がありますので、「+」アイコンをクリックします。するとConditionsの項目が表示されますので、その中からParametersで設定しておいた「is_jumping」を選択し、横に表示される値を「true」としておきます。これは「WalkRun」から「Jump」にMotionを変化させることが可能という意味になります(図15)。
図15 「is_jumping」に「true」を指定する
次に、「Jump」から「WalkRun」に伸びているTransitionを選択して、Inspectorから、先ほどと同じ手順で「is_jumping」を表示して、今回は値に「false」を指定しておきます。「Jump」から「WalkRun」に移る場合のMotionには「Jump」は必要ありませんので「false」にしておきます。
以上でTransitionの設定は終わりです。現在はAnimatorタブが選択されて、Locomotion.controllerの画面が表示されていますので、Scene画面を選択して、オブジェクトが配置されている画面に戻ってください。 次に、C#でユニティちゃんをスペース キーでジャンプさせるコードを記述します。
ジャンプのコードを記述する
Hierarchyからunitychanを選択して、Inspectorの「Add Component」から「New Script」を選択し、Nameに「JumpScript」、Languageに「C#」を選択して、「Create and Add」をクリックします。 Inspector内に「Jump Script(Script)」が追加されます。ScriptのJumpScriptをダブルクリックするとVisual Studio 2015が起動しますので、void Update()内にリスト9.1のコードを記述します。
リスト9.1 ユニティちゃんがジャンプするコード(Junpscript.cs)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | using UnityEngine; public class JumpScript : MonoBehaviour { void Update () { Animator anim = GetComponent<Animator>(); // ...(1) if (Input.GetKey(KeyCode.Space)) // ...(2) { anim.SetBool( "is_jumping" , true ); } AnimatorStateInfo state = anim.GetCurrentAnimatorStateInfo(0); // ...(3) if (state.IsName( "Locomotion.Jump" )) // ...(4) { anim.SetBool( "is_jumping" , false ); } } } |
...(1) GetComponentでAnimatorコンポーネントを取得し、変数animで参照します。
...(2) キーボードから入力されたキーがSpaceなら、SetBoolでJumpパラメーターにtrueを指定します。
...(3) GetCurrentAnimatorStateInfo(0)でAnimatorの現在の状態を取得し、変数stateに格納します。
...(4) そのAnimatorの名前がLocomotion.Jumpなら、SetBoolでJumpのパラメーターにfalseを指定して、次のJumpに備えます。
実際に実行すると図16のようになります。
図16 ユニティちゃんがスペース キーでジャンプをしている
実際に動かしたのが下記の動画になります。
ユニティちゃんがスペース キーでジャンプする動画
https://youtu.be/R9FrU8CKNDw
今回はこれで終わりです。SateやTransitionの設定も出てきて、少し面倒かもしれませんが、実際に自分で手を動かして試してみれば、思っているよりは簡単です。実際に手を動かしてみましょう。C#のコード自体も長くはなく、そんなに難しい処理ではないので、理解しやすいのではないでしょうか。
次回は最終回で、Image Effectsについて解説します。