Commandlet

案例

头文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#pragma once

#include "CoreMinimal.h"
#include "Commandlets/Commandlet.h"
#include "Commandlets/ResavePackagesCommandlet.h"
#include "XXXCommandlet.generated.h"

DECLARE_LOG_CATEGORY_EXTERN(LogXXXCommandlet, All, All);

UCLASS()
class UXXXCommandlet : public UResavePackagesCommandlet
{
	GENERATED_BODY()

public:
	UXXXCommandlet();

	virtual int32 Main(const FString& InCommandline) override;
};

源文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include "XXXCommandlet.h"

DEFINE_LOG_CATEGORY(LogXXXCommandlet);

UXXXCommandlet::UXXXCommandlet()
{
}

int32 UXXXCommandlet::Main(const FString& InCommandline)
{
	// 可以解析参数
	TArray<FString> Tokens;
	TArray<FString> InSwitches;
	TMap<FString, FString> ParamsMap;
	ParseCommandLine(*InCommandline, Tokens, InSwitches, ParamsMap);

	// do some thing
	return 0;
}

启动/调试时在vs中增加参数:-skipcompile -run=XXX

这里的 XXX 换成你想要的名字,UResavePackagesCommandlet 也可以换成 UCommandlet

本地测试:

1
.\UnrealEditor.exe E:\Work\xxx.uproject -skipcompile -run=XXX

skipcompile参数作用

字面意思就是跳过编译,源码对应位置:

参考

https://zhuanlan.zhihu.com/p/512610557

https://zhuanlan.zhihu.com/p/377903983

Licensed under CC BY-NC-SA 4.0