投稿記事

UE5の記事 (51)

わんころのUE5勉強会 2023/03/20 00:06

自作ゲームの進捗08:やりたいことが増えすぎたので規模を大幅に縮小

久々の進捗報告ですが、どちらかというと停滞しました。

まだまだ自分のスキルが足りないため、色々勉強するためサンプルプロジェクトや、以前から進捗報告をしていたプロジェクトで演出などを組んだりしながらスキルアップをしておりました。

確実にスキルは上がったのですが、当初目指してた規模よりも大きくなりすぎたこと、収拾がつかなくなりそうだったので思い切って新しいプロジェクトにしました。

停滞と言っても、以前作成したリソースはすぐ利用できるし、使い勝手が良くなかった部分もこの際リファクタリングしようと思っているので違うステージを作ってる感じですかね。



モデリングモードの CubeGrid ツールを使い移動可能な部屋や通路のプロトタイプをざっと作成し、そこに床や壁の配置だけ行いました。


また、通路を行ったり来たりする作業が出てくるため、通路の各地にテレポート可能なポイントを設け、キーを押すとその場所へすぐ移動できるようにしました。

かなり簡易的なツールですが、テレポートしたいポイントを配置するだけなので割と楽になったんじゃないかなと思います。

かなり殺風景になってしまいましたので、小物系の配置やメインとなる謎解きなど考えていこうと思います。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

わんころのUE5勉強会 2023/02/13 00:51

自作ゲームの進捗07:IES ライトプロファイルを使ってみる

マーケットプレイスで公開中の無料コンテンツに IES Light Profile Pack というものがありました。

ライトに関する系の素材っぽいので確認してみました。

IES という単語は初めてでしたが、IES ライト プロファイル というものがあるらしく、ライト用のプロファイルみたいです。

作成中のゲームに懐中電灯を利用するので、利用できないかな?と思いました。


Point Light や Spot Light 等のプロパティに Light Function Material というものと、IES Texture というものがあります。

上記の無料コンテンツには、いくつかのサンプルが同梱されており、セットするだけで利用できました。
ただの Spot Light だとただ光ってるだけなので、見た目はどこかで変えようと思ってましたがこんな簡単に利用できるならありがたく使わせて頂こうと思います。


そのついでに、懐中電灯を動かした時に微妙に遅れて光源が付いてくるようなラグの処理も入れてみました。



Spring Arm Component のプロパティにある Enable Camera Rotation Lag にチェックを入れ、Camera Rotation Lag Speed でその速さを指定するだけだったので、これも簡単に実装出来ました。

ここ一ヶ月、身の周りが忙しくもあり、体調も崩していたので UE5 の勉強も含め全然進展はないのですが、諸々落ち着いたため戻ってきました。

やりたいゲームの発売が既に始まっているんですがぐっと堪えております。

最後に買った新作なんだっけ?と思って確認したら、去年3月に発売された GhostWire: Tokyo だったみたいで来月でもう一年!?という気持ちです。

ゲームやらなくなってからもう一年...ゲーマーとは一体...
その分、UE5が楽しいというものあるんですけどね!
まだまだ出来ることが少ないので頑張りたいですね~~

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

わんころのUE5勉強会 2023/02/01 20:29

自作ゲームの進捗06:実験的な演出を追加

ついこの間、新年あけおめ~とか言ってたのにいつの間にか1月が終わっておりました...早すぎますね。

今月 UE5 を触る時間がかなり減ってた気がします。
とりあえず進捗報告をしておきます。

以前作成したトイレ内で演出を追加してみました。
読み終わったら、周りの灯りがなくなるありきたりな演出です。

この演出を行うにあたって Data Layer を採用しました。
エディタ上で不要なものをロード/アンロードして管理するために Data Layer は採用してたのですが、ようやくランタイムでの実験を行いました。

結果は成功だと思います。
Data Layer に登録したアクタを丸ごと非表示にしたりアンロード/ロードしたりが簡単に出来るので扱いは非常に簡単でした。

先日 Game Features プラグインをお試しで触ってこれもかなりいい機能だなーーと思いました。

UnrealC++ が使えると独自の拡張も出来てもっといいんだろなと思いますが、スキルがないのでプリセットのものを使うくらいしかできませんね...

今の所 Game Features プラグインでは Actor Component だけ試してみましたが、Component の追加先との依存関係がなくなってるのでかなりいいですね。

Data Layer と Game Features プラグインは簡単な使い方くらいの紹介動画を作成しようと思ってます。

前の動画投稿から三週間も空いてしまいました...
とりあえず数日以内には一本上げれるよう、気合を入れるしかありません。


