UE4の勉強記録

UE4の勉強の記録です。個人用です。

「Unreal Engine4.xを使用してRPGを作成する」の足りない部分を作成する。キャラクターを追加する。

<前文>

f:id:kazuhironagai77:20191027202819p:plain

今週は特にないです。

<本文>

今週は、キャラクターを変更したいと思います。と言っても自分で作成する事は出来ませんので、代わりのアセットを使用したいと思います。

f:id:kazuhironagai77:20191110211003p:plain

このアセットは無料の時に購入したのですが、全く使用してません。と言うか全く使用方法から分かりません。パラパラ探したのですが、何処にも説明書のような物はないですね。

<取りあえずやってみる>

1ModularBodyPartsをプロジェクトに追加する。

まず、試し用にプロジェクトを作成します。プロジェクト名はCharacterTestとします。

f:id:kazuhironagai77:20191110211120p:plain

ここに、Modular RPG Heros Polyartを追加します。

f:id:kazuhironagai77:20191110211143p:plain

2ModularBodyPartsの確認

中身を見てみます。

f:id:kazuhironagai77:20191110211231p:plain

弓、二刀流、杖、素手、剣と盾、一刀流のモーションのアニメーションがありました。以下に素手のモーションを示します。

f:id:kazuhironagai77:20191110211252p:plain

こんなに沢山あるのですか。

一個だけモーションを見てみました。

f:id:kazuhironagai77:20191110211324p:plain

多分、前受け身の事でしょう。若い時に武道をかなり真剣に練習していたので、前受け身にはとても興味があります。

f:id:kazuhironagai77:20191110211347p:plain

凄い。でも何か違いますね。前受け身というよりでんぐり返しですね、これは。何が違うのかなと思ったら、左右の違いが無い事が違和感になっているんですね。武道の観点から見れば、人間の体はXに成っているですが、この動きは人間の体を+と見なしていますね。ウーン。何かすっげぇ不満。

とは言え、私のゲームには十分過ぎる物です。次を見てみましょう。

f:id:kazuhironagai77:20191110211413p:plain

キャラクターBPフォルダー内には二つのアセットがありますね。

f:id:kazuhironagai77:20191110211447p:plain

ひょっとしたか、ThirdPersonCharacterの代わりになるのかなと思って見てみると、Parent ClassがSkeletalMeshActorですね。

今度はMapsを見てみます。

f:id:kazuhironagai77:20191110211537p:plain

凄い数のレベルが入っていました。え、レベルデザインも貰えるの?と喜んで開いて見たら、

f:id:kazuhironagai77:20191110211607p:plain

全てのキャラクターの同じモーションが表示されました。なるほど。

今度はMaterialです。

f:id:kazuhironagai77:20191110211636p:plain

たった3個しか入っていませんでした。これらで全てのキャラクターの色を付けているのでしょうか?

興味深いので、中も見てみます。PolyartMaskTintMatを開きます。

f:id:kazuhironagai77:20191110211701p:plain

こんな、感じになっていました。

f:id:kazuhironagai77:20191110211720p:plain

Metallicは0.5、Roughnessは0.7になっています。そしてNormalはなしですね。これがPBRでアニメっぽいマテリアルにするテクニックかもしれませんね。

次のMeshesはModularBodyParts、OneMeshCharacters、StageMesh、そしてWeaponsのサブフォルダーに分かれています。

f:id:kazuhironagai77:20191110211746p:plain

f:id:kazuhironagai77:20191110211754p:plain

PhysicsAssetとSkeletonがフォルダー外にありますね。

Mannequinの方を見たら、Meshフォルダー内に同様のファイルがありました。

f:id:kazuhironagai77:20191110212129p:plain

f:id:kazuhironagai77:20191110212139p:plain

この辺の勉強をおろそかにしていたので、これらが何のためにあるのかが全く分かりません。後で調べる事にします。

ModularBodyPartsフォルダーから見ていきます。

f:id:kazuhironagai77:20191110212200p:plain

凄い。これらのパーツを組み合わせてキャラクターを作成しているのですね。

f:id:kazuhironagai77:20191110212223p:plain

Skeletal Meshと書かれていますね。Boneも付いているみたいですね。

