ATMWRIによるUE5の記録

Unreal Engine 5 を使い始めました

ぷちスタを振り返って反省する

1週間というイベント開催期限中に記録を付ける余裕が全くなかったので復習がてら自分用メモを残すことにした。

1. ゲームとUIの関係について

ゲームの状態をどこで管理するのか悩んで結局BP_ThirdPersonCharacterLevel Blueprintに変数やらその処理を持たせることにした。Widgetはそれらの変数をバインドして表示するだけ。

  • Level BlueprintでWidgetの生成
  • 生成したWidgetにBP_Playerの参照をセット
  • BP_PlayerはUIの存在を知らない

LevelBlueprintで生成したWidgetが持つBP_Player変数をセット

反省点

変数とかはLevelをまたいで持ち越せるGameModeに持たせた方がいいらしい。

疑問点

Wigetアニメーションを使った場合、そのアニメーションのイベントをバインドするにはどうしたらいいのか?

2.Event周り

On Component Begin Overlapで取得できるOther Acterを使ってインターフェイス越しにプレイヤーの関数を呼び出すことにした。

アイテムはBPインターフェイスに対してイベントメッセージを送る
プレイヤーブループリント側であらかじめ作成したBPI_IPlayerを実装した
BPI_IPlayerの実装をBP_ThirdPersonCharacterで
下に伸びているノードは効果音の処理へとつながっている

反省点

スコア加算などの処理・効果音・その他エフェクトを連携させるにはEventDispatcherを使った方がいいのかもしれない。いまのところゲーム進行の管理がすべてBP_ThirdPersonCharacterに集約されてしまっているのでスッキリとさせたい

疑問点

他のプロジェクトではどのように各要素を連携させているのか?

3. Animation関連

反省点

IK_rigを使用してIK_Retargeterを作成、その流れで個々のアニメーションをリターゲティングして喜んでいたが、どうにもAnimation Bluprintそのものもターゲットにできるようなので試したい。

4.まとめ

これまでは、ただ漠然とチュートリアルをつまみ食いしながらUE5の各機能を触っていたが、ぷちスタに挑戦してようやく最初の一歩が踏み出せた気がする。まだぷちコン自体は終わっていないので、これらの反省点や疑問点、やりたいことを詰め込んで提出したい。

ぷちスタ作業初日

公式チュートリアルで肩慣らし

一か月ほどUE5を触ってきたが、各種機能を掘り下げていったっきりで、通しでアプリの作成を1度もしていない。ぷちコンのDiscordでもお勧めされていた公式チュートリアルYour First Hour in Unreal Engine 5 で復習をする。 Epicランチャーからいけるオンラインチュートリアルとは別のチュートリアル?のようで、その辺どうなっているのかよくわからないが少なくともこちらはUE 5 向けとあるので情報は新しそう。  

0.手を動かす前に

実際にTPSテンプレートでプロジェクトを作成した状態

プロジェクト設定前の状態
室温33度下で、何もしていないテンプレ状態のプロジェクトがこれだと暑すぎる
Edit -> Project Settings -> Engine -> General SettingsFramerateUse Fixed Frame Rate にチェックして Fixed Frame Rate を 30 にした。
FPS固定に設定後
心なしか涼しげな風が・・・来るわけない。この設定変更が難かしらの副作用を生むかもしれないので一応注意しておく。

1.Levelを作成する

emptyなLevelを作成して要素を配置していく

  1. フロアを配置
    適当なStatic Meshを配置・・・Alt + xyz軸でその場で複製できる
  2. ワールドを照らす明かりを追加
    Lights -> DirectionalLightで配置する
  3. プレイヤーの初期位置を指定
    All Classes -> PlayerStart・・・Endキーで最短のmesh表面に張り付く
  4. 大気の追加
    Visual Effects -> Sky Atmosphereで大気を追加し、DirectionalLightのDetailでAtmosphere Sun Lightにチェックを入れる。最初からtrueだった
  5. フォグの追加
    Visual Effects -> ExponentialHeightFogでフォグがかかる。大気の下が真っ黒だったのがましになる。
  6. 雲があったりなかったり
    Visual Effects -> VolumetricCloudで雲を追加できる
    ここまででの作業で画面はこんな感じに
    EmptyのLevelへ最低限の要素を追加
    プレイしたらbuildしてね的なメッセージが出たのでBuild -> Build Lighting Onlyでビルドしたら警告?メッセージは消えた。

2.ビジュアル要素を体験