実は1月初旬~遅くても中旬までには新年あけましておめでとうございます!とアンケートにご協力頂いた方や、コメント頂いた方の返信動画をまとめてやるつもりだったんですが、時期を逃した感が半端ないですね。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

わんころのUE5勉強会 2023/01/18 00:03

自作ゲームの進捗05:引き出しとドアの開閉処理

ここ1週間ほど UI 周りを触っていてメインの処理から離れていました。
動画のようなインタラクト処理の一部で、引き出しとドアの開閉処理を作成しました。

この辺りの処理はこれっきりの BP だと勿体ないので再利用できるようにある程度は柔軟にしたつもりです。

久々に通常の BP を作成して目に見える部分が出来た気がします。
今のところ BaseBP やシステム周りの部分を作っていたので動きが出てくると楽しみも一気に増しますね。

この作業でこの一週間分は一段落したので動画作成もしないとですね。

動画作成してる途中に辞めたお蔵入りシリーズも公開していこうかな...

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

わんころのUE5勉強会 2023/01/07 22:07

【UE5】Enhanced Input で利用できる他の関数

Enhanced Input に関数は沢山ありますが、調べても日本語の情報があまり見つからなかったので私なりに検証した内容をまとめています。

相変わらずですが間違ったことを書いてる可能性がございますのでご注意下さいませ。

C++(ヘッダ/ソース)ファイルの場所

UE5.0 のデフォルトのインストール先:
C:\Program Files\Epic Games\UE_Version\Engine\Plugins\Experimental\EnhancedInput\Source\EnhancedInput

UE5.1 以降のデフォルトのインストール先:
C:\Program Files\Epic Games\UE_Version\Engine\Plugins\EnhancedInput\Source\EnhancedInput
(UE5.1 以降で Experimental でなくなったためファイルパスが変更されています)

上記ファイルパスまで移動し
「Private」に ".cpp"
「Public」に ".h" が入ってました。
その中の EnhancedInputSubsystemInterface.h(.cpp)、EnhancedInputLibrary.h(.cpp) にこの先出てくる関数が確認できました。


IMC の大事な仕様(2023-12-07 文面を修正)

個人的に結構大事な仕様だなと思ったのと、マニュアルに書いてなさそうだったので追記しました。

IMC を開くと一番上に Mappings という項目があり、その横の [+] ボタンをクリックすることで入力アクションやキー入力の割り当てが出来るようになっています。


この情報は IMC の「Get Mappings」から配列で取得でき、型は Enhanced Action Key Mapping構造体 になっています。


この IMC に対して例えば「Unmap All(後述)」を使うと IMC の中に割り当てた Mappings を全て削除することができますが、Blueprint からIMC を直接書き換えた場合、上書き保存を示すマーク「*」が付きません

そのためプロジェクトを再起動する時に保存が聞かれることもないですし、プロジェクトを再起動後は「Unmap All」する前の状態に戻っています。これはパッケージ化したゲームでも同じ挙動になっています。

この挙動はバグではなく仕様とのこと。

Unreal Engine Issues にて「ゲームプレイ中に行われたInputMappingContextへの変更は、エンジンを再起動すると以前の状態に戻ります」という報告があります。

By Design と記載されており仕様のようです。
IMC を直接書き換えた後、起動中は問題ないですが、ゲームを起動し直す時には注意が必要ということになります。

以前アップロードした動画でキーコンフィグを実装する際、IMC を直接書き換える方法で紹介しましたが、上記理由から IMC を書き換えるキーコンフィグはやめておいた方がいいかなと思いました。


そのため、Enhanced Input でキーコンフィグを実装する場合は、SaveGameObject で割り当てたキーを保存するようにしておき、ゲーム起動時にその情報をロード> 後述の「Add Player Mapped Key」を使って表面上キーを置き換える方がいいかなと思います。
※UE5.3で非推奨な機能となり利用できなくなっています

以降は過去に検証などを行った関数をまとめたものです。


Has Mapping Context

▼ 公式ドキュメント
https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Input/MappingQueries/HasMappingContext/


Enhanced Inbput Local Player Subsystem に "Mapping Context" で指定した IMC が追加されているかを確認する関数です。

True でその IMC は追加されていて、
False でその IMC は未追加であることが分かります。

「Add Mapping Context」されているか確認したい時に利用できそうです。


Query Keys Mapped to Action

▼ 公式ドキュメント
https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Input/MappingQueries/QueryKeysMappedtoAction/


"Action" で指定した「入力アクション」のキーすべてが "Return Value" の Key構造体の配列で返ってきます。


