UnrealEngine奮闘記

アンリアルエンジンでの開発やTIPSをまとめたblogです

横スクロールアクションを作る その2青人間をユニティちゃんに差し替える(後編)

後編はAnimationBlueprintとBlueprintを作成し、ユニティちゃんがレベルを歩き回れるようにします。プロジェクトファイルは既に前回アップしていますので、そちらからダウンロードして下さい。

f:id:swiftnest:20140524175657j:plain
本コンテンツは、『ユニティちゃんライセンス条項』に基づいて公開・配布されるものです。本コンテンツをご利用される場合は、ユニティ・テクノロジーズ・ジャパン合同会社が定める『キャラクター利用のガイドライン』をお守りいただく必要があります。

Eventgraph, AnimGraph, StateMachine

まず青人間のAnimationBlueprintを覗いてみると、AnimationBlueprintは大きく3つのパートに分かれている事が分かります。

Eventgraph

f:id:swiftnest:20140531222807j:plain:w460
変数に値を入れて全体を制御するのに使用します。
青人間で使われている変数は以下のとおりです。

  • 移動アニメの遷移で使用(Animation Blend1D)
    • Speed 
  • StateMachineで使用
    • IsInAir?

また、ShooterGameでよく使われている変数は以下のとおりです。

  • 銃口を相手に向ける際に使用(Animation Offset)
    • Direction, AimPitch, AimYew
  • 移動アニメの遷移で使用(Animation Blend1D)
    • Speed 
  • StateMachineで使用
    • IsRunning, IsJumping, JumpTime

AnimGraph

f:id:swiftnest:20140531235105j:plain:w460

ステートマシンで決まったポーズにAnimationOffsetやAnimationMontageを合成して最終ポーズを設定します。
青人間では銃口を相手に向けたり等が無いので、ステートマシンのポーズをそのまま最終ポーズに設定してます。

StateMachine

f:id:swiftnest:20140531235555j:plain:w460

変数や状態を元にステートを遷移させ、アニメーションのポーズをAnimGraphに返します。
ステートの中にはアニメーションを設定します。
f:id:swiftnest:20140601000712j:plain:w460

ステートの外の矢印にはステート遷移のルールを書きます。
例えばIdle/RunからJumpStateの遷移ルールは「IsInAir?変数がTrueかどうか」となります。
f:id:swiftnest:20140601000655j:plain:w460

Trueが入っているとJumpStateにステートが遷移するので、アニメーションがJumpState内のアニメーションに切り替わります。

AnimationBlueprintの作成

では実際にAnimationBlueprintを作成していきます。

まずunitychan_Skeletonを右クリックし、「Create Animation Blueprint」を選びます。

f:id:swiftnest:20140601223354j:plain:w200

作成した「Animation Blueprint」をダブルクリックして開きます。
まずは画面上部のタブから「Eventgraph」を選択して修正していきます。

青人間のEventgraphを開いて全てコピーし、先ほど作ったUnityChan_tail_Skeleton_AnimBlueprintにペーストします。
変数が不足しているので左下の「+Variable」から作成します。

  • IsInAir? : 型bool (※変数名は「?」まで入力して下さい)
  • Speed : 型float

f:id:swiftnest:20140601223528j:plain:w460

内容としてはシンプルで、空中かどうかのステートをIsInAir?変数に入れているのと、移動速度をSpeed変数に入れているだけです。

AnimGraphとStateMachineの作成

画面上部のタブから「AnimGraph」を選択して修正していきます。
右クリックメニューから「Add New State Machine」を選びます。

f:id:swiftnest:20140601224219j:plain:w300

名前はDefaultとします。

作成したDefault State MachineをダブルクリックしてStateMachineの編集に移ります。
やはり青人間ののStateMachineを全てコピーして貼り付けます。

f:id:swiftnest:20140601224355j:plain:w460

この状態では、アニメーションが全て青人間の物になってますので、全てユニティちゃんに差し替える必要があります。

「Idle/Run」をダブルクリックし、画面下のAssetStoreから「BlenSpace1D」をドロップアンドドラッグで画面中央に移動させ、ラインを繋ぎ変えます。
f:id:swiftnest:20140531233530j:plain:w460
残りの「JumpStart」「JumpLoop」「JumpEnd」も同様に繋ぎ変えます。

差し替えはステートだけではなく、遷移ルール2箇所にも行います。「JumpStart->JumpLoop」と「JumpEnd->Idle/Run」の矢印をダブルクリックし、右クリックメニューから「TimeRemaining(ratio) ... 」を選び、差し替えます。
f:id:swiftnest:20140531233714j:plain:w460

これでAnimationBlueprintは完了です。

Blueprintの作成

まずは青人間のBlueprintを使います。

Character/MyCharacterを開き、右上のツールバーをDefaultsに合わせます。
「Anim Blueprint Generated Class」を「HeroTPP_AnimBlueprint」から「UnityChan_tail_Skeleton_AnimBlueprint」に、
「Skeletal Mesh」を「HeroTPP」から「UnityChan_tail」に変更します。

f:id:swiftnest:20140601232022j:plain:w300

※この操作を行ったあとPlayを押すとUE4が落ちる事が多々ありますが、何度か繰り返すと落ちなくなります。

この状態でプレイすると、ユニティちゃんが床に寝た状態で始まってしまいます。
そこでメッシュのX軸を90度回転させます。

右上のツールバーからComponentsを選択し、画面左のComponentsを「Mesh」に合わせ、RotationのX軸に90度を入力します。

f:id:swiftnest:20140601234237j:plain:w460

これで完成です。
Playを押すとユニティちゃんがレベルを歩き回れるようになってると思います。

プレイヤーとカメラのパラメータ調整

まず移動速度やジャンプ力、乗り越えられる段差の高さといったパラメータは、ツールバーのDefaultsにある「Character Movement」にあります。
f:id:swiftnest:20140601234637j:plain:w460

例えば高くジャンプさせたい場合は「Jump Z Velocity」に大きい値を入れます。
各パラメータの詳細は全てではないですが、こちらに載っています(英語)。
https://docs.unrealengine.com/latest/INT/Programming/Gameplay/Framework/Pawn/Character/index.html

次はカメラです。

右上のツールバーからComponentsを選択し、画面左のComponentsを「SpringArm1」に合わせます。画面下のCamera欄にあるTargetArmLengthとSocketOffsetでカメラの距離や角度を調整出来ます。

f:id:swiftnest:20140602002956j:plain:w460

なお、カメラが左右にしか動かないのはTransform欄のRotationが「Absolute Rotation」に設定されているからです。
ここをクリックすると「Rotaion」に切り替わり、カメラがサードパーソンの様な動きになります。

これで青人間をユニティちゃんへ差し替えは完了です。
アニメーションに関しては「Let's Enjoy Unreal Engine」でも紹介されてますので、そちらも見るとより深く理解できるかと思います。
http://unrealengine.hatenablog.com/entry/2014/05/14/000828

次は今回作成したプロジェクトを使って、ちょっとしたアクションゲームを作ってみます。