朱峰社區(qū)首頁 朱峰社區(qū)

搜索資源 注冊|登陸

等待

返回 展開菜單

使用虛幻引擎4可視化記錄器

Houdini基礎 觀看預覽

Houdini基礎

包含36節(jié)視頻教程
關注28.0萬

(本教程houdini技術已老請購買之后houdini更新課程)Houdini是一款功能強大的3D合成軟件,曾經(jīng)效力于300部以上經(jīng)典電影的特效制作,比如煙火,水等復雜的后期合成都少不了它。

關閉

有一類游戲缺陷通過用戶報告是很難跟蹤的。這種類型的缺陷一般涉及到復雜的步驟,可能涉及到AI要根據(jù)當前的游戲狀態(tài)做出決定。 當用戶報告一個類似這種情形的問題時,僅能在可以觀察得到的結果上報告。 這使得追蹤游戲狀態(tài)相關的問題變得非常難。 虛幻引擎4有一個工具可以在這方面予以輔助;我們稱之為Visual Logger(可視化記錄器)。 其核心同您以前看過的很多日記記錄系統(tǒng)類似,可以捕獲當前正在被記錄的actor的狀態(tài),然后當那個事實完成之后在游戲或編輯器中可視化地顯示該狀態(tài)。 這是一個強大的工具,允許您在出現(xiàn)問題時查看游戲狀態(tài),同時還提供用戶報告。 通過查看那些數(shù)據(jù),您可以將您期望發(fā)生的事同數(shù)據(jù)及底層代碼比較。

要想查看正在運作中的Visual Logger(可視化記錄器),請使用“窗口| 開發(fā)者工具 | Visual Logger(可視化記錄器)”菜單。 在4.7版本之前,請使用控制臺命令"VisLog"。 這里是StrategyGame中的一個會話。 第一個圖片顯示了該可視化記錄器,第二張圖片是編輯器中的視口。 注意,有一條代表選中AI的路徑的紫色線,時間軸上選中點處還有一個紅色的位置標識。


正在運作中的可視化記錄器。


編輯器中的關卡視口,顯示了呈現(xiàn)信息的可視化記錄器.

下面圖片中的突出呈現(xiàn)區(qū)域顯示了Actor列表,這些Actor的信息在記錄過程中被記錄到了可視化記錄器中。 還有一個搜索條,用于通過名稱快速地查找Actor的日志信息。


Actor列表和搜索選項。

下一張圖片突出顯示了時間軸視圖。 這張圖片中的拖拽塊位于23.53秒標記處。 StrategyAIController_1被選中,所以那個時刻其他區(qū)域的任何信息都屬于該Actor。 帶顏色的水平條是記錄的事件。 時間條可以前后拖動來通過特定快照即時地更新其他區(qū)域。


時間軸區(qū)域

在下面圖片的左下角區(qū)域的高亮顯示部分中,可視化記錄器顯示了在時間軸上的指定時間處可以捕獲的針對那個Actor的任何快照數(shù)據(jù)。 該數(shù)據(jù)在每個給定幀中被捕獲一次,該Actor通過使用UE_VLOG()宏請求一個可視化日志項。 同一幀中的多個可視化記錄調(diào)用會重用那幀的相同數(shù)據(jù)。 作為快照一部分捕獲的數(shù)據(jù)可以進行分類,并針對你的游戲進行自定義(以下提供了一個代碼示例)。


展開了自定義類別的Actor快照區(qū)域

下圖中突出顯示的區(qū)域包圍了可視化記錄器的記錄區(qū)域。 它顯示了該日志所寫入的類別及日志信息本身。 如果每幀有多個日志信息,那么它們將在那個區(qū)域顯示為列表。


顯示信息的日志區(qū)域

既然現(xiàn)在您知道了可視化記錄器的主要區(qū)域的作用,現(xiàn)在讓我們看下如何在您的游戲中添加針對它的支持吧。 在下圖中,使用第一人稱模板創(chuàng)建了一個新項目,命名為GDC,用于在游戲開發(fā)者大會上進行展示。 向Actor的捕獲狀態(tài)信息中添加了一個函數(shù),并添加了一個UE_VLOG()宏調(diào)用來觸發(fā)日志記錄器的捕獲。


帶有示例數(shù)據(jù)的可視化記錄器

為了填充該工具的快照區(qū)域,您需要重載一個虛擬函數(shù)GrabDebugSnapshot()。 該函數(shù)是作為Actor的一部分實現(xiàn)的,所以如果您不想提供自定義信息,您可以跳過此步。 可視化記錄器可以根據(jù)您的編譯設置進行編譯,所以您必須使用適當?shù)念^文件封裝該函數(shù)。 以下是需要添加到GDCCharacter.h文件中的代碼,以添加快照支持:

#if ENABLE_VISUAL_LOG

    /** Appends information about this actor to the visual logger */

    virtual void GrabDebugSnapshot(FVisualLogEntry* Snapshot) const override;