例えば "Action" に IA_Jump を設定し、IMC に割り当てた IA_Jump が、画像のように三つのキーで設定されていた場合は "Return Value" の Key構造体の配列には下記のように割り当てた順番で返ってきます。

Key構造体[0]:「スペースバー」
Key構造体[1]:「マウスの右ボタン」
Key構造体[2]:「T」

この関数には IMC の指定はなく、入力アクションのみ指定しています。
IA_Jump を利用している複数の IMC があると配列の中身がどうなるか気になります。

そこで「IMC_A」「IMC_B」と二つの IMC を用意してみました。


検証1:Priority で優先順位を与えた場合


IMC_A と IMC_B に画像のような "Priority" を与えています。(「Add Mapping Context」する時の "Priority" のことです)
  • 「Print String」で配列の中身を出力したところ、Priority の高い IMC から先に配列に格納されていることが確認できました。(「Print String」の出力は下の方が先に処理されています)
  • IA_Jump で設定した順番で配列に格納されていることも確認できます。また、IMC_B の4キーとKキーの位置を入れ替えた場合は配列の中身もそれに合わせて出力されていました。
  • 重複したキー(スペースバー)が見つかった場合、2回目は出力されていないことも確認できます。
    重複したキーがあった場合、Priority の高い方が先に配列に入り、低い方は無視されるといった結果になっていました。

検証2:同じ Priority の場合

  • 後から「Add Mapping Context」した方が先に配列に格納されたことが確認できました。
  • こちらも同じく重複したキーがあった場合2回目は無視されます。

IMC_A だけ「Add Mapping Context」した場合は IMC_B の結果は配列に入りませんでした。「Has Mapping Context」が True を示すもの(現在有効な IMC) のみに対して作用するということです。


Query Map Key in Active Context Set(2023-03-20追記)

▼ 公式ドキュメント
https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Input/MappingQueries/QueryMapKeyinActiveContextSet/


何を行うための関数なのか分かりませんでした...
一応リストに載せてたのでそのまま残しています。

Query Map Key in Context Set(2023-03-20追記)

▼ 公式ドキュメント
https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Input/MappingQueries/QueryMapKeyinContextSet/


何を行うための関数なのか分かりませんでした...
一応リストに載せてたのでそのまま残しています。


Break Input Action Value

▼ 公式ドキュメント
https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Input/BreakInputActionValue/


Input Action Value 構造体("In Action Value")を、X, Y, Z に分解する。サポートされてない値(軸)は 0 が返ってきます。

軸を扱う入力を分解するようなので
「Break Vector」に似たような扱いでしょうか。


Make Input Action Value

▼ 公式ドキュメント
https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Input/MakeInputActionValue/


XYZ の値を使って Input Action Value構造体を作成します。

"Match Value Type" が参照渡しになっており、接続しないと有効なインプットが必要とエラーが出ます。
利用されてない軸には 0 が設定(無視)されるようです。

既存の Input Action Value を変更することを目的としているようです。後述の「Inject Input for Action」「Inject Input Vector for Action」などと組み合わせて使ったりできそうでした。


Inject Input for Action(2023-01-19追記)

▼ 公式ドキュメント
https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Input/InjectInputforAction/


"Action" に繋いだ指定の入力アクションへのトリガーを "Raw Value" の値に応じてシミュレートするような使い方になりそうです。
"Modifiers" や "Triggers" も考慮したシミュレートをしたい場合は必要に応じて設定できます。


例えば "Action" に IA_Jump を設定し、"Raw Value" に前述の「Make Input Action Value」を使って Input Action Value構造体を渡します。

これでプレイしてみると1キーを押した時に入力アクション IA_Jump がトリガーされジャンプしたことになります。

この関数に IMC を指定するところはありませんが、「Has Mapping Context」が True を示すもの(現在有効な IMC) が対象になります。

この入力アクションを何らかの理由でトリガーしたことにしたい時に使えそうな気はしましたが、そういうシチュエーションを思いつかなかったので例を挙げることができませんでした。


Inject Input Vector for Action(2023-01-19確認)

▼ 公式ドキュメント
https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Input/InjectInputVectorforAction/


上記「Inject Input for Action」の Vector 入力が取れるバージョンです。
これも入力アクションのシミュレートをしたりなどに使えるんだと思いますが、そういうシチュエーションが想定できず...

Request Rebuild Control Mappings(2023-05-31修正)

▼ 公式ドキュメント
https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Input/RequestRebuildControlMappings/


"Rebuild Type" で指定した内容に沿って IMC の再構築を行います。

この関数は「Add Mapping Context」「Remove Mapping Context」「Clear All Mappings」などの、IMC を更新する関数で利用されてました。

