UE-c++打印调试

参数均按顺序给出

1. GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT(" Hello "));

  • 函数申明

    /**
    *	This function will add a debug message to the onscreen message list.
    *	It will be displayed for FrameCount frames.
    *	@param	Key  A unique key to prevent the same message from being added multiple times.
    *	@param	TimeToDisplay	How long to display the message, in seconds.
    *	@param	DisplayColor	The color to display the text in.
    *	@param	DebugMessage	The message to display.
    */
    void AddOnScreenDebugMessage(int32 Key, float TimeToDisplay, FColor DisplayColor, const FString& DebugMessage, bool bNewerOnTop = true, const FVector2D& TextScale = FVector2D::UnitVector);
    
  • 此外,两个默认参数

    • bNewerOnTop(true):是否顶层显示,
    • TextScale(FVector2D::UnitVector):字体比例。
  • 此外,RemoveOnScreenDebugMessage(Key) 可以根据具体的Key去除正在显示的消息。

  • 此外,可以使用宏定义简化操作

    #define PRINT(String) {if (GEngine){GEngine->AddOnScreenDebugMessage(-1,10.0f,FColor::Red,*(String));}}
    

2. UKismetSystemLibrary::PrintString(this,TEXT(" Hello "));

  • 函数申明

    /**
     * Prints a string to the log, and optionally, to the screen
     * If Print To Log is true, it will be visible in the Output Log window.  Otherwise it will be logged only as 'Verbose', so it generally won't show up.
     *
     * @param	InString		The string to log out
     * @param	bPrintToScreen	Whether or not to print the output to the screen
     * @param	bPrintToLog		Whether or not to print the output to the log
     * @param	bPrintToConsole	Whether or not to print the output to the console
     * @param	TextColor		Whether or not to print the output to the console
     * @param	Duration		The display duration (if Print to Screen is True). Using negative number will result in loading the duration time from the config.
     */
    UFUNCTION(BlueprintCallable, meta=(WorldContext="WorldContextObject", CallableWithoutWorldContext, Keywords = "log print", AdvancedDisplay = "2", DevelopmentOnly), Category="Utilities|String")
    static void PrintString(const UObject* WorldContextObject, const FString& InString = FString(TEXT("Hello")), bool bPrintToScreen = true, bool bPrintToLog = true, FLinearColor TextColor = FLinearColor(0.0, 0.66, 1.0), float Duration = 2.f);
    
    
  • 原注释不祥,给中文注释

    • const UObject* WorldContextObject:用于得到当前世界的上下文
    • const FString& InString:文本内容
    • bool bPrintToScreen:是否打印到屏幕
    • bool bPrintToLog:是否打印到Log
    • FLinearColor TextColor:文本颜色
    • float Duration:显示持续时间
  • 此外,注意 #include “Kismet/KismetSystemLibrary.h”

  • 此外,还有 PrintText() 函数用于打印 FText 类型的变量。

  • 此外,可以看出,源代码的命名都十分规范,其含义一目了然。

