fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

2016年05月 | ARCHIVE-SELECT | 2016年07月

| PAGE-SELECT | NEXT

≫ EDIT

UE4 UMGでウィジェットやパーツのサイズを取得する(Get Desired Size)

UMGのウィジェットや、配置したパーツのサイズを受け取る方法です。
こちらのサイトを参考にさせていただきました。

・UMGのテキストブロックのサイズを動的に取得する方法
http://limesode.hatenablog.com/entry/2016/05/26/225342

「Get Desired Size」ノードを使うことでサイズが取得できます。
ウィジェットのサイズを取得000
こんな感じで、入力にウィジェットだったり、配置したパーツだったりを繋ぎます。

「Get Desired Size」についての説明は以下の公式ドキュメントに。

・Get Desired Size
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Widget/GetDesiredSize/index.html

| UE4 | 15:20 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 ノードの入力ピン、出力ピンの構造体を分割する(構造体ピンを分割)

ノードに入力するときに構造体になっている場合に、各要素に分割する方法です。

こんな感じで「Set Render Translation」の入力ピンの「Translation」は
Vector2D 構造体になっています。
インプットの型を開く000
「Get Mouse Position」で取得できる位置はXとYで分離しています。

普通はこんな感じで「Make Vector2D」を使わないといけないと思っていましたが
インプットの型を開く003

入力ピンの構造体を右クリックしてでてくるメニューの「構造体ピンを分割」を選択すると
インプットの型を開く001

なんと、構造体の中身が分割されて個別に入力できるようになります。
インプットの型を開く002

こういった基礎的な便利機能って知らないと損しそうですよね…。

| UE4 | 15:10 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 異なるレベルのカスタムイベントを名前で呼び出す(Remote Event)

異なるレベルの作成したカスタムイベントを名前指定で呼び出す方法です。

こちらの記事を参考にさせていただきました。

・[UE4] レベル間のやり取り
https://historia.co.jp/archives/5434/

イベント名を直接指定することで、違うレベルのイベント名を呼び出す事ができるノードです。
この方法が一番簡単ですし、昔のエンジンバージョンではこの方法しか他のレベルにアクセスする事ができませんでした。それ故に、この方法を使う事が一番多いかと思います。ですが、便利な反面、引数の指定もできなければ戻り値を得る事もできず、また、レベルブループリント以外では使用できないなど、特定の状況ではこれではカバーしきなれない場合があります。


全てのレベルにあるイベント名が一致するイベントが実行されるようです。
ちゃんと管理して使えば結構便利に使えるような気もします。

とりあえずカスタムイベントを作成します。
リモートイベント000

この作成した「CustomEventNew」というカスタムイベント
「Remote Event」というノードで名前を指定して呼び出すことができます。
リモートイベント001
こんな感じになります。

基本その名前がついているイベントはすべて呼び出されることになります。
注意点としては、引数などがついているイベントは呼び出せないみたい。ということでしょうか。

便利そうではあるのですが、使い方がちょっと難しそうですね。
デバッグメニューからの呼び出しとかそういったものを気軽に使う分には良さそうな気がしました。

| UE4 | 15:15 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 カスタムイベントと関数の違いについて

ブループリントでのカスタムイベントと関数の違いについてです。
この二つの他にもマクロといったものがあるのですが、それについては今後ということで。
認識が間違ってるかもしれませんので、その時は指摘していただけると助かります!

・Custom Events ノード
https://docs.unrealengine.com/latest/JPN/Engine/Blueprints/UserGuide/Events/Custom/index.html

・関数
https://docs.unrealengine.com/latest/JPN/Engine/Blueprints/UserGuide/Functions/index.html

公式なドキュメントとしては上記のページをみてもらえるとよいかもです。
ざらっとした自分の認識ですと、

・カスタムイベントは戻り値(返り値)を返すことができない。
・関数はPure関数という実行ピンを持たない関数を作成することができる。
・関数は戻り値(返り値)をすぐ返さないといけないため「Delay」などの遅延系のノードを使うことができない。
・カスタムイベントはイベントディスパッチャーや「Remote Event」によって名前で呼び出すことができる。

といった感じでしょうか。

ただ処理を実行するだけであればそんなに違いがないのかもしれません。
カスタムイベントと関数000

| UE4 | 15:01 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 関数やカスタムイベントの名前や引数を変えた時にノードを更新する

関数やカスタムイベントなどの名前や引数、返り値の名前や型などはいつでも変更することができます。
これを変更すると、それを使っているノードに変更が反映されなかったり、
エラーになったりすることがあります。これを解決する方法です。

・Custom Event のトラブルシューティング
https://docs.unrealengine.com/latest/JPN/Engine/Blueprints/UserGuide/Events/Custom/index.html#customeventのトラブルシューティング

こんな感じにノードの更新の反映がされていない場合があります。
ノードのリフレッシュ000
「Param Enable」という引数の名前にしたのに使っている場所では「New Param」になっている。

これを解決するためにノードの更新を行います。
カスタムイベントを右クリックしてでてくるメニューの「ノードを更新」を選択する。
ノードのリフレッシュ003

もしくは、「ファイル」メニューの「すべてのノードを更新」を選択する。
ノードのリフレッシュ001