そのため、IMC 自体をなんらかの手段で変更する場合は、この関数を使って更新する必要があります。


一例ですが、ゲーム中のキーコンフィグでユーザが入力したキーに変更するといった処理を実装したとします。

IMC に登録している Mappings(Enhanced Action Key Mapping構造体)を参照で取得してメンバ内を直接書き換える実装をした場合、IMC のファイル上は変更されますが、「Request Rebuild Control Mappings」が呼ばれないとゲーム内では反映されませんでした。

先程挙げたような Blueprint に公開されている関数内で「Request Rebuild Control Mappings」が呼ばれているものを使った場合は問題ないですが、特に手動で IMC を触ることをした場合は、ゲーム内だけで見ると反映してないように感じるので注意が必要です。



再構築を行う対象は「Enhanced Input Local Player Subsystem」が持つ IMC すべてに実行されます(前述の「Has Mapping Context」が True を示すものが対象です)

"Options" は「Add Mapping Context」などに出てきた "Modify Context Options 構造体" です。

ピンを分割(もしくはBreak)して表示される "Ignore All Pressed Keys Until Release" は True にしておく方がいいかもしれません。

"Options" については 以前の検証記事(Ignore All Pressed Keys Until Release) をご覧ください。

"Rebuild Type" は EInputMappingRebuildType という Enum 値を指定します。

  • None:再構築は行わず何も処理しないようです。
  • Rebuild:一般的な再構築ならこれでいいと思います。各入力アクションの Triggers/Modifiers などの情報がそのまま保持されます。
    キーコンフィグでは一般的にユーザが入力したキーを入れ替えるだけで良さそうなのでメインはこれになりそうな気がします。

  • RebuildWithFlush
    「入力アクション」自体の Triggers/Modifiers など変更を加えた場合、上記 Rebuild だけでは再構築されないようです。
    一度フラッシュを行い、そこから再構築という流れを取ってる感じがします。キー以外の変更を伴う場合のオプションではないかと思います。


Map Key

▼ 公式ドキュメント
https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Mapping/MapKey/


”ターゲット” に指定した IMC 内で、"Action" に指定した入力アクションを対象に "To Key" で指定したキーの割り当てを追加します。


例えばこの画像の場合 ”ターゲット” で指定した IMC の中にある IA_Jump に対して Bキーを追加するという挙動になります。


「Map Key」の注意点は、割り当てるキー("To Key")に関しては重複チェックはされていないようで、「Map Key」を呼ぶたびに上の画像のようにキーが追加され続けるので注意です。

キーが追加されるだけなので Triggers/Modifiers のようなオプションなどは考慮されません。

Unmap Action

▼ 公式ドキュメント
https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Mapping/UnmapAction/


”ターゲット” に指定した IMC 内で、"Action" に指定した入力アクションを丸ごと削除します。


例えばこの画像のような設定で "Action" に IA_Jump を指定した場合、入力アクション(IA_Jump)ごと消えていることが確認できます。

Undo(Ctrl + Z) が効かないみたいなので、動作確認する時はファイルコピー推奨です。


Unmap Key

▼ 公式ドキュメント
https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Mapping/UnmapKey/


”ターゲット” に指定した IMC 内で、"Action" に設定した入力アクションを対象に、"Key" で指定したキーと同じキーの割り当てがあった場合それだけ削除します。

上記「Unmap Action」に、追加でキーを指定できるバージョンです。


例えばこの画像の場合、"Action" に IA_Jump、"Key" にスペースバーを指定した場合、スペースバーだけが削除されます。

"Action" や "Key" を指定しない場合は、対象の入力アクションやキーがないため削除されませんでした(何も起こらない)

Undo(Ctrl + Z) が効かないみたいなので、動作確認する時はファイルコピー推奨です。


Unmap All

▼ 公式ドキュメント
https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Mapping/UnmapAll/


”ターゲット” に指定した IMC のマッピングを全てクリアする。
入力の割り当てを綺麗にする効果です。

Undo(Ctrl + Z) が効かないみたいなので、動作確認する時はファイルコピー推奨です。


Clear All Mappings(2023-07-07追記)

▼ 公式ドキュメント
https://docs.unrealengine.com/5.1/en-US/BlueprintAPI/Input/ClearAllMappings/

「Add Mapping Context」で追加された IMC を全て削除する。

例えばゲーム中にリトライや、タイトル画面からやり直すなどした場合に、実装によっては余分な IMC が追加されている可能性があるため、一度すべて削除して必要な IMC だけ再登録するような処理などに使えそうです。


Add Player Mapped Key(2023-05-31修正)

※UE5.3で非推奨な機能となり利用できなくなっています

