激情六月丁香婷婷|亚洲色图AV二区|丝袜AV日韩AV|久草视频在线分类|伊人九九精品视频|国产精品一级电影|久草视频在线99|在线看的av网址|伊人99精品无码|午夜无码视频在线

高校合作1:010-59833514 ?咨詢電話:400-810-1418 服務(wù)與監(jiān)督電話:400-810-1418轉(zhuǎn)接2

UE_LOG簡(jiǎn)明教程「虛幻引擎」

發(fā)布時(shí)間:2024-04-09 17:20:44 瀏覽量:243次

日志(Logging)意味著在運(yùn)行期間的某個(gè)時(shí)間保持事件、函數(shù)調(diào)用、變量值等的有序記錄。這通常以文本的形式保存在日志文件中。日志對(duì)于Unreal應(yīng)用開(kāi)發(fā)的調(diào)試排錯(cuò)非常有幫助,本文涵蓋UE4日志宏的語(yǔ)法、日志消息的格式化、自定義日志類別以及如何在屏幕輸出日志等內(nèi)容。

1、UE_LOG語(yǔ)法

下面是一個(gè)簡(jiǎn)單的日志消息示例:

UE_LOG(LogTemp, Warning, TEXT("Hello"));

要利用日志語(yǔ)句中獲得輸出,請(qǐng)確保在測(cè)試更改之前編譯項(xiàng)目。

UE_LOG是將日志消息輸出到日志文件中的宏。它采用的第一個(gè)輸入?yún)?shù)是日志記錄類別的名稱。引擎中已經(jīng)內(nèi)置了許多這些類別,在 CoreGlobals.h 中定義。您還可以創(chuàng)建自己的自定義日志記錄類別。稍后將描述這樣做的過(guò)程,單擊此處跳轉(zhuǎn)到該部分。

UE_LOG 宏的第二個(gè)參數(shù)聲明消息的詳細(xì)程度。上例中的最后一個(gè)參數(shù)是日志消息內(nèi)容,字符串也使用一些printf 格式說(shuō)明符,以便添加更多參數(shù)。請(qǐng)參閱下面的一些格式示例。

如果你正在搜索出現(xiàn)在視口上的藍(lán)圖樣式日志記錄,請(qǐng)單擊此處。

2、消息格式化示例

含F(xiàn)String參數(shù)的消息:

UE_LOG(LogTemp, Warning, TEXT("The Actor's name is %s"), *YourActor->GetName());

含布爾參數(shù)的消息:

UE_LOG(LogTemp, Warning, TEXT("The boolean value is %s"), ( bYourBool ? TEXT("true") : TEXT("false") ));

含整型參數(shù)的消息:

UE_LOG(LogTemp, Warning, TEXT("The integer value is: %d"), YourInteger);

含浮點(diǎn)型參數(shù)的消息:

UE_LOG(LogTemp, Warning, TEXT("The float value is: %f"), YourFloat);

含F(xiàn)Vector參數(shù)的消息:

UE_LOG(LogTemp, Warning, TEXT("The vector value is: %s"), *YourVector.ToString());

含多個(gè)參數(shù)的消息:

UE_LOG(LogTemp, Warning, TEXT("Current values are: vector %s, float %f, and integer %d"), *YourVector.ToString(), YourFloat, YourInteger);

3、關(guān)于Unreal日志

日志記錄意味著在運(yùn)行期間的某個(gè)時(shí)間保持事件、函數(shù)調(diào)用、變量值等的有序記錄。這通常以文本的形式保存在日志文件中。對(duì)于軟件開(kāi)發(fā)人員來(lái)說(shuō),它是一個(gè)非常寶貴的工具,尤其是在調(diào)試時(shí),因?yàn)樗梢蕴峁┯嘘P(guān)代碼在任何給定時(shí)刻正在做什么的詳細(xì)信息。好的用例包括確保某些代碼塊正在執(zhí)行、檢查函數(shù)之間傳遞的數(shù)據(jù)值以及報(bào)告潛在問(wèn)題。

4、訪問(wèn)UE4日志