#endif

該方法的實現(xiàn)請參照下面,添加了一個類別并在那個類別中添加了一項。 再次說明,該方法封裝在#ifdef中,以防版本設置編譯可視化記錄器支持。 該代碼添加到GDCCharacter.cpp中。

#if ENABLE_VISUAL_LOG

void AGDCCharacter::GrabDebugSnapshot(FVisualLogEntry* Snapshot) const

{

    Super::GrabDebugSnapshot(Snapshot);

    const int32 CatIndex = Snapshot->Status.AddZeroed();

    FVisualLogStatusCategory& PlaceableCategory = Snapshot->Status[CatIndex];

    PlaceableCategory.Category = TEXT("GDC Sample");

    PlaceableCategory.Add(TEXT("Projectile Class"), ProjectileClass != nullptr ? ProjectileClass->GetName() : TEXT("None"));

}

#endif

該函數(shù)僅當Actor向可視化記錄器記錄日志時調(diào)用。 出于示范的目的,記錄了一個射彈的發(fā)射情形,以便可以輕松地觸發(fā)它并添加到第一人稱模板代碼中。 在下面的OnFire()函數(shù)中,請注意UE_VLOG()宏的應用。 這是您告訴可視化記錄器您想如何捕獲Actor的數(shù)據(jù)的方式。 正如前面所述的,在首次使用那個宏時,可視化記錄器將調(diào)用 GrabDebugSnapshot()來收集在快照面板中顯示所需的數(shù)據(jù)。 該宏像其他UE_LOG()宏一樣進行編譯,所以不需要在 #ifdef中顯式地封裝它。

void AGDCCharacter::OnFire()

{

    // try and fire a projectile

    if (ProjectileClass != NULL)

    {

        const FRotator SpawnRotation = GetControlRotation();

        // MuzzleOffset is in camera space, so transform it to world space before offsetting from the character location to find the final muzzle position

        const FVector SpawnLocation = GetActorLocation() + SpawnRotation.RotateVector(GunOffset);

        UWorld* const World = GetWorld();

        if (World != NULL)

        {

            // spawn the projectile at the muzzle

            World->SpawnActor<AGDCProjectile>(ProjectileClass, SpawnLocation, SpawnRotation);

            UE_VLOG(this, LogFPChar, Verbose, TEXT("Fired projectile (%s) from location (%s) with rotation (%s)"),

                *ProjectileClass->GetName(),

                *SpawnLocation.ToString(),

                *SpawnRotation.ToString());

        }

    }

    // try and play the sound if specified

    if (FireSound != NULL)

    {

        UGameplayStatics::PlaySoundAtLocation(this, FireSound, GetActorLocation());

    }

    // try and play a firing animation if specified

    if(FireAnimation != NULL)

    {

        // Get the animation object for the arms mesh

        UAnimInstance* AnimInstance = Mesh1P->GetAnimInstance();

        if(AnimInstance != NULL)

        {

            AnimInstance->Montage_Play(FireAnimation, 1.f);

        }

    }

}

您不僅可以記錄文本信息,您還可以記錄像您之前在StrategyGame關卡視口中看到的可視化的圖形信息。 這是一個強大的功能,因為它可以幫助您可視化游戲中當前的運行狀態(tài)。 以下圖片顯示了您可以可視化記錄的不同形狀類型。


路徑信息、圓柱體、椎體、膠囊體、盒體式形狀。

以下宏提供了記錄形狀的支持。

朱峰社區(qū)vip超值服務 朱峰社區(qū)vip超值服務

朱峰社區(qū)網(wǎng)頁版
朱峰社區(qū)網(wǎng)頁版(手機掃描-分享-添加到屏幕)


朱峰社區(qū)公眾號
朱峰社區(qū)微信公眾號(微信掃一掃-關注)

資源說明圖文教程無法下載,只能觀看圖片和文字。
版權規(guī)則本站圖文皆來自互聯(lián)網(wǎng)共享資源,如涉及到版權請查看版權規(guī)則。本平臺提供圖文僅可用于個人學習,如用于商業(yè)請購買正版。您必須遵守的版權規(guī)則

未知用戶

未知用戶

bozim

bozim

普通會員

棒棒噠,感謝分享

贊0

踩0

17年2月7日

qwe7610320

qwe7610320

VIP終身

繼續(xù)加油

贊0

踩0

17年2月7日

2005-2024 朱峰社區(qū) 版權所有 遼ICP備2021001865號-1
2005-2024 ZhuFeng Community All Rights Reserved

VIP

朱峰社區(qū)微信公眾號

回頂部

1.復制文本發(fā)給您的QQ好友或群、微信等;好友點擊鏈接以后,轉(zhuǎn)發(fā)就成功了。 2.如朋友點擊您的鏈接,您需要需刷新一下才行;同一個好友僅能點擊一次。
購買VIP,觀看所有收費教程!