發(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)容。
下面是一個(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)單擊此處。
含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);
日志記錄意味著在運(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)題。
使用 UE4 時(shí),有幾種不同的方式可以訪問(wèn)日志:
在某些情況下,查看更少或更詳細(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í)別。
創(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 為前綴,但這不是必需的。
嚴(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)該可以編譯并正常工作。
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)資訊
探討游戲引擎的文章,介紹了10款游戲引擎及其代表作品,涵蓋了RAGE Engine、Naughty Dog Game Engine、The Dead Engine、Cry Engine、Avalanche Engine、Anvil Engine、IW Engine、Frostbite Engine、Creation引擎、Unreal Engine等引擎。借此分析引出了游戲設(shè)計(jì)領(lǐng)域和數(shù)字藝術(shù)教育的重要性,歡迎點(diǎn)擊咨詢報(bào)名。
2. 手機(jī)游戲如何開(kāi)發(fā)(如何制作傳奇手游,都需要準(zhǔn)備些什么?)
?如何制作傳奇手游,都需要準(zhǔn)備些什么?提到傳奇手游相信大家都不陌生,他是許多80、90后的回憶;從起初的端游到現(xiàn)在的手游,說(shuō)明時(shí)代在進(jìn)步游戲在更新,更趨于方便化移動(dòng)化。而如果我們想要制作一款傳奇手游的
3. B站視頻剪輯軟件「必剪」:免費(fèi)、炫酷特效,小白必備工具
B站視頻剪輯軟件「必剪」,完全免費(fèi)、一鍵制作炫酷特效,適合新手小白??靵?lái)試試!
4. Steam值得入手的武俠游戲盤(pán)點(diǎn),各具特色的快意江湖
游戲中玩家將面臨武俠人生的掙扎抉擇,戰(zhàn)或降?殺或放?每個(gè)抉定都將觸發(fā)更多愛(ài)恨糾葛的精彩奇遇?!短烀嬗肪哂卸嗑€劇情多結(jié)局,不限主線發(fā)展,高自由...
5. Bigtime加密游戲經(jīng)濟(jì)體系揭秘,不同玩家角色的經(jīng)濟(jì)活動(dòng)
Bigtime加密游戲經(jīng)濟(jì)模型分析,探討游戲經(jīng)濟(jì)特點(diǎn),幫助玩家更全面了解這款GameFi產(chǎn)品。
6. 3D動(dòng)畫(huà)軟件你知道幾個(gè)?3ds Max、Blender、Maya、Houdini大比拼
當(dāng)提到3D動(dòng)畫(huà)軟件或動(dòng)畫(huà)工具時(shí),指的是數(shù)字內(nèi)容創(chuàng)建工具。它是用于造型、建模以及繪制3D美術(shù)動(dòng)畫(huà)的軟件程序。但是,在3D動(dòng)畫(huà)軟件中還包含了其他類型的...
7. 3D動(dòng)漫建模全過(guò)程,不是一般人能學(xué)的會(huì)的,會(huì)的多不是人?
步驟01:面部,頸部,身體在一起這次我不準(zhǔn)備設(shè)計(jì)圖片,我從雕刻進(jìn)入。這一次,它將是一種純粹關(guān)注建模而非整體繪畫(huà)的形式。像往常一樣,我從Sphere創(chuàng)建它...
8. 如何自己開(kāi)發(fā)一款游戲(游戲開(kāi)發(fā)入門(mén)必看:五大獨(dú)立游戲開(kāi)發(fā)技巧)
?游戲開(kāi)發(fā)入門(mén)必看:五大獨(dú)立游戲開(kāi)發(fā)技巧無(wú)論您是剛剛起步開(kāi)發(fā)自己的第一款游戲,還是已經(jīng)制作了幾款游戲,本篇文章中的5大獨(dú)立游戲開(kāi)發(fā)技巧都可以幫助您更好地設(shè)計(jì)下一款游戲。無(wú)論你對(duì)游戲有著什么樣的概念,都
9. 開(kāi)發(fā)三昧游戲叫什么(三昧動(dòng)漫)
?三昧動(dòng)漫對(duì)于著名ARPG游戲《巫師》系列,最近CD Projekt 的高層回應(yīng)并不會(huì)推出《巫師4》。因?yàn)椤段讕煛废盗性诓邉澋臅r(shí)候一直定位在“三部曲”的故事框架,所以在游戲的出品上不可能出現(xiàn)《巫師4》
10. 3D打印技巧揭秘!Cura設(shè)置讓你的模型更堅(jiān)固
想讓你的3D打印模型更堅(jiān)固?不妨嘗試一下Cura參數(shù)設(shè)置和設(shè)計(jì)技巧,讓你輕松掌握!
最新文章
同學(xué)您好!