▼ 公式ドキュメント
https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Input/PlayerMappable/AddPlayerMappedKey/

"Mapping Name" に指定した名前と一致する名前を探し、見つかった場合そのキーを "New Key" に置き換えます。
実行中、一時的にキーを変更したい時に利用する関数みたいです。


一致する名前が複数ある場合、そのキー全てが置き換えられます。


"Mapping Name" の名前というのは IMC で割り当てた各入力アクションの中にある Player Mappable Options 内の "Name" がここに該当します。

上記二つの画像が示す挙動は、有効な IMC に "JumpMappable" という名前があるかを確認し、一致した名前があった場合、その名前をすべてチェックします。

そして、IA_Jump に割り当たっているスペースバーに "JumpMappable" という名前が見つかったので、"New Key" に指定した「5キー」がジャンプのキーに置き換わります。


例えば IA_Jump にスペースバーと左クリックが割り当たっていて、両方 "JumpMappable" という名前にしていた場合、この二つのキーが両方「5キー」になります。

入力アクションを跨いでも同じ効果があるため IA_Shoot に "JumpMappable" という名前を設定したらこれも置き換わります。

"Mapping Name"に同じ名前を指定するケースがあるのか分かりませんが、もし同じ名前にした場合は「Add Mapping Context」で指定する Priority が高い方が優先される挙動になっていました。


また、IMC 自体を直接編集している訳ではないみたいです。
(IMC を開いたままゲーム中の挙動を確認しても IMC 自体には何の変化もありませんでした)


前述の「Request Rebuild Control Mappings」を使ったあと、ゲームを起動し直しても IMC 自体は書き換わっていませんでしたので置き換えると表現しています。

キーコンフィグに利用する場合は、Save Game Object を利用してキーコンフィグしたキーを保存し、ロード時にその情報を使ってこの関数で置き換えるような実装でキーコンフィグが実現できそうです。


戻り値の "Return Value" は置き換えられたマッピングの数を Intger型で返すそうですが、複数あっても1しか返ってこなかったためよく分かりませんでした。

"Options" は Modify Context Options構造体です。
Options については 以前の検証記事(Ignore All Pressed Keys Until Release) をご覧下さい。


Get Player Mapped Key(2023-05-31追記)

▼ 公式ドキュメント
<見つからず>

前述の「Add Player Mapped Key」にて置き換えられたキーを取得する関数で、この関数だけ単体で使っても(多分)None しか返ってこないです。

ここで指定する "Name" は前述の「Add Player Mapped Key」の引数にある "Mapping Name" と同じ名前を指定します。

「Add Player Mapped Key」で置き換えたあと、そのキーだけ取得したい場合に利用できます。



Add Player Mappable Config(2023-03-20追記)

▼ 公式ドキュメント
https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Input/PlayerMappable/AddPlayerMappableConfig/

"Config" に指定の "Player Bindable Input Config" を追加します。
UE5.1 だと名称が変更されており、Player Mappable Input Config になっています。

"Player Bindable Input Config" / "Player Mappable Input Config" についてどういうファイルなのかは別記事で簡単にまとめました。


Get All Player Mappable Action Key Mappings(2023-05-31追記)

▼ 公式ドキュメント
<見つからず>

"Is Player Mappable" が ON になっているキーだけを取得出来る関数ですが、取得可能な範囲は「Has Mapping Context」が True を示すもの(現在有効な IMC) が対象になります。

キーコンフィグ可能なキーだけ取得できる凄い関数ですが、前述の通り現在有効な IMC に設定された "Is Player Mappable" のキーのみ取得されます。

例えば乗り物に乗った時だけそれ用のキーを割り当てた IMC を追加するような実装をしていた場合は、キーコンフィグ時に乗り物に乗ってないと「Add Mapping Context」されていないのでそのキーが取得できない状態が予想されます。

これを解決できるアセットが用意されています。
別記事にて紹介している"Player Bindable Input Config" / "Player Mappable Input Config" に簡単な使い方をまとめています。



"Is Player Mappable" というフラグは IMC を開き、各入力のキー割り当てを展開すると出てくるフラグのことです。

このフラグにチェックを入れたあと保存してエラーが出た場合、"Player Mappable Options" を展開すると出てくる "Name" に好きな名前を入れておきます。



例えば移動キーで使われる WASD のキーで A と D だけ "Is Player Mappable" にチェックを入れ、上記の画像のように1キーを押してこの情報を出力した結果がこれです。

「Add Mapping Context」で複数の IMC が有効になっている場合はそれらも含まれます。


ややこしすぎるって...

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

5 6 7 8 9 10 11

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索