Tips of Unreal Engine4 with C++
EKeys
役立つサイト
UE4 C++でのファイルへの出力の仕方
ref: https://forums.unrealengine.com/t/creating-a-text-file-in-c/89844/6
#include "Misc/FileHelper.h"
#include "Misc/Paths.h"
FString FilePath = FPaths::ConvertRelativePathToFull(FPaths::GameUserDeveloperDir()) + TEXT("/MessageLog.txt");
FString FileContent = TEXT("Hello, world!");
FFileHelper::SaveStringToFile(FileContent, *FilePath, FFileHelper::EEncodingOptions::AutoDetect, &IFileManager::Get(), EFileWrite::FILEWRITE_Append);
UE4 C++でエディター上のゲームを終了させる方法
ref: https://forums.unrealengine.com/t/how-do-i-stop-the-program-without-exiting-the-unreal-engine-editor-only-in-c/137566
#include "Kismet/KismetSystemLibrary.h"
UKismetSystemLibrary::QuitGame(this, nullptr, EQuitPreference::Quit, false);
問題: static meshをlighting buildした後、game play中にstatic meshが突然真っ黒になる現象
解決方法: static meshの属性をLighting->Lightmap Type->deafultからLighting->Lightmap Type->Force Voluemtericに変更する
原因: 不明。UV周りは関係なさそう。
UE4のエディタ上でscreen shotを撮影する
ref: https://orenda.co.jp/blog/1791/
#include "UnrealClient.h"
#include "Misc/Paths.h"
FString filePath = FPaths::ConvertRelativePathToFull(FPaths::GameUserDeveloperDir()) + TEXT("/screenshot.png");
FScreenshotRequest screenshotRequest = FScreenshotRequest();
screenshotRequest.RequestScreenshot(filePath, false, false);
またscreen shotの画像のサイズはplay中の画面のサイズに依存するため、フルスクリーンモードだとより高解像度のscreen shotを撮影することができる。
Linux上のUE4とVSCodeのintelligenceとinclude pathの解決
ref: https://qiita.com/mt_khmer/items/f0625b2e8ae42901f8bb
ref: https://community.gamedev.tv/t/unreal-engine-c-dev-include-path-not-defined-cant-find-iostream-help/104944/3
UE4 on Ubuntu with VSCodeの設定でintelligenceとinclude pathの解決はそれぞれ<project root>/.vscode/c_cpp_properties.json
のconfigurations -> name
と同じレベルに以下の記述をする。
ただしproject nameをTestとする。
"defines": [
"UE_PROJECT_NAME=Test",
"TEST_VTABLE=DLLEXPORT_VTABLE",
"TEST_API="
]
"includePath" : [
"${workspaceFolder}/**"
]
Gamepad Left Thumbstick X-AxisをC++から呼び出す
ref: https://snardle.dev/posts/ue4-key-axis-binding/
Gamepad Left Thumbstick X-Axisはblueprintでは用意されているが、C++では用意されていない(EKeysを探しても見つからない)。
実際はEKeys::Gamepad_LeftX
が対応するC++側のAPIである。
Unreal Engine 4をLinuxでビルドしてそれをgit管理する場合の問題
Unreal Engineのビルドバージョンが異なることによるエラー
.uproject
のEngineAssociation
はLinuxでビルドした場合GUID(UUIDの1種)が振られる。
.uproject
ファイルはgit管理下に置くことが望ましいが、ビルド環境によって異なる値が振られる。
そこで~/.config/Epic/UnrealEngine/Install.ini
に書かれてるEngineと対応するGUIDを統一(例えばGUIDをすべて0埋め)することで、この問題は解決する。