Posted Articles

UE5's articles. (56)

わんころのUE5勉強会 Apr/28/2025 21:37

【UE5:検証】CommonUIとGame PadのFace Button Bottom(Aボタン)

皆様、こんばんは!

以前 X で検証した内容ですが、解決できずこんな仕様なんだというのが分かっただけの記事です。


▼ 以前色々試して撃沈した様子
https://x.com/UE5wancoro/status/1884024134549790825


この記事の内容

CommonUI + Input Key Selector を使ってキーコンフィグを実装しようとした時に、Face Button Bottom(以降Aボタン)がマウス左クリックとして扱われたのを検証していた時のお話です。


プロジェクト設定

CommonUI プラグインを有効にすると、プロジェクト設定の「GameViewportClientClassName(ゲームのビューポートクライアントクラス)」で "CommonGameViewportClient" を選択できます。

以降はこの設定にしてる場合の Input Key Selector の挙動です。


どういう挙動なのか


UI 作成時に "Common User Widget" を親にし、
Canvas Panel, Input Key Selector を配置しました。


ゲームパッドで A, B, X, Y ボタンを押した動画です。
分かりづらいですが Aボタンの部分が「マウスの左ボタン」となっています。


Aボタンが左クリックとして扱われる

CommonUI の入力等に関しては 入力技術ガイド に色々書いてありました。

一部抜粋:
FCommonAnalogCursor では、現在のウィジェットで 結合アクション によってキャプチャされていないゲームパッド上の標準的な「Accept」アクションの入力は処理しません。代わりに、その入力が FAnalogCursor::HandleKeyDownEvent に送信されて、FAnalogCursor によって FSlateApplication で処理する合成マウス クリック イベントが作成されます。
この時点で、このマウス イベントは通常のクリックと同じような入力処理プロセスを経て、最終的なクリックをトリガーします。

自分には難しい内容だったので誤った解釈をしている可能性はありますが、ゲームパッド操作時に内部的にマウスカーソルで操作してるような動きに置き換えられているので、Hovered や Clicked イベントが利用できるのかなと思いました。

また、ゲームパッド上の標準的な「Accept」というのがAボタンのことなら、Input Key Selector でAボタンを押すと通常のクリック(左クリック)として扱われるという説明に納得できます。


特定の操作時はAボタンとして扱われる


この動画は Input Key Selector を先にマウスでクリックして入力受付状態にし、ゲームパッドでAボタンを押した時の挙動です。

この場合はAボタンとして扱われるようです。
ゲームパッドで Accept(Aボタン) を利用しなかったので、通常のゲームパッドとして認識されたのかなと思いました。

また、Input Key Selector の On Key Selected イベント時に入力されたキーの種類を判別する Blueprint も作成し、入力がマウスであることも確認出来ました。


※ チェック用の処理


ちなみに Common Input Subsystem> Get Current Input Type の方で確認すると GamePad と表示されます。

この結果で、Input Key Selector 選択時はゲームパッド入力の判断が出来ていて、内部でマウスイベントに置き換えられているということが分かりました。

なるほど~とは思いましたがAボタンで返ってきて欲しかったんですよね...


C++ を使えば回避できるかも?

私はこの時点でお手上げだったので解決はできませんでした。
UE5.4 以降ならこういう方法があるそうです。

https://forums.unrealengine.com/t/why-does-left-mouse-click-register-when-i-press-gamepad-face-button-bottom-on-gamepad/1809814/3


他の機能で代用しようか検討中

CommonUI を使うとボタンやスライダ含め、ゲームパッドでのUIナビゲーションに利用できそうでいいな~と思ってたんですが、ゲーム制作にキーコンフィグを入れようと確認していた時にこの内容にぶつかってしまったのが今回の経緯でした。

プロジェクト設定で "GameViewportClient" にしていればこの挙動は発生しなかったので CommonUI をやめて UI Navigation 3.0 を代わりに使う方法も検証してたのですが、エディタが高頻度で落ちるようになったのでやむなく断念しました。

代わりにボタン+テキストの構成で、キー入力があったらキーの名前をテキストにセットしてそれっぽく見せる方法でどうにか出来ないかなと考えています。

キー入力の取得やキーコンフィグは Enhanced Input User Settings を使って色々検証出来ているので UI のナビゲーションが出来れば行けそうな気はしています(フラグ)


最後に

やっぱり UI 周りかなり難しいなと感じますね...
もうそろそろ UE5.6 もリリースになると思いますが何かしらアップデートがあると嬉しいですね。

UE5.6 の新テンプレートも結構楽しみにしています。


それではまた!

If you liked this article, support the creator with a tip!

Sending tips requires user registration.Find details about tips here.

わんころのUE5勉強会 Feb/28/2025 21:32

【UE5:検証】Actor Componentでタイムラインを使ってみる

皆様、こんばんは!

最近 UE5 に触れる時間が少し出てきたのでまた楽しんでおります。

今回は「Add Component by Class(クラスごとにコンポーネントを追加)」ノードを利用した時にたまたま見かけた "Timeline Component" というコンポーネント。

Actor Component で「Add Timeline」は利用できないけどコンポーネント経由ならもしかして利用できたりするのかな...という疑問から始まった久々の検証記事です。

結果的に利用できたという内容なのですが、Actor Component で「Add Timeline」ノードは普通の方法で利用できず、使い方的に大丈夫なのかは一切不明なため利用の際は十分ご注意下さい!

UE5.3.2 を利用しました。


この記事で行う事

Actor Component 内で Timeline Component を利用したタイムラインの挙動を作成し、この Actor Component を別の Actor(BP_Cube) で利用してキューブの位置を動かすだけのサンプルを作成します(Blueprint のみです)

始める前に

既にそういう機能が Fab で販売されているので興味のある方は是非!
Component Timeline


Actor Component では検索してもヒットしない


タイムラインの追加はグラフ上で右クリックし、add timeline など検索すると見つかりますが、Actor Component では "状況に合わせた表示" のチェックを外しても見つかりません。

パレットからドラッグ、別の Actor BP からコピペして張るとかも禁止されています。

そこで今回の趣旨である "Timeline Component" を使ってタイムラインを作成し、必要なイベントをバインドして利用するというのが目的です。


Actor Component の作成


コンテンツブラウザから右クリック> ブループリントクラス> Actor Component をクリックし、名前を "AC_TimelineSample" で作成しました(AC = Actor Component)

Timeline Component の追加


"AC_TimelineSample" のイベントグラフで、「BeginPlay」から「Add Component by Class」を繋ぎ、"Target"ピンに「Get Owner(Actor Component)」、"Class"ピンに [Timeline Component] を指定します。

そして "Return Value"ピンから変数へ昇格(Promote to variable)します。
いつもならここで変数名を決めるんですが、変数名を変えてもデフォルトの New Var に戻ってしまうのでそのまま New Var として扱います(理由は分かりません)



タイムラインエディタ内の [+トラック]ボタンからトラックを追加することができますが、そのトラックは関数が用意されています。

画像にも載せましたが「Add Interp Float」「Add Interp Vector」「Add Interp Linear Color」「Add Event」となっています。
今回はキューブの位置を動かすだけなので「Add Interp Float」を利用します。


「Add Interp Float」とイベントのバインド


先程の New Var を作成した続きです。
New Var から引っ張り「Add Interp Float」を出します。

"Float Curve"ピンから引っ張り、これも変数へ昇格しました。後ほどカーブアセットを作成して指定します。

"Interp Func"ピンにはカスタムイベントを繋ぎ、名前はタイムラインノードに合わせて Update としました。

例えばタイムラインの「Play from Start」を呼ぶと、Update が再生~終了まで継続的に呼ばれます。

"Output"ピンには後ほど作成するカーブアセットに基づいた Float値が流れてきます。後ほどキューブの位置を動かす処理で追記します。

"Property Name" / "Track Name"ピンに必要に応じて名前を付けます。
プロパティ名・トラック名それぞれ None でもバインド先の Update はちゃんと機能していたので必須ではないようです。


「Set Timeline Finished Func」とイベントのバインド

キューブを動かすだけなので終了後に何かすることはないのですが、タイムラインの再生終了後に何かしたい時の備忘録として記載しました。
(おまけの項目で簡単に触れています)



先程の「Add Interp Float」からの続きです。
今度は New Var から引っ張り「Set Timeline Finished Func」を出します。これはタイムラインの "Finished" 実行ピンと同じくタイムラインの再生終了時にバインドしたイベントが呼ばれます。

"New Timeline Finished Func"ピンにカスタムイベントを繋ぎ、名前を「FinishedTimeline」としました。

必須ではないですが、イベントディスパッチャー(OnFinished としました)を作成し、「FinishedTimeline」の後に呼び出しておくと今回作成した AC_TimelineSample を BP で利用する際、"OnFinished” というイベントで利用できるので便利になるかもしれません。



カーブアセットの作成


コンテンツブラウザから右クリックし、その他> カーブをクリックします。「カーブクラスを選択」のウインドウが出たら Curve Float を選択ます。名前は CA_Cube としました(CA = Curve Asset)