使用 UE4 時(shí),有幾種不同的方式可以訪問(wèn)日志:

  • 如果你的 Play-In-Editor 會(huì)話已經(jīng)結(jié)束,可以在 YourProjectName\\Saved\\Logs 文件夾中找到該會(huì)話的完整日志。以前會(huì)話的日志也將在那里,可以在需要時(shí)訪問(wèn)。如果不知道你的項(xiàng)目在哪里,可以在 Epic Games 啟動(dòng)器中打開(kāi)項(xiàng)目庫(kù),右鍵單擊相關(guān)項(xiàng)目,然后選擇在文件夾中顯示選項(xiàng)。
  • 在輸出日志選項(xiàng)卡中的編輯器中播放時(shí),可以實(shí)時(shí)查看日志輸出。如果默認(rèn)沒(méi)有打開(kāi),可以在Window-\>Developer Tools-\>Output Log下找到。除了實(shí)時(shí)記錄之外,此選項(xiàng)卡還將保留當(dāng)前虛幻編輯器會(huì)話期間發(fā)生的所有播放會(huì)話的所有日志信息。
  • 如果你有一個(gè)可執(zhí)行文件,可以在其名稱末尾創(chuàng)建一個(gè)帶有 -Log 的快捷方式,以便在啟動(dòng)可執(zhí)行文件時(shí)打開(kāi)日志。
  • 可以在游戲運(yùn)行時(shí)按波浪號(hào) (\~) 鍵打開(kāi)控制臺(tái),并通過(guò)鍵入控制臺(tái)命令 showlog 并按 Enter 鍵訪問(wèn)日志。請(qǐng)注意,如果在 Play-In-Editor 會(huì)話期間執(zhí)行此操作,單擊 x 關(guān)閉日志將關(guān)閉你的虛幻編輯器會(huì)話。

5、虛幻引擎日志詳細(xì)級(jí)別

在某些情況下,查看更少或更詳細(xì)的日志輸出很有用。日志詳細(xì)級(jí)別允許輕松控制給定日志中存在的詳細(xì)級(jí)別。如果特定的日志語(yǔ)句比編譯時(shí)的詳細(xì)程度更詳細(xì),則不會(huì)將其編譯到游戲代碼中。之后,整個(gè)日志的級(jí)別設(shè)置為默認(rèn)詳細(xì)程度,可以在 Engine.ini 文件中更改??梢酝ㄟ^(guò)命令行更改運(yùn)行時(shí)詳細(xì)程度。給定日志的某個(gè)詳細(xì)級(jí)別,只有具有匹配或更低詳細(xì)級(jí)別的日志消息才會(huì)打印到它。具有較高詳細(xì)級(jí)別的消息將被忽略。

下表列出了所有可用的詳細(xì)級(jí)別,從最低詳細(xì)到最高:

Verbosity Level

Printed in Console?

Printed in Editor's Log?

Notes

Fatal

Yes

N/A

Crashes the session, even if logging is disabled

Error

Yes

Yes

Log text is coloured red

Warning

Yes

Yes

Log text is coloured yellow

Display

Yes

Yes

Log text is coloured grey

Log

No

Yes

Log text is coloured grey

Verbose

No

No


VeryVerbose

No

No


每個(gè)日志語(yǔ)句聲明它屬于哪個(gè)日志類別以及它的詳細(xì)級(jí)別。

6、自定義日志類別

創(chuàng)建自己的日志類別將使解析日志文件變得更加容易,因?yàn)槟憧梢栽凇拜敵鋈罩尽贝翱谥星袚Q日志類別的可見(jiàn)性。為項(xiàng)目中的每個(gè)主要系統(tǒng)創(chuàng)建一個(gè)新的日志類別通常是一個(gè)好主意,例如程序關(guān)卡生成器或者游戲模式。

你可以通過(guò)將這兩個(gè)片段放在需要使用此日志類別的任何位置來(lái)定義新的日志類別。可以將它們放在他們自己的文件中,并在需要的地方#include 。這些應(yīng)該在代碼的頂層,而不是在任何函數(shù)或類中。

頭文件:

DECLARE_LOG_CATEGORY_EXTERN(LogCustom, Log, All);

cpp文件:

DEFINE_LOG_CATEGORY(LogCustom);

頭文件片段的語(yǔ)法是
DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity).
DefaultVerbosity 是在 ini 文件或命令行中未指定詳細(xì)級(jí)別時(shí)使用的詳細(xì)級(jí)別。不會(huì)記錄任何比這更詳細(xì)的內(nèi)容。CompileTimeVerbosity 是要在代碼中編譯的最大詳細(xì)程度。任何比這更詳細(xì)的內(nèi)容都不會(huì)被編譯。

上面片段中的值是你的日志類別的一個(gè)很好的起點(diǎn)。

通常會(huì)看到日志類別以Log 為前綴,但這不是必需的。

7、將消息打印到屏幕