試しに一個開いて見ました。

f:id:kazuhironagai77:20191110212256p:plain

f:id:kazuhironagai77:20191110212307p:plain

Meshの所にやっぱりSkeletonがありました。ただこれもSkeletal Meshそのものを知らないので、使用方法とか全然分からないですね。これらを組み合わせて、

f:id:kazuhironagai77:20191110212329p:plain

を作成するのでしょうか?

Modular CharacterBPのBPをみると以下に示すようなノードが組まれています。

f:id:kazuhironagai77:20191110212351p:plain

このHair、Gloveなどのそれぞれに対応するのでしょうか?

Faceを選択すると、DetailのMeshにFace01SKが選択されていました。

f:id:kazuhironagai77:20191110212422p:plain

f:id:kazuhironagai77:20191110212430p:plain

これで、何となく作り方は分かりました。

そういえば、Meshフォルダー内を見ていたんですね。

ModularBodyPartsフォルダーの次のフォルダーであるOneMeshCharactersを見てみます。

f:id:kazuhironagai77:20191110212500p:plain

こちらは、一個のSketetal Meshで一体のキャラクター全体を表示しているみたいです。

試しに一個開いて見たら、以下のようなキャラクターが表示されました。

f:id:kazuhironagai77:20191110212531p:plain

これに、剣や盾を装備して使用するのでしょうか?

OneMeshCharactersBPを開いて見ると、

f:id:kazuhironagai77:20191110212603p:plain

f:id:kazuhironagai77:20191110212614p:plain

Componentsの所に武器や防具の項目がありますね。SkeletalMeshComponentを選択して、detailのMeshを見ると

f:id:kazuhironagai77:20191110212651p:plain

OneMeshCharactersのモデルの一つであるKightSKが選択されていました。

武器も見てみましょう。

f:id:kazuhironagai77:20191110212711p:plain

f:id:kazuhironagai77:20191110212719p:plain

あれ、武器がStatic Meshですね。Skeletal Meshではありません。

と言う事は、Static Meshの武具がこの後にあるのでしょうね。

次のフォルダーは、StageMeshです。中には、

f:id:kazuhironagai77:20191110212829p:plain

が一個だけ入っていました。開くと

f:id:kazuhironagai77:20191110212901p:plain

これはデモ用の舞台みたいですね。直接は使用しないと思われます。

Meshフォルダー内の最後のフォルダーであるWeaponsを見てみます。

f:id:kazuhironagai77:20191110212925p:plain

これらが、OneMeshCharactersBPでOneMeshCharactersの武具に使用されるアセットですね。

f:id:kazuhironagai77:20191110212954p:plain

Static Meshとなっていますね。

最後は、Texturesです。

f:id:kazuhironagai77:20191110213030p:plain

Materialで使用されているTextureが入っていました。

圧巻ですね。

期間限定と言え、これを無料でもらえてしまうのが、EPICGAME社の凄い所です。

3.兎に角、やってみる。

ここから何ですが、全くどうしたら良いのか分かりません。色々試してみようと思います。

まず、GameModeクラスのコンストラクター

f:id:kazuhironagai77:20191110213106p:plain

PlayerPawnBPClassをThirdPersonCharacterに指定しています。これを

f:id:kazuhironagai77:20191110213134p:plain

と変えてみたらどうでしょうか?

やってみます。

f:id:kazuhironagai77:20191110213155p:plain

全く、変わりません。

そう言えば、GemModeを設定していなかったです。

f:id:kazuhironagai77:20191110213219p:plain

もう一度やってみます。

f:id:kazuhironagai77:20191110213241p:plain

やっぱり変わりませんね。

理由が分かりました。

ModularCharacterBPはSkeletalMeshActorクラスでPawnクラスじゃなかったです。

f:id:kazuhironagai77:20191110213302p:plain

公式のAPIのAPawnのdocumentによると

f:id:kazuhironagai77:20191110213328p:plain

となっていますが、同じサイトのSkeletalMeshActor

f:id:kazuhironagai77:20191110213349p:plain

となっています。ので

f:id:kazuhironagai77:20191110213421p:plain

がそもそも無理だったんですね。

プランBで行きます。

