开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

蛮牛译馆

关注:590

当前位置:游戏蛮牛 技术专区 蛮牛译馆

查看: 1794|回复: 11

[Unreal教程] C++创建自定义游戏调试器类别

[复制链接]  [移动端链接]
排名
8074
昨日变化
7

263

主题

301

帖子

1525

积分

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

UID
159865
好友
9
蛮牛币
3977
威望
0
注册时间
2016-8-1
在线时间
625 小时
最后登录
2017-11-7

蛮牛译员

发表于 2017-5-9 11:39:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 manew_JR 于 2017-5-9 11:41 编辑

创建自定义游戏调试器类别
01.png
平均阅读时间:3分钟

在这篇文章中,我们将会看到如何创建一个自定义的游戏调试器类别。到撰写本文时,官方文档页面已经过时了。
这篇文章是用4.15版的引擎写的。根据您阅读本文的时间,这些信息可能已经过时了。

请注意,这是一个帖子“创建自定义模块”的后续帖子。所以在继续之前,确保你已经完成了这篇文章,一切都很顺利。

修改.Build.cs文件

在我们进一步讨论之前,请打开.Build.cs文件的模块(就我而言这将是OrfeasModule.Build.cs文件并添加以下代码行:

[C++] 纯文本查看 复制代码
 if (UEBuildConfiguration.bBuildDeveloperTools || (Target.Configuration != UnrealTargetConfiguration.Shipping && Target.Configuration != UnrealTargetConfiguration.Test))
        {
            PrivateDependencyModuleNames.Add("GameplayDebugger");
            Definitions.Add("WITH_GAMEPLAY_DEBUGGER=1");
        }
        else
        {
            Definitions.Add("WITH_GAMEPLAY_DEBUGGER=0");
        }


当你完成,添加一个新的c++类,继承了UObject内部模块并命名为CustomGameplayDebugger所以这样您可以按照本教程更容易实现

创建GameplayDebuggerCategory
打开CustomGameplayDebugger类的头文件,删除代码编辑器已经的代码并声明以下类:

[C++] 纯文本查看 复制代码
#pragma once

#include "CoreMinimal.h"

#if WITH_GAMEPLAY_DEBUGGER

#include "GameplayDebuggerCategory.h"

//Forward declarations
class AActor;
class APlayerController;
class FGameplayDebuggerCanvasContext;

//The data we're going to print inside the viewport
struct FDataToPrint
{
        float HP;
        float Damage;
};

//The class of our custom gameplay debugger category
class FGameplayDebuggerCategory_Orfeas : public FGameplayDebuggerCategory
{

protected:
        
        //The data that we're going to print
        FDataToPrint Data;

public:

        FGameplayDebuggerCategory_Orfeas();

        /** Creates an instance of this category - will be used on module startup to include our category in the Editor */
        static TSharedRef<FGameplayDebuggerCategory> MakeInstance();

        /** Collects the data we would like to print */
        virtual void CollectData(APlayerController* OwnerPC, AActor* DebugActor) override;

        /** Displays the data we collected in the CollectData function */
        virtual void DrawData(APlayerController* OwnerPC, FGameplayDebuggerCanvasContext& CanvasContext) override;
};

#endif


然后,打开类的源文件并输入以下代码:

[C++] 纯文本查看 复制代码
#include "GDBlogPostCharacter.h"

#if WITH_GAMEPLAY_DEBUGGER

#include "DebugRenderSceneProxy.h"

FGameplayDebuggerCategory_Orfeas::FGameplayDebuggerCategory_Orfeas()
{
        bShowOnlyWithDebugActor = false;
}

TSharedRef<FGameplayDebuggerCategory> FGameplayDebuggerCategory_Orfeas::MakeInstance()
{
        return MakeShareable(new FGameplayDebuggerCategory_Orfeas());
}

void FGameplayDebuggerCategory_Orfeas::CollectData(APlayerController* OwnerPC, AActor* DebugActor)
{

        if (DebugActor)
        {
                AGDBlogPostCharacter* Char = Cast<AGDBlogPostCharacter>(DebugActor);

                if (Char)
                {
                        //Store the data to our struct
                        Data.HP = Char->Health;
                        Data.Damage = Char->MaxDamage;
                }
        }
}

void FGameplayDebuggerCategory_Orfeas::DrawData(APlayerController* OwnerPC, FGameplayDebuggerCanvasContext& CanvasContext)
{
        //Test print with white text
        CanvasContext.Printf(TEXT("Test Print"));

        CanvasContext.Printf(FColor::Yellow, TEXT("Yet again another print!"));

        //Print the health data with green color
        CanvasContext.Printf(TEXT("{green}HP: %s"), *FString::SanitizeFloat(Data.HP));

        //Print the damage data with red color
        CanvasContext.Printf(TEXT("{red}Damage: %s"), *FString::SanitizeFloat(Data.Damage));
}

#endif


在你试图构建您的项目之前,确保你的角色类标有适当的* _API宏否则,您将遇到一个链接错误。(特别感谢Mieszko Zielinski在这一点的帮助)。

在我的例子中,我的项目被命名为“GDBlogPost”所以我的角色类在类声明:下面的宏
[C#] 纯文本查看 复制代码
class GDBLOGPOST_API AGDBlogPostCharacter : public ACharacter


此外,不要忘记在头文件中添加角色 Health MaxDamage属性:

[C++] 纯文本查看 复制代码
public:

        UPROPERTY(EditAnywhere)
        float Health;

        UPROPERTY(EditAnywhere)
        float MaxDamage;


我们需要做的最后一件事情是告诉我们的模块在它的启动时注册我们的自定义游戏调试器类别。此外,如果关闭,我们需要告诉我们的模块是否取消我们的类别。要做到这一点,请访问您的模块的源文件,并输入以下代码:

[C++] 纯文本查看 复制代码
void FOrfeasModule::StartupModule()
{
        UE_LOG(OrfeasModule, Warning, TEXT("Orfeas module has started!"));

#if WITH_GAMEPLAY_DEBUGGER

        //If the gameplay debugger is available, register the category and notify the editor about the changes
        IGameplayDebugger& GameplayDebuggerModule = IGameplayDebugger::Get();

        GameplayDebuggerModule.RegisterCategory("OrfeasCustomCategory", IGameplayDebugger::FOnGetCategory::CreateStatic(&FGameplayDebuggerCategory_Orfeas::MakeInstance), EGameplayDebuggerCategoryState::EnabledInGameAndSimulate);

        GameplayDebuggerModule.NotifyCategoriesChanged();

#endif
}

void FOrfeasModule::ShutdownModule()
{
        UE_LOG(OrfeasModule, Warning, TEXT("Orfeas module has shut down"));

#if WITH_GAMEPLAY_DEBUGGER
        //If the gameplay debugger is available, unregister the category
        if (IGameplayDebugger::IsAvailable())
        {
                IGameplayDebugger& GameplayDebuggerModule = IGameplayDebugger::Get();
                GameplayDebuggerModule.UnregisterCategory("OrfeasCustomCategory");
        }
#endif
}


一旦你完成了这个任务,保存并构建你的项目。现在,如果你在游戏调试器选项中导航到你的项目的设置,你将有以下类别:

02.png

如果这个选项不可见,您可能需要重新启动编辑器。

支持Gameplay Debugger
为了开启gameplay debugger点击键盘上你撇号键(‘) 并键入“showflag.debugAI 1”控制指令当你模拟游戏的时候
然后,选择你的角色。下面的窗口将出现:
03.png





原文标题:Creating Custom Gameplay Debugger Categories





       蛮牛译林军福利多多哦!

扫描下方二维码关注游戏蛮牛官方微信~每日都有精选干货与你分享呦~
155547iluo7umxezrb2ekr.png




回复

使用道具 举报

5熟悉之中
515/1000
排名
9409
昨日变化
5

0

主题

319

帖子

515

积分

Rank: 5Rank: 5

UID
161170
好友
0
蛮牛币
810
威望
0
注册时间
2016-8-8
在线时间
108 小时
最后登录
2017-11-12
发表于 2017-5-9 12:12:07 | 显示全部楼层
时代风帆避风港虽然噶人噶生日

回复 支持 反对

使用道具 举报

7日久生情
3059/5000
排名
1435
昨日变化
9

4

主题

1820

帖子

3059

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
182740
好友
0
蛮牛币
4745
威望
0
注册时间
2016-11-10
在线时间
533 小时
最后登录
2017-11-19
发表于 2017-5-9 13:04:00 | 显示全部楼层
谢谢分享!!!!!!!
[发帖际遇]: yhr28 捡了钱没交公 蛮牛币 降了 1 . 幸运榜 / 衰神榜

回复

使用道具 举报

6蛮牛粉丝
1314/1500
排名
4735
昨日变化
1

0

主题

858

帖子

1314

积分

Rank: 6Rank: 6Rank: 6

UID
189581
好友
0
蛮牛币
1620
威望
0
注册时间
2016-12-5
在线时间
220 小时
最后登录
2017-9-15
发表于 2017-5-9 14:00:39 | 显示全部楼层
给力啊 谢谢分享
[发帖际遇]: cs562981849 乐于助人,奖励 2 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

5熟悉之中
621/1000
排名
3044
昨日变化
11

0

主题

89

帖子

621

积分

Rank: 5Rank: 5

UID
210517
好友
0
蛮牛币
2223
威望
0
注册时间
2017-3-7
在线时间
150 小时
最后登录
2017-11-18
发表于 2017-5-11 20:12:48 | 显示全部楼层
谢谢分享,学习了

回复

使用道具 举报

7日久生情
2979/5000
排名
422
昨日变化
1

0

主题

213

帖子

2979

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
113
好友
2
蛮牛币
4262
威望
0
注册时间
2013-5-30
在线时间
1438 小时
最后登录
2017-11-18
发表于 2017-5-12 09:26:21 | 显示全部楼层
这个不错,谢谢分享
[发帖际遇]: ken.sniper 乐于助人,奖励 3 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

7日久生情
2003/5000
排名
17655
昨日变化
8

2

主题

1675

帖子

2003

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
185807
好友
0
蛮牛币
2610
威望
0
注册时间
2016-11-22
在线时间
302 小时
最后登录
2017-11-15
发表于 2017-5-12 10:19:00 | 显示全部楼层
赞,学习了,谢谢分享

回复 支持 反对

使用道具 举报

7日久生情
2017/5000
排名
606
昨日变化

1

主题

531

帖子

2017

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
111260
好友
0
蛮牛币
7310
威望
0
注册时间
2015-6-30
在线时间
343 小时
最后登录
2017-10-17
发表于 2017-5-13 10:45:29 | 显示全部楼层

谢谢分享!!!!

回复

使用道具 举报

7日久生情
2003/5000
排名
17655
昨日变化
8

2

主题

1675

帖子

2003

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
185807
好友
0
蛮牛币
2610
威望
0
注册时间
2016-11-22
在线时间
302 小时
最后登录
2017-11-15
发表于 2017-5-13 14:02:27 | 显示全部楼层
赞,学习了,谢谢分享

回复 支持 反对

使用道具 举报

4四处流浪
392/500
排名
9409
昨日变化
5

0

主题

215

帖子

392

积分

Rank: 4

UID
146677
好友
7
蛮牛币
1953
威望
0
注册时间
2016-4-25
在线时间
90 小时
最后登录
2017-11-16
QQ
发表于 2017-5-13 20:03:17 | 显示全部楼层
支持一下,好东西

回复

使用道具 举报

5熟悉之中
705/1000
排名
3058
昨日变化
3

0

主题

134

帖子

705

积分

Rank: 5Rank: 5

UID
146545
好友
0
蛮牛币
773
威望
0
注册时间
2016-4-24
在线时间
194 小时
最后登录
2017-11-17
QQ
发表于 2017-5-19 16:56:51 | 显示全部楼层
路过,只是看看

回复

使用道具 举报

4四处流浪
486/500
排名
7091
昨日变化
4

3

主题

251

帖子

486

积分

Rank: 4

UID
173610
好友
1
蛮牛币
1474
威望
0
注册时间
2016-10-6
在线时间
96 小时
最后登录
2017-11-8
发表于 2017-5-23 08:09:49 来自Mobile--- | 显示全部楼层
感谢楼主分享~

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表