ばーばらいず

綺麗に書くことをあきらめた自分用メモ

【UE4】UUserWidgetのコンストラクタがC++でうまく動かない問題の解決法

ヘッダ



 ソース

 

こんな感じでコンストラクタの処理をさせたいんだけど

 

文句言われる

 

 

とりあえず解決法:

 謎の引数を入れて親のコンストラクタと一緒にコールする

 謎の引数を入れないと引数が違うって駄々こね始める

 

 

 

謎の引数の正体はここに書いてあるかもしれないらしい。

dev.epicgames.com

 

いつか読む

 

 

追記:

 

引数を追加すると通らなくなる。

これはもう許されていないらしい。

forums.unrealengine.com

 

なんなんだ

【UE4】衝突時に発生させるイベントを表示する方法とHit,Overlapの違い

BPのStaticMeshを押して、下のほうのOn Component Hitを押すと出る。

 

 

ちなみに、Hitは接触時でOverlapは重なった時であり

Hit = Overlapではないことに注意。

 

当たったら消えるオブジェクトのDestroyをOverlapで作ってて、

消えたり消えなかったりしてだいぶ苦労した。

【UE4】C++でDelayを行う方法

BPだとあんなに簡単なのにね

 

とりあえず最低限動かすにあたって変更が必要なのは

L61の第3引数 Delay後にコールする関数

第4引数 Delay時間

第5引数 ループするかどうか

 

 

あともう一つ

 

#include "TimerManager.h" をインクルードすること!!!!!!!!

 

 

インクルードしなくてもなんかコンパイルは通るんだけど、タイマーが

うまく動いてくれない

 

これ見つけるのに10年かかった

【UE4】なんもしてないのに急に落ちる問題の対処法

 

https://forums.unrealengine.com/t/pig-of-a-crash-pure-virtual-function-being-called-while-application-was-running/155116/37

これ。

 

VisualStudioのデバッガから起動してから全然でなくなった

ただ、VS側ではコンパイルできなくなるのでUEのコンパイルボタンから

コンパイルを行う

 

LiveCodingでもいいらしいけど面倒で調べてない

UE4だと実験的になってるけどどうなんだ

 

 

 

以下先に書いてたほぼ愚痴

 

実際に仮想関数をコールしているわけではないのにも関わらず出る。

実行時以外にも、オートセーブ時とかコンパイル時にも出る。

勝手にオートセーブして勝手に落ちて作ってたデータが消えると結構ストレス。

 

上記のやり取りを見る感じ、HOTRELOAD(VisualStudioで行ったコンパイル結果を

UEにすぐ適用する機能?)が問題らしい。

 

horugame.com

記事のタイトルが迫真ド直球で笑う

 

LiveCodingってのがいいらしいんだけど、実験的~って書いてたからやめた

UE5になったら使おう

 

それまでは、VisualStudioのデバッガから起動するようにする

 

VSからコンパイルはできなくなるけど、UEでコンパイルすればモーマンタイ

 

あと何気に、メモリアクセスエラーとかで落ちた時VSが落ちたところで

ブレークされるのも高評価

 

なんか落ちた時の回復も早い気がする

 

何よりストレスが少ない

これが一番大事

【UE4】C++でデバッグ時画面やログにデータを出力する方法

コピペ用

いちいち覚えるの面倒

 

LOG

UE_LOG(LogTemp, Log, TEXT("aaaaa %d"), 1);

 

画面表示

#include "Engine/Engine.h"

 

FString Str = FString::Printf(TEXT("aaaaa %d"), 1);
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, Str );

 

数字の1は変数で置き換え可能

そのあたりは大体printfと同じ感じ

 

 

色変えとか必要になったらその都度調べればいい

【UE4】UE側で読み込んだCSVのデータをC++で使う方法

読み込む前にCSVの1行に相当する構造体を準備する

 

CSVの列の名前と変数名は同じにしておく

 

CSVをコンテンツブラウザに投げ込んで、種類はさっき作った構造体にする

入っていればOK

変数名と列の名前を合わせないといけないことに気が付くのに1日かかった

元々CSVの列名を日本語にしていたから猶更

 

C++ではこんな感じ

L70で行の名前を全部取得し、その回数分だけループ(RowNameは配列)

L73でその名前に一致する行の構造体が取得できるので、そこにアクセスする感じ

 

ちなみに行の名前はこれ

FName型だったかな

 

L70で使っているテーブルはヘッダで宣言してある

エディタ側で参照を渡してあげた

 

 

振り返るとだいぶ初歩的なところで詰まった気がする

 

そういう日もある

【UE4】イベントディスパッチャーとBPインタフェースの使い分け

イベントディスパッチャーは情報受信側が発信側にバインドを行って

イベントが発生するのを待つ仕組み。

 

情報発信側は情報受信側のことを知らなくて良い。

 

 

BPインタフェースはディスパッチャーと違ってバインドは要らないが

イベントを発生させる際にターゲットが必要。

 

GetAllActorsofClassで見つけたやつをこのターゲットに食わせれば不特定多数に

イベントを発行できると思う。

 

GetAllActorsofClassを使ったら負け教に入信している自分としては使いにくいイメージ。

 

情報受信側は情報発信側のことを知らなくて良い。

 

 

 

 

細かいことはよくわからないけど、どちらがどちらのことを知っているか

知っているべきかを考えて使い分けようと思う。