プランBは、ThirdPersonCharacterはそもそもCharacterクラスの派生クラスなのだからSkeletal Meshを指定する変数を持っているはずです。そこに、このModularCharacterBPを指定すれば良いと考えました。

f:id:kazuhironagai77:20191110213446p:plain

思いっきりありました。ここにModularCharacterBPを入れます。

入らない。

SkeletalMeshActorはSkeletal Meshクラスの子クラスじゃなかったみたいです。

APIを確認したら、

f:id:kazuhironagai77:20191110213557p:plain

全然違ってました。

じゃSkeletalMeshActorて、一体何なんだと調べたら、

ここに、しっかり説明されていました。

f:id:kazuhironagai77:20191110213626p:plain

簡単にまとめますと、レベル内で複雑な動作を担当するための特別なアクタークラスだそうです。レベル内で一番複雑な動作をするのはプレイヤーがコントロールするキャラクターでしょう。と言ってもそれは担当してないみたいです。うーん。

これだと1個のSkeletal Meshしか追加出来ないですね。

それなら、OneMeshCharactersをThirdPersonCharacter のSkeletal Meshにセットしてみます。

f:id:kazuhironagai77:20191110213731p:plain

今度は簡単に出来ました。

f:id:kazuhironagai77:20191110213801p:plain

見事に変わっています。

Playボタンを押して実際に動くか確認します。

f:id:kazuhironagai77:20191110213821p:plain

動きましたが、アニメーションが消滅してます。

MeshのdetailsでAnimationの所が、Noneにセットされていました。

このアセット内の全てのキャラクターのボーンはThirdPersonCharacterと同じと何処かで読んだ気がします。それならThirdPersonCharacter用のアニメーションがそのまま使用出来るかも?と期待して、

f:id:kazuhironagai77:20191110213956p:plain

ThirdPerson_AminBPをセットしました。

試してみます。

f:id:kazuhironagai77:20191110214018p:plain

駄目でした。

調べたら、Animation Retargetingに同じスケルトンを使用しているが、サイズが全く違うキャラクターに同じアニメーションを使用する方法が説明されているみたいです。やっぱり単純にそのままでは使用出来ないみたいですね。

一応、考え方が間違っていないか調べるために、Animationの設定を変えて、弓での攻撃のアニメーションを表示してみます。

f:id:kazuhironagai77:20191110214040p:plain

f:id:kazuhironagai77:20191110214050p:plain

思いっきり出来てます。私が弓について全く知らないからかもしれませんが、動作はかなり格好いいです。

次に、ThirdPersonCharacter用のアニメーションである

f:id:kazuhironagai77:20191110214141p:plain

を変わりに選択して使用しようとしたら、選択出来ません。

4.Animation Retargetingを勉強する。

これさえ理解すればThirdPersonCharacter用のアニメーションをOneMeshCharactersのキャラクターの動作に使用出来る気がします。

Animation Retargetingは読んだのですが、以下に示すチュートリアルの方が分かり易いのでそちらを中心に勉強します。

https://www.youtube.com/watch?v=JkcJ5bjGPsg&t=16s

を見ていると、同じスケルトンを使用した違うSkeletal Meshの場合、

f:id:kazuhironagai77:20191110214241p:plain

それぞれのanimation sequenceも選択出来ています。

OneMeshCharactersのキャラクターとThirdPersonCharacterに使用されていたSK_Mannequinのスケルトンは同じUE4_Mannequin_SkeletonですがOneMeshCharactersのキャラクターであるApprenticeSKは、SK_Mannequin用のanimation sequenceを選択する事が出来ません。

これは、OneMeshCharactersのスケルトンはModularRPGHeroesPolyart/MeshesにあるUE4_Mannequin_Skeletonを使用していますが、ThirdPersonCharacterに使用されていたSK_MannequinのスケルトンはMannequin/Character/Mesh内にあるUE4_Mannequin_Skeletonを使用しているため、UE4エディターが二つの違うスケルトンを使用していると認識しているためと考えられます。

https://www.youtube.com/watch?v=xy9aLbZLdeA

に違うスケルトンを持つSkeletal Meshにanimation sequenceを強引に適用する方法が載っていました。この方法を使用すればSK_Mannequin用のanimation sequenceをOneMeshCharactersのキャラクターであるApprenticeSKに使用出来そうです。