といったことをすると、ノードが変更されて正常な状態に戻ります。
ノードのリフレッシュ002

結構よくあることなので、覚えておくとよさそうです。

| UE4 | 14:24 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 ブループリントでカスタムイベントを作成する

ブループリントで独自のイベントを作成する方法です。
カスタムイベントは関数みたいなものですが、用途がちょっと違う部分があるみたいなので
そこの説明は今後にでも。

カスタムイベントについてはこちらの公式ドキュメントを。

・Custom Events ノード
https://docs.unrealengine.com/latest/JPN/Engine/Blueprints/UserGuide/Events/Custom/index.html

作り方は簡単で、ブループリントの右クリックででてくるメニューから「Add Custom Event...」を選択します。
カスタムイベント000

これで普通にカスタムイベントが追加されます。
ノードのリフレッシュ002
呼び出し方も関数と変わりません。

あとは名前を変更したり、詳細タブで引数を設定したりできます。
カスタムイベント001
詳細タブでいろいろ設定できます。

名前で呼び出しができたり、イベントディスパッチャーで使えたりするので、
用途によって関数と使い分けるのがよさそうです。

| UE4 | 12:53 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 UMGの子になっているウィジェットの位置をオフセット指定で動的に動かす(SetRenderTranslation)

UMGのウィジェットの中に、子としてウィジェットをいれることができるのですが、
この子のウィジェットの位置を動的に動かす方法です。

・Set Render Translation
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Widget/Transform/SetRenderTranslation/index.html

上記の「SetRenderTranslation」ノードを使います。
使い方はそのままで、ウィジェットを繋いで「Translation」の位置をセットします。
RenderTranslation000.jpg
これだけで普通にその位置に移動します。

注意点としては、あくまで描画時のオフセット位置の指定になるようなので、
ウィジェットをレイアウトで左上に配置していない限りは、
初期配置の位置に、「Translation」の値を足した位置に表示されることになります。

となるとプログラムで全部管理するには全部左上に配置しないといけないので
使い道はなかなか難しいかもしれませんが、とりあえず移動が動的にできる方法ということで。

| UE4 | 16:19 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 完全にランダムな処理を実行する(MultiGate)

ランダムにどれかの処理を実行してほしいという場合の実行方法です。
「MultiGate」を使ってできそうな気がしたので試してみました。
何かほかに簡単な方法があったら教えてください!

「MultiGate」の「IsRandom」にチェックを入れることで、ランダムに処理が実行されるのですが、
それを毎回リセットすることで、前と同じ処理が実行されるのも含めてランダムに実行します。
完全ランダム処理000
「Sequence」ノードで必ず後に「MultiGate」の「Reset」に処理を流すことで、
毎回「MultiGate」の処理のどれかがランダムに実行される。という仕組みです。

もしかしたら、最初に「Reset」に流してからがよいのかなーと思いましたが、
これでもランダムに動くので大丈夫かなと。

ゲームを作ってると案外ランダムに処理したいという場合があるので、
こういった処理が簡単にできるのはよいですね。

| UE4 | 15:11 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 複数の処理を毎回どれか一度だけ実行する(MultiGate)

ちょっと言葉で説明するのは難しいのですが、
複数の処理を毎回どれかが実行され、なおかつ一度だけ実行されるような処理の作り方です。

・フロー制御
https://docs.unrealengine.com/latest/JPN/Engine/Blueprints/UserGuide/FlowControl/index.html#multigate

「MultiGate」というノードになるのですが、
このノードは「Out」に接続された処理を毎回一度だけ上から順に実行していきます。
MultiGate000.jpg
この場合だと、最初は「Out0」が実行され、二回目は「Out1」が実行されます。

「IsRondom」にチェックをいれると、ランダムな順番で実行されます。
一回ずつ実行されると処理がそこで終わるのですが、
「Loop」にチェックを入れると、再度最初からまた実行されるようになります。

Reset ノードに接続され処理がまわってくると、実行した状態のフラグが解除され、
再び、また一回ずつ実行されることになります。

こう書いてみると、使いどころはなかなか難しい気がしますね…。
ランダム系の処理で使えそうな気がするのですが、それはまた別の機会にでも。

| UE4 | 15:03 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 ノードを繋ぐ線を綺麗に整える(Rerouteノード)

ノードとノードを繋ぐ線を綺麗に整える方法です。
Reroute ノードというみたいですね。

・rerouteノードの仕組み
http://imoue.hatenablog.com/entry/2016/04/15/233619

・ノードを接続する
https://docs.unrealengine.com/latest/JPN/Engine/Blueprints/BP_HowTo/ConnectingNodes/index.html

上記のサイトを参考に。
reroute ノードのやりかたは簡単で、
ノードを繋ぐ線上をダブルクリックすることでRerouteノードを作ることができます。
あとはそのRerouteノードを移動したり、Rerouteノードに接続したりできます。
rerouteノード000
こんな感じでまとめたり、見やすくしたり。

これを使うとブループリントを見やすくできそうなので積極的に使っていきましょう!

| UE4 | 14:49 | comments:0 | trackbacks:0 | TOP↑

| PAGE-SELECT | NEXT