你的个性化我来满足|GPM 2.0 API 功能助力定制你的性能优化

你的个性化我来满足|GPM 2.0 API 功能助力定制你的性能优化

GPM 2.0是UWA团队为解决线上玩家性能问题而推出的创新产品,它能够帮助开发者全面监测和优化游戏性能,提升玩家体验。然而每个项目都有其独特的特点和需求,为此,UWA在最新GPM 2.0产品中引入了API功能,以满足用户对灵活性和可定制性的需求,允许开发者根据具体项目进行高度定制的性能监控。同时,新功能还包括对游戏截帧分辨率的灵活设置和更易用的异常上报阈值操作,从而使性能监测更加高效、直观。本期将介绍几种基于API的常用应用场景,并提供相应的代码示例,欢迎大家借鉴学习!

首先,对于希望使用API模式进行数据采集的项目组而言,需要完成以下两个操作来实现采集模式的切换。

  1. 在「GPM设置」-「阈值设置」中开启服务端的API模式

  1. 在客户端调用Begin/EndDeepTracking接口
btn_deepmode_event. onClick.AddListener(()=> dmpanel.SetActive(true));
btn_dm_enable. onClick.AddListener(()=›
{
    UWAGPM.BeginDeepTracking();
    dmpanel.SetActive(false);
});
btn_dm_disable. onClick.AddListener(()=›
{
    UWAGPM.EndDeepTracking();
    dmpanel.SetActive(false);
});

好了,准备就绪!下面UWA提供针对不同的使用场景,如何使用API的代码示例。

针对指定场景开启异常数据上报

效果

当进行场景切换时,调用API进行异常数据上报的开关。

代码

void OnSceneChanged(string sceneName)
{
    if(!CustomGpmMgr.needDeepTrack)
    return;

    if(CustomGpmMgr.deepTracking)
        UWAGPM.EndDeepTracking();

    CustomGpmMgr. deepTracking =CustomGpmMgr.IsSceneToTrack(sceneName);

    if(CustomGpmMgr.deepTracking)
        UWAGPM.BeginDeepTracking();
}

CustomGpmMgr类是示例代码,非SDK提供,仅供参考

注:在“IsSceneToTrack”中,可以实现自定义的判断逻辑,例如:场景名是否为“Battle”;场景名是否在指定的HashSet中等。

案例

仅针对指定场景“00_mochuanlinju”场景、“1000_daditu”进行异常数据采集。


此处绿色挡板表示该场景非指定场景,不采集数据

针对指定用户开/关实时截帧、自定义截帧分辨率

效果

在开启异常数据上报的前提下,调用API设置实时截帧相关配置。例如:只针对部分用户ID开启实时截帧,或对于VIP用户设置较高的截帧分辨率等。

代码

void OnDeepModeStart()
{
    boolscreenCapture=CustomGpmMgr.IsUserToCaptureScreen(GameInfo.UserId);

    UWAGPM.SetScreenShotEnabled(screenCapture,true);               // 10 秒常规截图
    UWAGPM.SetScreenShotEnabled(screenCapture,false);              // 性能异常截图

    if(screenCapture)
    {
        UWAGPM.SetScreenShotRatio(0.2f,false);                     // 10 秒常规截图
        UWAGPM.SetScreenShotRatio(GameInfo. VIP ?0.4f:0.2f,true);  // 性能异常截图
    }
}

CustomGpmMgr类是示例代码,非SDK提供,仅供参考

注:在“IsSceneToTrack”中,可以实现自定义的判断逻辑,例如:场景名是否为“Battle”;场景名是否在指定的HashSet中等。

案例

1. 关闭异常截帧,仅开启每10秒一张的定时截帧

默认包含定时截帧和异常截帧的效果

2. 调整异常截帧分辨率大小(30%-60%不等)

默认分辨率大小为30%的截帧效果

调整分辨率大小为60%的截帧效果

若不使用该API,则截帧分辨率为100%。通过调整分辨率可以进一步减小数据传输对网络模块的影响。

自定义事件

在例如MMORPG或是MOBA游戏中,项目组不时会收到一些令人费解的现象,例如:两名玩家使用相同的设备、相同的角色在同一个场景下战斗,为什么玩家A出现了严重的掉帧情况但是玩家B没有问题?此时,我们可能会将调查重点放在玩家可操作的“变量”上,例如携带的宠物、装备、符文或使用的技能,这些因素可能导致了性能表现的差异。在这种情况下,自定义事件成为定位问题的有力工具。