まず、結論から書きますと出来ました。

f:id:kazuhironagai77:20191110214359p:plain

以下に簡単にやり方を示します。

まず、使用したいanimation sequenceを選択しエディターを開きます。今回は、ThirdPersonRunです。

f:id:kazuhironagai77:20191110214418p:plain

f:id:kazuhironagai77:20191110214427p:plain

エディターの右上にあるタブから

f:id:kazuhironagai77:20191110214446p:plain

Skeletonを選択します。

Retarget Manager内の

f:id:kazuhironagai77:20191110214508p:plain

Set up RigのSelect RigにHumanoidを選択します。

f:id:kazuhironagai77:20191110214610p:plain

セーブします。

今度はそのanimation sequenceを使用するskeletal meshである

f:id:kazuhironagai77:20191110214634p:plain

を開きます。

f:id:kazuhironagai77:20191110214655p:plain

こちらも右上のタブからSkeletonを選択して、

f:id:kazuhironagai77:20191110214716p:plain

Skeletonエディターを開きます。

f:id:kazuhironagai77:20191110214755p:plain

こちらでも、Select Rigにhumanoidを選択します。

選択したらセーブします。

今度は、また

f:id:kazuhironagai77:20191110214815p:plain

に戻ります。

ThirdPersonRunを右クリックすると、Animation Sequence Actionsが開くので、以下に示すように、そこからRetarget Anim Assetsを選択し、更にDuplicate Anim Assets and Retargetを選択します。

f:id:kazuhironagai77:20191110214855p:plain

するとSelect Skeletonが開きます。

f:id:kazuhironagai77:20191110214918p:plain

f:id:kazuhironagai77:20191110214941p:plain

ここでUE4_Mannequin_Skeletonを選択します。

f:id:kazuhironagai77:20191110215008p:plain

f:id:kazuhironagai77:20191110215016p:plain

ここで、本来ならば、

f:id:kazuhironagai77:20191110215038p:plain

SourceとTargetの腕の位置が違うのですが、もう直してしまったので図では同じになってしまっています。

念のためにSourceの腕の位置の直し方を以下に書いておきます。

まず、Select Skeletonを一端閉じます。そしてSourceのSkeletonを開きます。

f:id:kazuhironagai77:20191110215130p:plain

ポーズをT字型にします。

f:id:kazuhironagai77:20191110215152p:plain

ポーズが完成したら、Manage Retarget Base Pose内のModify Poseをクリックします。

f:id:kazuhironagai77:20191110215213p:plain

セーブします。

もう一度、ThirdPersonRunのSelect Skeletonを開きます。

f:id:kazuhironagai77:20191110215244p:plain

今度はRetargetボタンを押します。

f:id:kazuhironagai77:20191110215306p:plain

すると、新しいThirdPersonRunが生成されています。

f:id:kazuhironagai77:20191110215328p:plain

これを、ThirdPersonCharcterのAnimationで選択します。

f:id:kazuhironagai77:20191110215349p:plain

Playボタンを押すと、

f:id:kazuhironagai77:20191110215424p:plain

ApprenticeSKが走り始めました。

5.ApprenticeSK のためのThirdPerson_AnimBPを作成する。

SK_Mannequin のためのamination Sequence1個がApprenticeSKに使用出来るようになったとしても、ApprenticeSKがプレイヤーの思い通りに歩いたり走ったりジャンプしたりしてくれるわけではありません。それを可能にするためには、ApprenticeSKのためのThirdPerson_AnimBPを作成する必要があります。

そのため専用のフォルダーを一個作成します。MotionFromMannequinと名付けました。

f:id:kazuhironagai77:20191110215505p:plain

f:id:kazuhironagai77:20191110215514p:plain

ThirdPerson_AnimBPをコピーしたThirdPerson_AnimBP1と先程作成したThirdPersonRunをこのフォルダー内に移動しました。

まず、animation Blueprintについて復習します。

.Animation Blueprintの復習