LearningKitを使用したチュートリアル

  1. Migrateしたlevelをロードする
    3分くらいPCが唸る

    LearningKitの初回ロード

  2. SkyLightについて
    環境光だったり、シャドウ内のライトらしい。これを0にしてもなお光っているのはemissiveな属性を持っているとか。SkyLightを赤くしたら影がこんな感じに赤くなる

    SkyLightを赤くする

  3. 明暗順応について
    ポストプロセスボリュームが有効だと、暗いところから明るい場所へ人間の目が徐々に慣れていく感じの効果を再現するPostProcessVolume -> Detail -> Lens -> Exposureで露出パラメータを設定できる
    ポストプロセスの露出設定
    Min BrightnessMax Brightnessで設定した範囲でAuto Exposureが動作する。同じ数値を設定した場合は順応の変化がなくなる。Metering Modeをmanualにして固定とかにしていたが、どっちがいいんだろう。
  4. ライトシャフト
    DirectionalLightLight ShaftsLight Shaft Occlusion, Light Shaft Bloomを有効にすると、こんな感じに光のアレが表現される。Scalability:Hight以上でないと表示されなかった。
    ライトシャフト
  5. ライトの種類
    • Static: あらかじめシャドウとライトがベイクされる光源
    • Stationary:光源は移動できないが、シャドウが動的に生成される
    • Movable:動的にライト・シャドウが生成される
  6. Lumen
    初期設定でProject Settings -> Rendering -> Global Illmination -> Dynamic Global Illumination MethodLumenに設定されている
    Lumen 初期値
    これをNoneにするとパフォーマンスが改善するがこんな感じになる
    Lumen Noneにするとこうなった

3.ブループリントを触る

  1. LerningKitをプレイする
    なぜかそのままプレイできないので、ひとまずWindow -> World SettingsGame ModeをオーバーライドしてDefault Pawn ClassBP_ThirdPersonCharacterにすると動かせた
    TPテンプレートのプレイヤなら動く
  2. 動かなかった理由
    インポートしたLevelなので、もとのTPテンプレートプロジェクト設定と整合性が無くて動かない。

    LearningKitのBP側に出たエラー

  3. プロジェクトのInput設定
    TPテンプレートのプロジェクトセッティングでは以下のようになっている。

    PJ SettingsでInputを確認

  4. Input関係のノードを置き換える
    LearningKitのBPでWARNING!の出ている箇所はInputEvent関連なので、TPテンプレートのInput設定に置き換えていく。

    LearningKitのWARNING表示とInputEventの追加

  5. Action Mappingsの追加
    BPに表示されているWARNINGはProject Settings -> Inputに同じ名前でActionを新規作成してコンパイルを実行すると消えた。

    PJ SettingsにActionを追加していく

4.まとめ

公式チュートリアルは、ここまでで作成したプロジェクトで色々試してみよう!というまとめで締めくくられている。 Content Examplesが各種機能を網羅されていていいらしい。
最初の1時間というタイトルから肩慣らしのつもりが

と、3倍の時間が掛かってしまった。

Q:UE5でゲーム作れそうですか?
A:まったくできる気がしない

今更ながらブログを開始する

ブログ開始までの経緯

2020年に入ってからコロナの影響で気軽に外へ出かけられる雰囲気ではなくなってしまった。最初の一年目はメディアの報道に一喜一憂したり、自治体のHPで人口統計を見たりと、とにかく情報の収集と素人なり予想を立てたり『正しく怯えて』過ごしていた。

チュートリアル沼にハマりだす

2021年に入ってからは自宅で出来る新しい事に挑戦し始める。ゲームエンジンUnityがオンラインラーニングコースを無料で開放してくれたおかげでC#を使った簡単なゲーム開発を体験することができた。

そんなある日、学習記録に愛用していたOneNoteが不調となった。学習用ノートPCのVisual Studioがクラッシュする事が増えていたところに記録一部消失と重なりMS不信が爆発。Windows10をアンインストールしてUbuntuに乗り換えた。

「俺はMSに縛られない」とUbuntuと共に自由を手に入れたつもりで早速vs codegithubを使い始める。ついでにHTML文書でひっそりと記録を取ろうとMozillaの親切なHTML, CSS, JavaScriptチュートリアルを開始して2021年が終わった。

Bookを手に入れた

2022年初頭になぜか新しい言語 Rust のチュートリアルに浸り、チュートリアルやドキュメントの丁寧さに感銘を受ける。HTMLで記録をつけるよりmarkdownでサクッとつくれる mdBook が簡単で便利だった。ここで学習の記録を付けるための旅は終わるはずだったが...

Unreal Engine 5 とかいうやつ

2022年7月 知人に勧められてUE5を始める。Rustのユーザーフレンドリーなドキュメントやチュートリアルに浸って腑抜けになってしまったため、UE5の更新されない古いドキュメントや前バージョンのチュートリアル群に不安を覚える。

ネットで検索しようにも情報が少ないので、はまると中々抜け出せない。

最近はまったポイント
  • アニメーションの使いまわし ー> 誰かのブログでUE5からは新機能を使う事を知る
  • Android端末向けのビルド ー> outputlogみて.Net 3.5 が必要だと知る

ほかのユーザーが「どうやって使い方を覚えたのか不思議なくらい」情報がないので記録を残そうと無料ブログを始めるにいたる