UE4.13、WidgetでSpriteが使えるようになった
UE4.13で追加されたメッシュデカールについて
デカール、これまでは平面投影するDeferredDecalしかなかったけれど、4.13でメッシュ形状でDecalを描写できる機能がついた
平面投影だと、柱の角とかをきれいに出すのは難しかったのだけれど、これを使うときれいな見た目になる
マテリアル作成
UEでMeshDecal用のマテリアルを作成する、といっても通常のDeferredDecal用マテリアルと全く同じものを作成すればよく、MeshDecalの真髄はDecalDomainのマテリアルをStaticMeshに適用できるようになったという物っぽい
ちなみに、DBufferは有効にしてある
UE4、#IF DEBUGもどきマクロの作り方
色々やっているとShippingバージョンではやってほしくないノードとかが出てくる、C++の#IF DEBUGはDEBUGバージョンだけ指定コードをコンパイルしてくれる機能で、これと似たようなマクロがあったら便利
今回できるものは本家と違ってBPから除外するわけではないので、実際に処理が軽くなるみたいなのは薄いけど、見た目がわかりやすくなって良い
Configのビルド設定取得する
ビルド設定はDefaultGame.iniに書かれていて、C++でこれを取得する関数を用意すると今のビルド設定が見れる
DefaultGame.iniの
[/Script/UnrealEd.ProjectPackagingSettings] BuildConfiguration=PPBC_Development
これがビルド設定の部分、エディタのビルド設定は "Debug", "Development", "Shipping" があり、これに対応するのは
"PPBC_DebugGame", "PPBC_Development", "PPBC_Shipping" となる(確認したのはwindowsなのでOSXとかなら変わるかも)
この設定を見る関数をFunctionLibrary辺りに作る
.h UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Configuration") static void GetBuildConfiguration(FString& Type); .cpp void UBlueprintFunctionLibraryCpp1::GetBuildConfiguration(FString& Type) { GConfig->GetString( TEXT("/Script/UnrealEd.ProjectPackagingSettings"), TEXT("BuildConfiguration"), Type, GGameIni ); }
UE4、Inputの長押し処理の実装
十字キーでインベントリのリストを送るみたいな処理、長押しのときはループでやってほしい
これを作るためには、Inputの長押し判定を作る必要がある
PlayerControllerのGetInputKeyTimeDown()関数にKey構造体を渡すとそのボタンが何秒押されているかを返してくれる、リリースのたびに0に戻る
LongPressThresholdで指定した秒数以上長押ししているとループ内の関数が実行される、右端のDelayがループ間隔になる
マクロにするとこんな感じ
UE4、KillZVolumeの挙動について
KillZVolumeは、触れたアクタの持つFellOutOfWorld()という関数を実行するように言う(これだけの実装)
FellOutOfWorld()はAActorに実装があり
- Physicsを切る
- ActorHiddenInGameをtrueに
- ActorEnableCollisionをfalseに
- Destroy()実行
という処理を行う
FellOutOfWorld()はBPでオーバーライドできるようにはなっておらず、C++側でオーバーライドする必要がある
UE4、BPでのデストラクタ処理の作り方
アクタ(AActor継承クラス)がDestroyされたときの流れ
- Destroy()呼ばれる
- Destroy()の中でDestroyed()呼ばれる
- Destroyed()の中でReceiveDestroyed()呼ばれる
- Destroyed()の中でOnDestroyed()呼ばれる
BPではReceiveDestroyedとOnDestroyedを使用する、これらの関数はC++側には実装はない
ReceiveDestroyed
BlueprintImplementableEventとして定義されているので、BPでオーバーライドして使用する
DisplayName = “Destroyed”となっているので、BPでは"Event Destroyed"ノードとして現れる(C++のDestroyed()とは別)
参考
Unreal Engine | ゲームプレイ要素をブループリントに公開する
OnDestroyed
イベントディスパッチャー(DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam)として定義されていて、BPではバインドして使用する
ReceiveDestroyedとの違いは、DestroyedされたActorがポインタとして返ってくるのでどうこうしたいならこちらを使用する
参考
Unreal Engine | マルチキャスト デリゲート
実行順序は、ReceiveDestroyedのほうが一行だけ先に呼ばれる
SVNでリビジョン管理やる
いい加減ソースコントロール使う、SVNが楽そうなのでそれでやる
1.TortoiseSVNのインストールまでやる
2.リポジトリを適当なところに作成する、ここに差分が集まってくる、デフォルトのフォルダ構造作りますかって言われるけど作らないでそのままOK押して終了する
3.プロジェクト作成する
空じゃないんだが?って言われるけどそのままやる
5.差分取るファイルを選択してAddしていく、ドキュメントによるとこれ(チェックついてるやつ)をやる、SourceはC++プロジェクトじゃないとない
6.コミットしておく(一番上の階層(プロジェクトフォルダ)でやると1発で全部やってくれる)
7.UE側でsvnに接続する、左上のSourceControlアイコンを押す
これでとりあえずできるようになった、エディタからコミットできるのはContentsのものだけなのでC++の編集とかはエクスプローラーから自分でやる(多分)
ラベルは設定してないので空欄だけれど、そもそもラベルの必要性いまいちよく分かってないので、よく分かったら追記します
参考
Unreal Engine | ソース コントロールとして SVN を使用する
TortoiseSVN の基礎勉強 〜TortoiseSVN によるバージョン管理を使う〜 — バージョン管理システム入門(初心者向け)
UE4 ソースコントロールを使ってアセット管理をする - Let's Enjoy Unreal Engine