色々な所を見て回りましたが、以下のチュートリアルが最も分かり易かったです。

  1. BP 3rd Person Game: Blend Spaces | 07 | v4.8 Tutorial Series | Unreal Engine
  2. BP 3rd Person Game: Intro to Animation Blueprints | 08 | v4.8 Tutorial Series | Unreal Engine
  3. BP 3rd Person Game: Intro to State Machines | 09 | v4.8 Tutorial Series | Unreal Engine
  4. BP 3rd Person Game: Building the AnimGraph | 10 | v4.8 Tutorial Series | Unreal Engine
  5. BP 3rd Person Game: Animation BP EventGraph | 11 | v4.8 Tutorial Series | Unreal Engine

このチュートリアル分かり易いのですが、いかんせん古いので全く整理されていません。誰かが管理しなければ、いずれ消えてしまうでしょう。

しかし、大体意味は分かりました。Blend Space 1DであるThirdPerson_IdleRun_2DとAnimation BlueprintであるThirdPerson_AnimBP1はBPを作成する時に、どのスケルトンを使用するのかを指定しないといけないみたいですね。これらも最初から作成する事になりそうです。

.ApprenticeSKのためのAnimation Sequenceの作成

ApprenticeSKのためのThirdPersonRunだけは先程作成しましたが、残りの全部のAnimation Sequenceも変換する必要があります。やります。

f:id:kazuhironagai77:20191110215653p:plain

作りました。やり方はApprenticeSKのためのThirdPersonRunを作った時と同じです。

動作も確認しました。

.ApprenticeSKのためのThirdPerson_IdleRun_2Dの作成

ひょっとするとスケルトンを途中で変える事が出来るのかもしれませんが、練習にもなるしThirdPerson_IdleRun_2Dは最初から作成します。

BP 3rd Person Game: Blend Spaces | 07 | v4.8 Tutorial Series | Unreal Engine

を参考にして作成します。

まず、animation からBlend Space 1Dを選択します。

f:id:kazuhironagai77:20191110215756p:plain

やはりスケルトンの選択を聞いてきました。ここでは、ApprenticeSKのためのThirdPerson_IdleRun_2Dを作成するので、当然下のスケルトンを選択します。

f:id:kazuhironagai77:20191110215813p:plain

名前が一緒だと後で混乱するかもしれないのでMy ThirdPerson_IdleRun_2Dとします。

開いたらこんな感じでした。

f:id:kazuhironagai77:20191110220023p:plain

左下のAsset Browser に先程作成したanimation sequencesが表示されていました。

f:id:kazuhironagai77:20191110220045p:plain

まず、グラフの座標の設定をThirdPerson_IdleRun_2Dと同じにします。

f:id:kazuhironagai77:20191110220127p:plain

グラフの左端にThirdPersonIdle、左から3分の1の所にThirdPersonWalk、そして右端にThirdPersonRunを配置します。ThirdPerson_IdleRun_2Dの設定と全く同じなはずです。

f:id:kazuhironagai77:20191110220303p:plain

スクリーンショットでは上手く伝わらないですが、スムーズに歩きと走りの移動が行われています。

f:id:kazuhironagai77:20191110220322p:plain

.ApprenticeSKのためのThirdPerson_AnimBPの作成

それではThirdPerson_AminBPを作成します。

BP 3rd Person Game: Intro to Animation Blueprints | 08 | v4.8 Tutorial Series | Unreal Engine

を参考にして、Animation Blueprintを作成します。

Parent ClassはAnimInstanceを選択します。理由はチュートリアルがそうしたからです。

f:id:kazuhironagai77:20191110220359p:plain

流石に後で心配になって、ThirdPerson_AminBP1のプロパティの何処かに書かれていないか確認しました。思いっきりAnimInstanceがparentになっていました。安心です。

f:id:kazuhironagai77:20191110220422p:plain

次にやはりと言うか、スケルトンの選択がありました。ApprenticeSKのためのスケルトンなので下と思ったら、今回は上のスケルトンがApprenticeSKのためのでした。危うく間違えるとこでした。

f:id:kazuhironagai77:20191110220512p:plain

UE4は、アセットなどの順番がちょっとした事で、代わるので注意が必要です。

名前はMyThirdPerson_AnimBPとしました。

f:id:kazuhironagai77:20191110220547p:plain

中身を作って行きます。