3. UE_LOG(LogTemp, Log, TEXT(" Hello "));

  • 宏定义

    /** 
     * A  macro that outputs a formatted message to log if a given logging category is active at a given verbosity level
     * @param CategoryName name of the logging category
     * @param Verbosity verbosity level to test against
     * @param Format format text
     **/
    #define UE_LOG(CategoryName, Verbosity, Format, ...) \
    	{ \
    		CA_CONSTANT_IF((ELogVerbosity::Verbosity & ELogVerbosity::VerbosityMask) <= ELogVerbosity::COMPILED_IN_MINIMUM_VERBOSITY && (ELogVerbosity::Warning & ELogVerbosity::VerbosityMask) <= FLogCategory##CategoryName::CompileTimeVerbosity) \
    		{ \
    			UE_INTERNAL_LOG_IMPL(CategoryName, Verbosity, Format, ##__VA_ARGS__); \
    		} \
    	}
    
    • 打印消息到Output Log ,在编辑器的 Windows/Log/OutputLog 或者Rider的 Unreal模板 可见,内容保存在 \项目文件夹\Saved\Logs

4. UE_LOG(LogDiy, Error, TEXT(" Hello "));

  • 宏定义

    /**
     * @param CategoryName 决定Log的名称
     * @param DefaultVerbosity 决定Log的颜色
     * @param CompileTimeVerbosity 决定Log的最大级别
    **/
    #define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity) \
    		extern struct FLogCategory##CategoryName : public FLogCategory<ELogVerbosity::DefaultVerbosity, ELogVerbosity::CompileTimeVerbosity> \
    		{ \
    			FORCEINLINE FLogCategory##CategoryName() : FLogCategory(TEXT(#CategoryName)) {} \
    		} CategoryName;
    /** 
     * @param **CategoryName** 定义的Log名称
     **/
    #define DEFINE_LOG_CATEGORY(CategoryName) FLogCategory##CategoryName CategoryName;
    
  • 在.h文件添加 DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity);

  • 在.cpp文件添加 DEFINE_LOG_CATEGORY(CategoryName);

  • 在.cpp文件使用 UE_LOG(CategoryName, Log, TEXT(“Hello”));

代码测试(含多参数)

  • TestLog.h

    // Fill out your copyright notice in the Description page of Project Settings.
    #pragma once
    
    #include "CoreMinimal.h"
    #include "GameFramework/Actor.h"
    #include "TestLog.generated.h"
    /**
     * @param CategoryName 决定Log的名称
     * @param DefaultVerbosity 决定Log的颜色
     * @param CompileTimeVerbosity 决定Log的最大级别
     * 在.h文件使用DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity);
     * 
     * @param CategoryName 定义的Log名称
     * 在.cpp文件使用DEFINE_LOG_CATEGORY(CategoryName);
    **/
    DECLARE_LOG_CATEGORY_EXTERN(LogForInit, Log, All);
    
    /**
     * @brief Log测试
     */
    UCLASS()
    class MICROWORLD_API ATestLog : public AActor{
    	GENERATED_BODY()
    protected:
    	/**
    	 * @brief 打印所调用的函数
    	 * @param Condition 打印的方式
    	 */
    	UFUNCTION(BlueprintCallable)
    	bool SwitchLog(int32 Condition);
    };
    
  • TestLog.cpp

    // Fill out your copyright notice in the Description page of Project Settings.
    
    
    #include "TestLog.h"
    
    #include "Kismet/KismetSystemLibrary.h"
    
    DEFINE_LOG_CATEGORY(LogForInit);
    
    bool ATestLog::SwitchLog(int32 Condition){
    	bool bResult = true;
    	switch (Condition){
    		case 1: {
    			//使用AddOnScreenDebugMessage,打印到屏幕
    			if (GEngine != nullptr){
    				GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red,
    				                                 TEXT("Log by GEngine.AddOnScreenDebugMessage"));
    			}
    			break;
    		}
    		case 2: {
    			//使用PrintString,打印到屏幕
    			UKismetSystemLibrary::PrintString(this,
    			                                  TEXT("Log by UKismetSystemLibrary.PrintString"));
    			break;
    		}
    		case 3: {
    			//使用Log
    			UE_LOG(LogTemp, Log, TEXT("Log by UE_Log in Different Level"));
    			break;
    		}
    		case 4: {
    			//使用自定义Log
    			UE_LOG(LogForInit, Error, TEXT("Log by UE_Log LogForInit"));
    			break;
    		}
    		case 5: {
    			//带参数的打印
    			//与c语言的Printf函数类似,格式符一致
    			//主要是对TEXT字符串做处理,若不是基础类型或者FString类型,先转换为FString类型在打印
    			//注意浮点数默认打印6位小数
    			const bool ParamBool = true;
    			const int32 ParamInt = 1;
    			const float ParamFloat = 1233.1415f;
    			const double ParamDouble = 3.1415926;
    
    			//更为简单的字符串插值
    			//TArray<FStringFormatArg> Args;
    			//Args.Add(FStringFormatArg(FString::SanitizeFloat(ParamDouble,10)));
    			//const FString Message =FString::Format(TEXT("{0}"),Args);
    
    			const FString Message = FString::Printf(TEXT("Log by Format Parameter:\
    				\nParamBool:%s,\nParamInt:%d,\nParamDouble:%-20.3f,\nParamDouble:%.5lf")
    			                                        , (ParamBool ? TEXT("true") : TEXT("false")), ParamInt, ParamFloat,
    			                                        ParamDouble);
    
    			if (GEngine != nullptr){
    				GEngine->AddOnScreenDebugMessage(-1, 20.0f, FColor::Red,
    				                                 *Message);
    			}
    		}
    		default: {
    			bResult = false;
    			break;
    		}
    	}
    	return bResult;
    }
    
    

附页

  • Log级别

    enum Type : uint8
    	{
    		/** Not used */
    		NoLogging		= 0,
    
    		/** Always prints a fatal error to console (and log file) and crashes (even if logging is disabled) */
    		Fatal,
    
    		/** 
    		 * Prints an error to console (and log file). 
    		 * Commandlets and the editor collect and report errors. Error messages result in commandlet failure.
    		 */
    		Error,
    
    		/** 
    		 * Prints a warning to console (and log file).
    		 * Commandlets and the editor collect and report warnings. Warnings can be treated as an error.
    		 */
    		Warning,
    
    		/** Prints a message to console (and log file) */
    		Display,
    
    		/** Prints a message to a log file (does not print to console) */
    		Log,
    
    		/** 
    		 * Prints a verbose message to a log file (if Verbose logging is enabled for the given category, 
    		 * usually used for detailed logging) 
    		 */
    		Verbose,
    
    		/** 
    		 * Prints a verbose message to a log file (if VeryVerbose logging is enabled, 
    		 * usually used for detailed logging that would otherwise spam output) 
    		 */
    		VeryVerbose,
    
    		// Log masks and special Enum values
    
    		All				= VeryVerbose,
    		NumVerbosity,
    		VerbosityMask	= 0xf,
    		SetColor		= 0x40, // not actually a verbosity, used to set the color of an output device 
    		BreakOnLog		= 0x80
    	};
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值