CA_Cube を開き、右クリック> キーを追加から2つキーを追加します(マウスホイールをクリックでもキーの追加は可能です)

追加されると △ アイコンがタイムライン上に作成されます。



1つキーをクリックし、左上の入力欄へ直接数値を入力します。
記載がないので分かりづらいですが、左側が時間、右側が値になります。それぞれ 0, 0 のキーと、1, 1 のキーが出来ればOKです。

これは1秒かけて0~1へ値が変化するという意味になります。
Float値は先程「Add Interp Float」で作成したカスタムイベント(Update)の "Output"ピンから受け取ることが出来ます。


カーブアセットをセットして残りの処理を完成させる

AC_TimelineSample に戻り、変数 "Float Curve" の初期値に CA_Cube をセットします(表示がない場合は AC_TimelineSample のコンパイルが必要です)



AC_TimelineSample の「BeginPlay」に追加の処理を入れていきます。New Var の変数を昇格した後くらいに、「Get Owner」>「Get Actor Location」を出し、"Return Value" を変数に昇格します。

名前を "Start Location" としました。
この位置から適当な距離移動させるために利用します。



次は「Add Interp Float」で作成したカスタムイベント(Update)に追加の処理を入れていきます。

Lerp(Vector) の "Alpha"ピンと "Output"ピンを繋ぎ、 "Start Location" から Y軸方向に適当な距離動かすような処理にしました。

これで1秒かけて初期位置から250動く挙動が完成です。


BP_Cube で AC_TimelineSample を利用する

コンテンツブラウザで右クリックから、ブループリントクラスをクリックし、Actor を選択して作成します。名前を BP_Cube としました。



BP_Cube を開き、「コンポーネント」パネルからキューブと、AC_TimelineSample を追加したのが画像の左側です。

BP_Cube のイベントグラフより、"AC_TimelineSample"> "Get New Var(Timeline Component)"> 「Play from Start」を出し、「BeginPlay」と繋いだのが画像の右側です。



余談ですが、「Play from Start」はタイムラインの入力実行ピンの1つです。これは最初からタイムラインを再生したい時に利用できます。


これで BP_Cube をレベルに配置してプレイすると、キューブの位置が1秒間Y軸方向に250動きます。
簡単な挙動ですが、タイムラインの機能は利用出来てそうな雰囲気です。

おまけ:タイムラインの再生終了時に何かしたい場合


「Set Timeline Finished Func」の所でちらっと書いた Finished ですが、使い方は BP_Cube 内だとこんな感じになります。

また、タイムラインで利用可能な関数はイベントグラフで右クリックから「コンポーネント>タイムライン」カテゴリで確認してみて下さい。


最後に

冒頭にも書きましたが、Actor Component ではタイムラインノードが使えないので無理やり使ってるような気がしなくもないです。

利用できると便利なのに...と感じることがちょくちょくあったので今回はとても勉強になりました。

それでは、また!

If you liked this article, support the creator with a tip!

Sending tips requires user registration.Find details about tips here.

わんころのUE5勉強会 Jan/20/2025 21:44

【UE5】よく忘れるセットの「Difference」「Intersection」「Union」備忘録

皆様、あけましておめでとうございます!
今年も宜しくお願い致します!



新年早々から備忘録ですが、変数のセットで利用できる関数「Difference」「Intersection」「Union」というセット同士を比較してなんかする関数があるのですが未だに結果どうなるんだっけ...がごっちゃになるので備忘録となります。


変数のセットというのはこれです。



今回利用する変数は String 型のセットにしています。
変数が二つ必要なのでそれぞれ画像のように用意しました。
(※ 変数名は String A, String B ですが、記事内では Set A, Set B と呼んでいます)

この変数を利用して「Difference」「Intersection」「Union」の結果どうなるかをまとめた記事になります。

前提として第一引数に「String A(Set A)」、第二引数に「String B(Set B)」を繋いだ結果になります。


Difference


Difference は Set A の中に Set B と同じ要素があればそれを除外した要素だけ出力されます。

Set A は「A, B, C」、Set B は「D, E, F」となっており、 Set B と同じ要素はないため Set Aの「A, B, C」がそのまま出力されています。



もう一つの例で Set B の初期値を「D, A, C」とした場合は
Set A の「A, B, C」から Set B と同じ要素「A, C」を除外した B が出力されたということになります。

Intersection


Intersection は Set A と Set B で重複する要素だけ出力します。

Set A は「A, B, C」、Set B は「D, E, F」となっており、重複する要素が1つもないため結果は何もなしです。



もう一つの例で Set B の初期値を「D, A, C」とした場合は
Set A の「A, B, C」と重複する要素「A, C」が出力されたということになります。

