UnrealEngineのUPROPERTY漏れのチェック
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が抜けていそうな場所を、上下数行と合わせて一覧化して出してくれます。
Author And Source
この問題について(UnrealEngineのUPROPERTY漏れのチェック), 我々は、より多くの情報をここで見つけました https://qiita.com/yKimisaki/items/c2bc36b91434c7d46765著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .