4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UE4で開発者毎に固有のマクロ定義を宣言する(俺マクロ)

Posted at

#俺マクロ
UE4ってDevelopビルドで開発中もユーザーコードが最適化されているので
いざデバッガが使いたいような問題にあたったり例外が出た時に変数などが省略されてて
困ることがありますよね。
※ディスアセンブルを読めば良いんですが、苦手な人もいますよね。
そこで自分がデバッグしたいコードの一部分の最適化を#pragma optimizeを使って解除しておくとデバッグが簡単になります。

ただしチーム開発している時に他の開発者に影響を与えるのは困りものですし
CIで生成したパッケージに影響を与えるのはもっと困ります。
そこで開発者毎のマクロを宣言して使うようにすると自分だけに影響を及ぼすコードを記述できます。

UEはUBTというビルドツールがビルド全般を担うのでBuild.csファイルにちょっと追記することで実現可能です。

##Build.CS

Mygame.Build.cs
public class MyGame : ModuleRules
{
    public MyGame(ReadOnlyTargetRules Target) : base(Target)
    {
        string DevUserDefine = "DEVUSER_" + System.Environment.GetEnvironmentVariable("USERNAME").ToUpper();
        DevUserDefine = DevUserDefine.Replace(".", "_");
        DevUserDefine = DevUserDefine.Replace("-", "_");
        DevUserDefine = DevUserDefine.Replace("$", "_");
        PublicDefinitions.Add( DevUserDefine );

##使ってみる

optimize/off したあとは、後方で optimize/onしておくのがよろしいです。
(unitybuildとかで他のソースに影響を与えたりしちゃうかも)

MyClass.cpp
#if defined(DEVUSER_TAKASHI_SUZUKI)
#pragma optimize("",off)
#endif //DEVUSER_TAKASHI_SUZUKI

void MyClass::MyFunction()
{
... // debuggable!!
}

#if defined(DEVUSER_TAKASHI_SUZUKI)
#pragma optimize("",on)
#endif //DEVUSER_TAKASHI_SUZUKI

iniに書けばいいじゃん・・・と思うかもしれませんがConsoleVariableに適用するのも楽ちんなので結構好きです。

MyClass.cpp
static TAutoConsoleVariable<int32> CVarMyVariable(
	TEXT("MyGame.MyVariable"),
#if defined(DEVUSER_TAKASHI_SUZUKI)
	1,
#else
	0,
#endif //defined(DEVUSER_TAKASHI_SUZUKI)
	TEXT("0 - anta")
	TEXT("1 - wai"));

以上!

4
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?