Union


Union は Set A と Set B を結合した結果を出力します。
もし Set A 内に Set B と重複する要素があった場合はその要素は結合されず除外されます(そもそもセットは重複する要素を持つことが出来ません)

Set A は「A, B, C」、Set B は「D, E, F」となっているので重複した要素がないため全て結合された結果になっています。



もう一つの例で Set B の初期値を「D, A, C」とした場合は
Set A の「A, B, C」と重複する要素「A, C」が除外されて結合されるため「A, B, C, D」が出力されたということになります。

最後に

今年は UE5 触れる時間が作れますように><

If you liked this article, support the creator with a tip!

Sending tips requires user registration.Find details about tips here.

わんころのUE5勉強会 Oct/03/2024 20:07

【UE5】パッケージ化した後のセーブファイルの場所

※ 2024-10-08 追記

X にて、らりほまさんより AppData にセーブファイルが保存されるのは Shipping の時で、Development など別の Build Configuration でパッケージ化した場合、セーブファイルはパッケージ化したフォルダ内に保存されることを教えて頂きました!本当にありがとうございます!

https://x.com/rarihoma/status/1842152106737926214

それに伴い記事を加筆修正致しました。



皆様、こんばんは!

セーブファイルを消してパッケージ化したのに、いざ起動するとセーブファイルがロードされてるということがあり、以前 X で投稿したものですが記事にしてみました。

https://x.com/UE5wancoro/status/1700604417953976604


「Save Game to Slot」を使ってセーブを行った時、所定の場所にセーブファイルが作成されますが、エディタ(UE5)でセーブした時と、パッケージ化した物を起動してセーブした時パッケージ化する時に選択したもので保存場所が違っています。



エディタ(UE5)操作中にセーブした時

場所:プロジェクトフォルダ\Saved\SaveGames 内の「○○.sav」

こちらはパッケージ化ではなく、UE5 上で作成したセーブデータになります。エディタ上でセーブした際は作成中のプロジェクトフォルダ内の上記パスに保存されます。


Shipping でパッケージ化したものを起動してセーブした時

場所:C:\Users\"UserName"\AppData\Local\"ProjectName"\Saved\SaveGames 内の「○○.sav」

Shipping でパッケージ化した時は上記パスに保存されます。

「エディタ(UE5)操作中にセーブした時」の場所からパッケージ化前にセーブファイルを削除していたとしても、実際にロードされるセーブファイルは上記パスなので注意が必要です。

また、上記パス内にある "AppData" というフォルダは最初隠しフォルダになっています。


AppData フォルダにアクセスする

アクセスするだけなら他にも方法はありますが、隠しフォルダを表示する方法を紹介しておきます。

エクスプローラーの「表示」タブから "隠しファイル" にチェックを入れると表示されます。一個上の "ファイル名拡張子" にチェックを入れるとファイルの拡張子が表示されるので必要に応じて入れておくといいと思います。

Windows11 の場合は「表示」>「表示」>「隠しファイル」という項目があるそうです(環境がないためネットで調べた情報になります)


それ以外でパッケージ化した場合

場所:パッケージ化したフォルダ\"ProjectName"\Saved\SaveGames 内の「○○.sav」

パッケージ化する際に、パッケージ化したデータの保存場所を聞かれます。そのフォルダ内の上記パスに保存されるようです。



「プロジェクト設定(○○)の使用」ですが、○○の部分がプロジェクト設定で決まっています。


「プロジェクト設定」>「パッケージ化」>「ビルドコンフィギュレーション」から変更できます。現在 Development のため「プロジェクト設定(開発)の使用」になっています。
これを選択してパッケージ化した場合も前述した保存場所と同じです。

今まで Shipping 以外の確認をしたことがなかったため大変勉強になりました!改めまして、らりほまさん本当にありがとうございました!

If you liked this article, support the creator with a tip!

Sending tips requires user registration.Find details about tips here.

わんころのUE5勉強会 Sep/06/2024 01:56

【UE5】Niagara の Emitter Summary(エミッタの概要)でプロパティを整理する

※ 本記事では UE5.3.2 を利用しています

Niagara のエミッタで利用できる「エミッタの概要(Emitter Summary)」についての記事です。
見たことはあったのに使い方は知らなかったのですが結構便利な機能だったので取り上げてみました。

エミッタの概要の機能

Niagara でエフェクトを作成していると、良く触るのにどのモジュールの中にあったっけ...と探したりすることがありました。
この機能を使うことでお気に入り登録のような感じで自分で使いやすいようにカスタマイズできるのがこの機能です。


どういう時に使えそうか

