Version: 6000.3
语言: 中文
7. 场景验证测试
调试和诊断

8. 性能测试

学习目标

我们将探索的最后一件事是通过性能测试扩展 Unity 测试框架的包。

锻炼

性能测试包可用于衡量我们游戏的性能。如果我们想跟踪项目中随时间推移发生的各种回归/进展,这是一个很好的工具。在此示例中,您将学习如何创建测量游戏平均帧数的测试。

  1. LostCrypt 不包括默认安装的性能测试包。按照这些说明进行安装。
  2. 将包作为依赖项添加到项目清单每个 Unity 项目都有一个项目清单,用作包管理器的入口点。此文件必须在<project>/Packages目录。包管理器使用它来配置许多内容,包括该项目的依赖项列表,以及要查询包的任何包存储库。更多信息
    请参阅术语表
    .
  3. 安装包后,将引用添加到Unity.PerformanceTestingPlayModeTests 程序集定义中访问性能测试 API。
  4. Assets/Tests/PlayModeTests 下创建一个名为 PerformanceTests.cs 的新 C# 类。

您现在已准备好完成您的目标。在PerformanceTests.cs创建一个名为MainScene_MeasureAverageFrames().在此功能中,将角色移动到魔杖位置,并等待魔杖拾取效果结束。在这段时间里,测量帧。

奖金

  • 尝试测量平均值FPS查看第一人称射击游戏,每秒帧数。
    请参阅术语表
    在 LostCrypt 中。您可能需要使用Time.deltaTime来自 UnityEngine API 和Measure.Custom从性能测试包 API 中。

提示

  • 加载后的前几帧场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
    请参阅术语表
    通常不稳定,让我们利用Measure.Frames().Scope()API 将它们测量到单独的范围内。
  • 测试完成后,可以在“窗口>分析”>“性能测试报告”下查看性能结果,甚至可以使用回调 API 挂接到结果。

溶液

PerformanceTests.cs

using System.Collections;
using Unity.PerformanceTesting;
using UnityEngine;
using UnityEngine.TestTools;
using UnityEngine.SceneManagement;

public class PerformanceTests
{
    private Transform _characterTransform;
    private float _wandLocation = 21.080f;
        
    [UnityTest, Performance]
    public IEnumerator MainScene_MeasureAverageFrames()
    {
        SceneManager.LoadScene("Assets/Scenes/Main.unity", LoadSceneMode.Single);
        using (Measure.Frames().Scope("Frames.MainSceneOnLoad.Unstable"))
        {
            for (var i = 0; i < 25; i++)
            {
                yield return null;
            }
        }

        using (Measure.Frames().Scope("Frames.MainSceneGameplay"))
        {
            yield return GoRight();
            while (GetCurrentCharacterPosition() <= _wandLocation)
            {
                yield return null;
            }

            StopMoving();
            yield return new WaitForSeconds(15);
        }
    }

    private float GetCurrentCharacterPosition()
    {
        // Get Main character's Transform which is used to manipulate position.
        if (_characterTransform == null)
        {
            _characterTransform = GameObject.Find("Sara Variant").transform;
        }

        return _characterTransform.position.x;
    }

    private IEnumerator GoRight()
    {
        TestInputControl.MoveLeft = false;
        yield return null;
        TestInputControl.MoveRight = true;
    }

    private void StopMoving()
    {
        TestInputControl.MoveRight = false;
        TestInputControl.MoveLeft = false;
    }
}

奖金解决方案

Measure.Custom("FPS", (int)(1f / Time.deltaTime));

7. 场景验证测试
调试和诊断