8
7

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 3 years have passed since last update.

UnrealEngineのUPROPERTY漏れのチェック

Last updated at Posted at 2021-06-04

UPROPERTYとは

UEのC++側では、UObjectを継承したポインタ型のメンバー変数をUPROPERTY()属性をつけて保持しておかなければなりません。

class MYPROJECT_API MyClass : public UObject
{
    GENERATED_BODY()

private:

    UObject* NG; // GCに回収される恐れあり

    UPROPERTY()
        UObject* OK; // 安心
};

これはUEで採用されているガベージコレクション(以下、GC)が参照を保持するために使用しているからです。

UPROPERTY()をつけないで参照を持っているとGCに回収され、メモリアクセス違反などのエラーの原因になります。
またGCのタイミングの関係上、エディタで実行中は起きにくく実機で起きやすい、という傾向があります。

そのため、コードを書く時は絶対にUPROPERTYを付けるというコード規約のもとコードを書くのですが、こんなものは人間はどうしても忘れてしまいます。
そこでUPROPERTYの漏れチェックをCIに挟もうと思い、UESourceAnalyzerという名前でPropertyCheckできるようなものを作成しました。

取り急ぎ社内用に作ったのものを雑に公開してるものなので何も整えてないのですが、評判が良さそうならもうちょっと綺麗にします。

使い方

上記のGitHubのリリースからZIPを適当に展開して、中のexeに対してUEプロジェクトのSourceフォルダを引数に指定してあげてください。

PS K:\UESourceAnalyzer_Win64> .\UESourceAnalyzer.exe K:\UE4Test\Source

そうるすと、上記の場合はK:\UE4Test\Sourceの配下にPropertyCheck.txtというテキストファイルが吐かれます。
中身は以下のようになっており、

########################################
K:\UE4Test\Source\UE4Test\Core\CPP_GameInstance.h:19
------------------------------
private:

    static UCPP_GameInstance* Current; <<<<<<<<<<<<


########################################
K:\UE4Test\Source\UE4Test\Features\AsyncTask\AsyncTaskSubsystem.h:201
------------------------------
private:

    TArray<AsyncTaskCoreSystemBase*> CoreSystems; <<<<<<<<<<<<


########################################
K:\UE4Test\Source\UE4Test\Levels\WaitActorInitializing\WaitActorInitializingActor.h:18
------------------------------
private:

    UWaitActorInitializingActorComponent* WaitActorInitializingActorComponent; <<<<<<<<<<<<


########################################
K:\UE4Test\Source\UE4Test\Levels\AbilityTest\Actors\CPP_AbilityTestCharacter.h:22
------------------------------
private:

    UCPP_AbilitySystemComponent* AbilitySystem; <<<<<<<<<<<<



このような感じでUPROPERTYが抜けていそうな場所を、上下数行と合わせて一覧化して出してくれます。

8
7
0

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
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?