個人制作では、よく使うプロパティを見つけやすくするのが基本かなと思いました。共同制作をされている場合は調整してほしいプロパティを明示するために登録したりもできるかな?と思いました。


サマリビュー


コンテンツブラウザで右クリック>「Niagara システム」をクリックし、"選択したエミッタに基づく新しいシステム" から、Directional Burst を選択して作成した Niagara の画像です。


エミッタの中にある「エミッタの概要」をクリックすると[サマリを編集]というボタンが表示されます。
クリックするとサマリビューというウインドウが表示されます。



開いた時点で、このエミッタで使われている各モジュールに対応したリストやフィルタ用のボタンが用意されています。

右側が切れていますが、セクションを追加/カテゴリを追加 という所に必要なものを登録していくような流れになっています。
今は何も登録してないため右側は空になっています。


サマリビューに登録


今回は "Initialize Particle" を例に見てみます。
エミッタとサマリビューの "Initialize Particle" をそれぞれクリックした時の画像です。

サマリビューには [入力] が付いたものとそうでないものが存在します。


[入力]Lifetime Min
[入力]Lifetime Max
を例に挙げると、入力可能なプロパティを示しているようです。


左側のリストから画像の位置へドラッグすると必要なプロパティが登録できます。登録されると南京錠のアイコンが表示されました。
試しに Lifetime, Lifetime Min, Lifetime Max の3つを登録しました。


「エミッタの概要」を確認してみると、登録されたものだけ一覧で表示されますが Lifetime だけ表示されていません。


これは "Initialize Particle" の Lifetime Mode が [Random] か [Direct Set] で入力可能なプロパティが変化するためでした。

現在 [Random] になっているため「エミッタの概要」の方でも連動して Lifetime Min, Lifetime Max しか出ていません。
[Direct Set] にすると Lifetime だけ表示されます。

ただ「エミッタの概要」だけ見た時、どっちが選択されているか分かりづらいので、下記方法でプルダウンのメニューも一緒に登録しておく方がいいと思います。



[入力] とついてないものはプルダウンメニューになっているようです。

今回の場合は Lifetime Mode を親にし、その下に [入力] と付いたプロパティを追加することで「エミッタの概要」も見やすくなります。

画像に注意点を記載しましたが、階層を弄ったりしていると「エミッタの概要」に反映されていないことがあるのでその場合は Niagara Editor のタブを一度閉じて開き直すか、反映しないものを消して再登録することで反映するようでした (コンパイルでは反映しなかったです)


サマリビューの登録を便利にするTips

サマリビューから手動で登録する時、名前順でもなければ、プルダウンメニューに関連しているプロパティ毎に並んでいる訳ではなさそうでした。


先程の画像ですが Lifetime Mode に関連するものが順番に並んでいないです(Mesh Renderer とか Sprite Size Mode が間にあって見にくい)

他にいいやり方があるかもしれませんが、下記方法で登録するのが分かりやすかったです。


モジュールのプルダウンメニューを右クリックから登録


別のプロパティで "Color Mode" を例に挙げてみます。
右クリック> 追加先エミッタサマリ をクリックするとサマリビューに登録されます。

サマリビューで子入力を追加する


サマリビューに登録された "Color Mode" を右クリックし「子入力を追加」すると、画像のように関連する入力プロパティが一気に追加されます。追加漏れとかを考えるとプルダウンメニューと連動するものを一気に追加する場合はこっちの方がいいかもしれないですね。

おまけ

UE5.4 で機能追加?


UE5.3.2 ではモジュール側で [入力] プロパティを右クリックで追加しようとしてもメニュー内に存在しませんでしたが、UE5.4.4 で確認するとメニューが追加されていました。

セクションとカテゴリ


セクションと呼ばれる、フィルタ用のボタンを自分で作成したり、見やすいようにグループ分けすることが出来るカテゴリを追加したりも出来ます。


セクションへの追加方法があれ?と思ったので一応記載しました。
セクションへ追加をするには作成したカテゴリをドラッグして追加するようです。

サマリビューの左側にある各プロパティは直接追加出来ないようでした。カテゴリをフィルタするためのボタンがセクションということになりそうです。


Display Name/Tooltip Override


プロパティ名やマウスオーバー時の Tooltip を自分で設定も可能です。
デフォルトのままでもいいと思いますが、変えるなら分かりやすい名前にした方がいいと思います。

それではまた!

If you liked this article, support the creator with a tip!

Sending tips requires user registration.Find details about tips here.

« 1 2 3 4 5 6 7

Search by Article Tags

Monthly Archive

Search by Exclusive Perks

Search Articles