嚴(yán)格來(lái)說(shuō),在運(yùn)行時(shí)將消息打印到屏幕上不算作日志記錄,因?yàn)橄⒉粫?huì)保存在文件中。但是,在開(kāi)發(fā)和/或調(diào)試時(shí),它通常比使用日志消息更方便,因?yàn)樗试S你在游戲窗口中查看消息,而無(wú)需為日志打開(kāi)單獨(dú)的窗口。從實(shí)時(shí)變量值到函數(shù)調(diào)用順序的任何內(nèi)容都可以通過(guò)這種方式輕松查看。

這是一個(gè)簡(jiǎn)單的字符串消息的示例:

GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::White, TEXT("This message will appear on the screen!"));

第一個(gè)參數(shù)是消息的鍵(key)。如果 key 設(shè)置為 -1,則每次執(zhí)行這行代碼時(shí),都會(huì)在屏幕上添加一條新消息。例如,如果將這個(gè)添加到Tick()函數(shù)中,屏幕很快就會(huì)充斥著這些消息流。如果鍵是正整數(shù)(鍵的類型是 uint64),則每條新消息都會(huì)用與其鍵相同的整數(shù)替換前一條消息。例如,如果調(diào)用上述函數(shù)Tick()并將其鍵修改為 1,則游戲中的屏幕上只會(huì)看到一條消息,因?yàn)槊總€(gè)新調(diào)用都會(huì)簡(jiǎn)單地替換它。

第二個(gè)參數(shù)是顯示消息的時(shí)長(zhǎng),以秒為單位,它是浮點(diǎn)類型。

第三個(gè)參數(shù)是一個(gè)FColor 類型的參數(shù),用來(lái)確定文本顏色。最好使用在游戲世界背景下易于閱讀的顏色。最簡(jiǎn)單的方法是使用預(yù)定義的顏色常量,例如FColor::White. 有關(guān)可用顏色常量的完整列表,請(qǐng)參閱此官方文檔頁(yè)面的底部。

第四個(gè)參數(shù)是消息本身。請(qǐng)注意,整個(gè)字符串必須只占用一個(gè)參數(shù),因此,有多個(gè)參數(shù)的情況下需要使用FString::Printf():

GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("Some variable values: x = %f, y = %f"), x, y));

AddOnScreenDebugMessage()還有兩個(gè)可選參數(shù)。第五個(gè)參數(shù)是一個(gè)布爾值,用于確定新消息是出現(xiàn)在頂部(如果為真)還是底部(如果為假)。請(qǐng)注意,這僅適用于鍵值設(shè)置為 -1 的情況。第六個(gè)參數(shù)是確定文本比例的二維向量。如果打印到屏幕上的消息太小而難以閱讀,或者它們太大并占用太多屏幕空間,這將非常有用。

Visual Studio 可能會(huì)在 GEngine 下劃線并聲稱它是未定義的。但是,你無(wú)需顯式包含 Engine.h 或 EngineGlobals.h 即可在任何類中使用它。盡管有紅色下劃線,它應(yīng)該可以編譯并正常工作。

8、將消息添加到視口統(tǒng)計(jì)子系統(tǒng)

UE4.26 添加了視口統(tǒng)計(jì)子系統(tǒng),允許向當(dāng)前視口添加消息,例如“需要重建燈光”和“藍(lán)圖編譯錯(cuò)誤”。以下代碼示例是直接從此類復(fù)制粘貼的。只需檢查此類以檢查所有可用選項(xiàng)。

if (UViewportStatsSubsystem* ViewportSubsystem = GetWorld()->GetSubsystem<UViewportStatsSubsystem>())
{
	// Bind a member function delegate to the subsystem...
	FViewportDisplayCallback Callback;
	Callback.BindDynamic(this, &UCustomClass::DisplayViewportMessage);
	ViewportSubsystem->AddDisplayDelegate(Callback);
	
	// ... or use inline lambda functions
	ViewportSubsystem->AddDisplayDelegate([](FText& OutText, FLinearColor& OutColor)
	{
		// Some kind of state management
		OutText = NSLOCTEXT("FooNamespace", "Blarg", "Display message here");
		OutColor = FLinearColor::Red;
		return bShouldDisplay;
	});
}

原文鏈接:
http://www.bimant.com/blog/ue_log-crash-course/

熱門(mén)課程推薦

熱門(mén)資訊

請(qǐng)綁定手機(jī)號(hào)

x

同學(xué)您好!

您已成功報(bào)名0元試學(xué)活動(dòng),老師會(huì)在第一時(shí)間與您取得聯(lián)系,請(qǐng)保持電話暢通!
確定