BP 3rd Person Game: Building the AnimGraph | 10 | v4.8 Tutorial Series | Unreal Engine

とThirdPerson_AnimBPを参考にして作成します。

f:id:kazuhironagai77:20191110220620p:plain

AnimGraph を開きState Machineを追加しました。名前はThirdPerson_AnimBPと同じDefaultにしました。

Defaultをダブルクリックして開きます。

以下にThirdPerson_AnimBPのDefaultを開いた時に表示される図を示します。

f:id:kazuhironagai77:20191110220643p:plain

これと同じ物を作成していきます。

新しいstateを加えました。Idle/Runと名付けました。

f:id:kazuhironagai77:20191110220705p:plain

Idle/Runの中身を作成します。

f:id:kazuhironagai77:20191110220728p:plain

ThirdPerson_AnimBPと全く同じ様にしました。

全部書くのは大変なので、完成した結果だけ載せます。

f:id:kazuhironagai77:20191110220745p:plain

今度はevent graph内に移動します。

以下にThirdPerson_AnimBPのevent graph内を表示します。

f:id:kazuhironagai77:20191110220812p:plain

BP 3rd Person Game: Animation BP EventGraph | 11 | v4.8 Tutorial Series | Unreal Engine

を参考して作成します。

f:id:kazuhironagai77:20191110220847p:plain

出来ました。

これでapprenticeSKのためのAmination Blueprintも完成しました。

6.テスト

テストします。

ThirdPersonCharcterのAnimationを以下に示すようにセットします。

f:id:kazuhironagai77:20191110220914p:plain

コンパイルしてセーブしてPlayします。

f:id:kazuhironagai77:20191110220933p:plain

Wキーを押すと思いっきり走ります。

f:id:kazuhironagai77:20191110220952p:plain

スペースキーを押すとジャンプします。

出来ましたね。

今週はここまでにします。

<考察>

Modular RPG Heros Polyartで提供されている全てのモデルはUE4で使用されているSK_Mannequinと同じスケルトンを使用しているため、本来ならば、何もしなくてもUE4エディターにあるanimation sequencesを使用出来るはずですが、今回は何故かUE4エディターがModular RPG Heros PolyartのスケルトンとUE4エディター上にあるスケルトンは別物であると認識してしまったために余計な手間がかかってしまいました。

Modular RPG Heros Polyartをプロジェクトに追加した具体的な方法が書かれていなかったので、後で忘れた時のためにここに記録しておきます。

f:id:kazuhironagai77:20191110221037p:plain

Add To Projectをクリックして今回のプロジェクトであるCharcterTestを選択しただけです。

UE4エディターが、この2つのスケルトンが同じものであると認識出来るようにするためは、どうすれば良いかを調べた方が作業の手間は少なかったかもしれません。

しかし、結果的には遠回りのなったとはいえ、そのおかげで、UE4のアニメーションについてかなり理解を深める事が出来ました。

今回使用したアニメーションのための専用のエディターらに関して感じた事は、使用方法をしっかりと説明されれば、大変分かり易い仕様になっていると言う事です。Animation Editorsについてはこのサイトに詳しい説明がされていました。これを理解するだけでもかなりの事が出来るようになりそうです。

ただし、説明されないと全然分からないとも感じました。今までに何回かこれらのアニメーションのための専用のエディターらを開いて、適当にいじった事がありましたが全く理解出来なかったです。

実際のゲームの作成において、このアニメーションの編集はアニメーターが担当する事になるのでしょうか?

ブループリントとはいえ、かなりの部分でプログラミングが必要とされています。勿論、アニメーションの編集なのでアートの才能が最も重要ではあります。あらゆる技術を駆使してアートを作成するようなタイプのデザイナー向きなのかもしれません。

<まとめと感想>

今回は、Modular RPG Heros Polyartで提供されているモデルをプレイヤーがコントロールするキャラクターとして使用出来るようになりました。

ただし以下に示す課題がまだ残っています。

  1. 提供されている武器を装備する方法。
  2. 戦闘モーションのアニメーションの使用方法。
  3. ModularBodyPartsのモデルをプレイヤーがコントロールするキャラクターとして使用する方法。

これらはこれから研究していきます。