Unity接入指南
接入SDK前,请您仔细阅读PerfSight SDK个人信息处理规则,在同意个人信息处理规则后,请按下述指引接入SDK。
解压压缩包,将PerfSightPlugin下的Plugins以及Scripts文件夹复制到游戏的Assets目录中。
1. 初始化(必选)
选择第一个或主场景,在任意脚本文件中调用如下代码(建议选择较早加载的脚本)进行初始化。一般在Awake函数中调用。
void Awake()
{
…
PerfSightAgent.EnableDebugMode(); //可选,调试情况下打开日志
PerfSightAgent.InitContext("appid");//必选,AppId请联系PerfSight获取
…
}
2. 用户标识(必选)
public static void SetUserId(string openId)
功能:设置OpenId
参数 openId: openId信息
返回值:无
PerfSight既能反映整体大盘的外网性能状况,也提供接口进行单用户的性能回溯,通过PerfSightAgent.SetUserId设置玩家OpenId之后,在Web端可以通过玩家OpenId查看其性能数据,准确还原玩家游戏性能,此接口可在程序任意位置调用。
3. 场景开始标记(必选)
public static void MarkLoadlevel(string sceneName)
功能:标记场景开始
参数 sceneName: 场景标识
返回值:无
PerfSight提供按需采集的功能。默认情况下, PerfSight将不会进行数据采集,只有当场景开始标记之后才开始采集数据。 PerfSight中的场景是逻辑意义上的表示,和实际的物理场景没有直接关系,因此场景标记的接口可在任意位置调用,一般地在Unity中的Application.LoadLevel函数前调用PerfSightAgent.MarkLoadlevel("SceneName")。
4. 场景加载结束(可选)
public static void MarkLoadlevelCompleted()
功能:标识场景加载结束
参数:无
返回值:无
在场景加载完毕之后通过调用PerfSightAgent.MarkLoadlevelCompleted()进行场景加载结束的标记,通过 调用此接口可计算场景的加载时间。一般地,MarkLoadlevelCompleted需要在场景加载完毕之后的GameObject脚本中被调用。在同一个逻辑场景中(MarkLeveLoad到MarkLevelFin)多次调用此接口无效,其只会执行一次。
5. 场景结束标记(必选)
public static void MarkLevelFin()
功能:标识场景加载结束
参数:无
返回值:无
通过PerfSightAgent.MarkLevelFin ()函数来标记场景结束(非必要),场景的性能数据将异步发送至PerfSight的服务器,如果没有通过调用PerfSightAgentt.MarkLevelFin()函数来结束场景,整个场景的时间以下一次调用PerfSightAgent.MarkLoadlevel ("LevelName ")的时间为场景结束时间,但这可能会对标记区间的FPS计算有影响,为了提高计算的精度最好手动标记结束。默认情况下,PerfSight 只在 MarkLoadlevel 启动后收集数据,并在调用 MarkLevelFin 后完成数据收集。
6. 场景标记(可选)
有时我们需要关注场景中一些特殊区域的表现,如团战或与 BOSS 的 PVE 战斗,或者需要排除它们的表现数据,以免影响整体表现数据。
6.1 正常标签(可选)
public static void BeginTag(string tagName)
功能:开始场景内区域标记
参数tagName:标记标识符
返回值:无
public static void EndTag()
功能:结束区域标记
参数:无
返回值:无
通过BeginTag接口来标记一个标签的开始,标签和场景是依附的关系,如果当前没有MarkLoadlevel进行标记,则BeginTag无效。如果在场景中调用了 SetQuality,BeginTag中继承MarkLoadlevel中的画质值。通过EndTag结束当前的标签,当 MarkLevelFin 被调用,但标签尚未完成(EndTag 尚未被调用)时,SDK 默认会在 MarkLevelFin 之前自动调用 EndTag 函数。
场景和标签之间的关系如下图所示。
注:标签只是用于对逻辑场景的某段区域进行重点标记,不能视BeginTag对MarkLoadlevel简单的替代,Tag的统计分析行为也会根据实际需要做调整。
6.2 区域剔除(可选)
public static void BeginExclude()
功能:开始区域剔除,MMO游戏可以用于剔除挂机
参数:无
返回值:无
public static void EndExclude()
功能:结束区域剔除
参数:无
返回值:无
例如,可能需要排除挂机行为或设备在省电模式下的性能数据,这可能会影响整个场景的性能。
场景和剔除区域之间的关系如下图所示。
7. 网络延时(可选)
PerfSight目前不具备检测网络延迟(RTT 时间)的功能,只提供网络延时的上报分析的功能。因此具体的网络延时由游戏客户端进行计算,并通过PerfSightAgent.PostNetworkLatency()接口来上传。
public static void PostNetworkLatency(int latency)
功能:上报网络延迟
参数 latency:网络延迟
返回值:无
IEnumerator updateNTL()
{
while (true)
{
//客户端计算网络延时ntl
PerfSightAgent.PostNetworkLatency(ntl);
yield return new WaitForSeconds(1f);
}
}
PerfSight的后台会对上传的时延数据进行地域,场景以及运营商等多个维度的统计分析。
8. 自定义画质信息(可选)
此类接口用于设置自定义画质分档,用于PerfSight的自定义统计、查询。此接口可以在任意位置中调用,可以调用一次,全局生效,也可以调用多次,会以最后一次为准。若使用此接口请提前联系PerfSight提供对应规则。
public static void SetQuality(int quality)
功能:设定场景画质
参数 quality:画质值
返回值:无
开发人员可以将画质、图形维度或其他影响性能的维度统一编码为整数,并根据 SetQuality 函数将其传递给 PerfSight。PerfSight 服务器将根据接收到 的画质值在多个维度聚合计算。
图中有Graphics, Frame Rate和Style三种维度。
Graphics维度有六个选项: Smooth、Balanced、HD、HDR、Ultra HD 和 Extreme HDR;Frame Rate维度中有三个选项:Power Saving、Medium和High;Style维度中有五个选项:Classic、Colorful、Realistic、Soft、Movie。这些不同维度的选项组合会影响游戏的性能,因此我们需要统计每个维度组合下的性能情况。
我们使用整数进行编码,个位代表Graphics维度,十位代表Frame Rate维度,百位代表Style维度,最终得到一个三位数的整数。
在Graphics维度中,我们使用数字 1 至 6 表示"Smooth"至"Extreme HDR"。
在Frame Rate维度中,我们使用 1 至 3 表示"Power Saving"至"High"。
在Style维度中,我们使用 1 至 5 表示 "Classic"至 "Movie"。
例如,在上图中,Graphics维度选择了HD,Frame Rate维度选择了High,Style维度选择了Classic,那么最终的编码值计算如下:
Quality value = 3(HD,个位代表Graphics) + 3(High)*10(十位代表Frame rate) + 1(Classic)*100(百位代表Style) = 133
SetQuality(133);
9. 自定义设置版本号
(Android/iOS 可选)
public static void SetVersionIden(string version)
功能:设定自定义版本号
参数 version:资源版本号
返回值:无
在 Android 或 iOS 平台上,PerfSight SDK 会自动收集应用程序的版本号。可以通过通过SetVersionIden接口进行游戏资源版本号的自主设定。
(Windows 必选)
public static void SetPCAppVersion(string version)
功能:设定自定义版本号
参数 version:PC版本号
返回值:无
在 Windows 平台上,SDK不自动采集游戏版本号,需要通过接口设置。