1. 针对特定场景上报信息,方便标记运行环境

效果

进入战斗时,上报使用的英雄、武器、玩家等级等信息。

代码

void OnBattleStart()
{
    UWAGPM.AddCustomEvent("user info","battle"
        "hero_id",GameInfo.HeroId,
        "weapon_id",GameInfo.WeaponId,
        "level",GameInfo.Level);
}

2. 针对特定步骤上报信息,方便标记特殊操作

效果

战斗中,英雄释放技能时,上报对应的技能ID。

代码

void OnSkillStart()
{
    UWAGPM. AddCustomEvent ("skill _start","battle",
        "skill_id", FightInfo.SkillId);
}

案例

角色释放技能时调用API上报玩家所在场景、释放的技能和当时的等级。

自定义阈值

对于不少项目而言,需要在不同的场景下设定不同的目标帧率,例如大厅下为30帧,在战斗场景下需要切换到60帧以保证玩家的游戏体验,进入动画播片时又会变成预设的30帧。或是项目组在规划的时候细分了较多的画面质量,针对不同档位的设备分别有不同的目标帧率和PSS内存阈值。

针对这种情况,GPM 2.0也提供了可以针对不同场景、画质可以分开设置FPS阈值和PSS内存阈值的API,以便更加贴合项目组的实际性能监控需求。

1. 针对特定场景调整FPS的低帧阈值

效果

将lobby场景和battle场景的FPS低帧阈值分开设置,lobby场景下的低帧阈值为20帧,battle场景下的低帧阈值设为25帧。

代码

void OnSceneChanged(string sceneName)
{
    //重置 FPS 低帧阈值
    UWAGPM.SetThreshold(UWAGPM.MetricThresholdID.FPS_LOW,-1);

    if(sceneName =="lobby")
    {
        UWAGPM.SetThreshold(UWAGPM.MetricThresholdID. FPS_LOW,20);
    }
    elseif(sceneName =="battle")
    {
        UWAGPM.SetThreshold(UWAGPM.MetricThresholdID.FPS_LOW,25);
    }
}

2. 针对画质及目标帧率调整FPS和设备内存阈值

效果

  • 将不同目标帧率的场景的FPS低帧阈值分开设置,目标帧率为30的低帧阈值设为25;目标帧率为60的低帧阈值设为45;
  • 将不同画质场景下的PSS内存过高阈值分开设置,中等画质及以上的内存阈值设为4GB;中画质以下的内存阈值设为3GB。

代码

void OnQualityChanged(QualityLevel level)
{
    // 重置 FPS 低帧阈值,设备内存阈值
    UWAGPM.SetThreshold(UWAGPM.MetricThresholdID.FPS_LOW,-1);
    UWAGPM.SetThreshold(UWAGPM.MetricThresholdID.PSS_MB,-1);

    if(Application.targetFrameRate ==60)
        UWAGPM.SetThreshold(UWAGPM.MetricThresholdID.FPS_LOW,45);
    elseif(Application.targetFrameRate ==30)
        UWAGPM.SetThreshold(UWAGPM.MetricThresholdID.FPS_LOW,25);

    if(level ›=QualityLevel.Good)
        UWAGPM.SetThreshold(UWAGPM.MetricThresholdID.PSS_MB,4096);
    else
        UWAGPM.SetThreshold(UWAGPM.MetricThresholdID.PSS_MB,3072);
}

案例


在游戏开始的第325秒之后调整FPS抖动的触发阈值
前半段为8帧,后半段为20帧

我们希望GPM 2.0的API模式能够为项目组提供更加自由、灵活的数据采集方式,帮助大家根据具体需求制定清晰的评价标准。通过这种方式,项目组能够更精准地识别和解决性能问题,从而有的放矢地提升玩家体验。


如果您的项目也希望体验GPM 2.0的强大功能,欢迎随时与UWA取得联系。我们将为您提供免费试用机会,并在试用期间全程支持服务搭建、数据分析与反馈,确保您能够充分体验GPM 2.0带来的价值。我们致力于为开发者提供更丰富的数据获取方式、更灵活的数据组合以及更精准的事件监控,助力游戏项目在性能优化和用户体验提升上取得显著进展。我们期待与开发者共同探索游戏性能监控与分析的全新领域,为玩家打造更加流畅、稳定、沉浸的游戏世界。

联系UWA:
邮件:sales@uwa4d.com
微信号:17502188376