[UE5] Lyra改造計画⑥ 人間以外のキャラクターを使う

Post 2023年12月9日土曜日

C++ GASでオンラインシリーズ Lyra改造 UE5 Unreal Engine オンラインゲーム

本記事はUnreal Engine Adventカレンダー2023企画(シリーズ2)の10日目の記事になります。若干C++いじる必要があります。

元々書いていた記事が、上位互換が見つかってしまったので、こんなマニアックな記事に・・・。


お約束
この記事作成にあたって使用した主なUnreal Engine バージョンUE 5.3.2

本日のゴール

人間以外のキャラクターをLyraに適用する


そもそもLyraとは

Lyraとは、Epicが出しているゲームのテンプレートになります。無料です。FPSやTPSを作ろうと思っている方は一度ダウンロードしてみてはいかがでしょうか。


説明

Lyraは私の記事でも解説した通り、爆速で人間のキャラクターを設定することができます。

※もちろん微調整はありますけど

しかし人間以外のキャラクター、例えば動物をキャラクターに設定するのはそんなに簡単じゃないです。


何故か?

Lyraでは、「見た目(Lyra Controller Component Character Parts)」「キャラクターのPawn (Lyra Character)」が別々で管理されている構造になっています。
このため見た目を変更しても、Pawn側には一切反映されない構造になっています。ややこしい。

これで、リボンを付けたらリボンの分当たり判定が大きくなるということはないです。

人間のキャラクターを設定すると前者の「キャラの見た目を設定しているキャラ」は変更されますが 「当たり判定のキャラ(見えない)」は特に変更されません。

しかし人型であれば、当たり判定のキャラは見えないので、ほとんど破綻しません。しかしたとえば人型といえども、2頭身のキャラクターとかを使った場合は、破綻が起こる可能性が高いです。

コリジョンを表示してみると、ネズミのキャラクターなのにコリジョンが人型になっている


ということで

人型以外のキャラクターを使う場合には、当たり判定のキャラを書き換える必要があります。


当たり判定の書き換えの方法

人型以外のキャラクターを使う場合には、当たり判定のキャラを書き換える必要があります。

HeroData_ShooterGameの中のBeginPlayを弄っていきます。下記が結果になります。


まず、最初のノードで、Meshコンポーネントのスケルタルメッシュを設定しますが、ここで設定するスケルタルメッシュはInvinsibleつまり空で見えないメッシュを設定します。Invisibleメッシュは各自用意しましょう。でも実際、その後のSetVisibilityでどうせ見えなくするのであまり関係ない気もします。
そしてアニメーションブループリントをSet  AnimInstanceで指定しておきます。

肝心なのはPawn Cosmetic Component。これが肝要です。
これに登録されている[BodyMeshes.DefaultMesh] と [BodyMeshes.ForcedPhysicsAsset] を使用するキャラに合わせて変更する必要があります。これを変更するブループリントノードは実はないので、作る必要があります。

「LyraPawnComponent_CharacterParts.h」のpublic: 直下に下記のノードを記入します。
  1.     // Change BodyMeshes
  2.     UFUNCTION(BlueprintCallable, Category = Cosmetics)
  3.     void ChangeBodyMeshes(USkeletalMesh* MeshDaze, UPhysicsAsset* ForcedPhysicsDaze);

「LyraPawnComponent_CharacterParts.cpp」で関数の内容を記載します。といっても内容はとてもシンプル。
  1. void ULyraPawnComponent_CharacterParts::ChangeBodyMeshes(USkeletalMesh* MeshDaze, UPhysicsAsset* ForcedPhysicsDaze)
  2. {
  3.     BodyMeshes.DefaultMesh = MeshDaze;
  4.     BodyMeshes.ForcedPhysicsAsset = ForcedPhysicsDaze;
  5.     BroadcastChanged();
  6. }

これだけです。この関数を使えば、当たり判定の修正が可能です。以上です。


明日は@kelu_alfheim39さんによる、「簡単なオンラインゲーム開発について」です。ここでオンラインゲームとは…!!楽しみですね。