10 KiB
Tracy Unity 集成快速开始指南
本指南将帮助你快速将 Tracy 性能分析器集成到 Unity 项目中。
🚀 快速开始(5 分钟集成)
步骤 1: 准备 Tracy
- 克隆或下载 Tracy 仓库:
git clone https://github.com/wolfpld/tracy.git
- (可选)编译 Tracy Profiler 工具:
cd tracy/profiler
# Windows: 使用 Visual Studio 打开并编译
# macOS/Linux:
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
步骤 2: 编译 Unity Plugin
Windows (使用 CMake + Visual Studio)
# 在 unity_examples 目录下
mkdir build
cd build
# 配置(修改 TRACY_ROOT 路径指向你的 tracy 目录)
cmake .. -G "Visual Studio 17 2022" -A x64 ^
-DTRACY_ROOT="D:/path/to/tracy" ^
-DTRACY_ENABLE=ON ^
-DTRACY_ON_DEMAND=ON
# 编译
cmake --build . --config Release
编译完成后,DLL 文件在 build/Unity/Plugins/x86_64/UnityTracyPlugin.dll
macOS
# 在 unity_examples 目录下
mkdir build && cd build
# 配置
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DTRACY_ROOT="/path/to/tracy" \
-DTRACY_ENABLE=ON \
-DTRACY_ON_DEMAND=ON
# 编译
make -j8
编译完成后,动态库在 build/Unity/Plugins/macOS/UnityTracyPlugin.dylib
Linux
# 在 unity_examples 目录下
mkdir build && cd build
# 配置
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DTRACY_ROOT="/path/to/tracy" \
-DTRACY_ENABLE=ON \
-DTRACY_ON_DEMAND=ON
# 编译
make -j8
编译完成后,动态库在 build/Unity/Plugins/Linux/x86_64/UnityTracyPlugin.so
步骤 3: 集成到 Unity 项目
- 复制 Plugin 文件
将编译好的 Plugin 复制到 Unity 项目:
YourUnityProject/
└── Assets/
└── Plugins/
├── x86_64/
│ └── UnityTracyPlugin.dll # Windows
├── macOS/
│ └── UnityTracyPlugin.dylib # macOS
└── Linux/
└── x86_64/
└── UnityTracyPlugin.so # Linux
- 复制 C# 脚本
将以下文件复制到 Unity 项目:
YourUnityProject/
└── Assets/
└── Scripts/
└── Tracy/
├── TracyWrapper.cs # Tracy C# API
├── TracyManager.cs # Tracy 管理器
└── TracyExamples.cs # 使用示例(可选)
- 配置 Plugin 导入设置
在 Unity Editor 中:
- 选择
UnityTracyPlugin.dll(或 .dylib/.so) - 在 Inspector 中设置平台:
- Windows: 勾选
x86_64 - macOS: 勾选
macOS - Linux: 勾选
Linux x86_64
- Windows: 勾选
步骤 4: 在场景中使用
- 添加 TracyManager
在你的主场景中:
- 创建空 GameObject,命名为 "TracyManager"
- 添加
TracyManager组件 - 在 Inspector 中配置选项
- 在代码中使用 Tracy
using UnityEngine;
using TracyProfiler;
public class MyGameScript : MonoBehaviour
{
void Update()
{
// 方式 1: 使用 using 语句(推荐)
using (Tracy.Zone("MyGameScript.Update"))
{
DoSomething();
}
// 方式 2: 手动开始/结束
Tracy.BeginZone("CustomZone");
DoSomethingElse();
Tracy.EndZone();
// 绘制数值
Tracy.Plot("Enemy Count", enemyCount);
// 发送消息
if (playerDied)
{
Tracy.Message("Player died");
}
}
void DoSomething()
{
using (Tracy.Zone("DoSomething"))
{
// 你的代码
}
}
}
步骤 5: 启动 Tracy Profiler 并连接
- 启动 Tracy Profiler
# Windows
Tracy.exe
# macOS/Linux
./Tracy
- 运行 Unity 游戏
在 Unity Editor 中按 Play,或运行构建的可执行文件。
- 连接到 Tracy
Tracy Profiler 会自动发现本地网络中的 Tracy 客户端,点击连接即可开始分析。
📊 使用 Tracy 分析性能
查看性能数据
Tracy Profiler 界面主要区域:
-
时间线视图
- 显示所有 Zone 的执行时间
- 颜色表示不同的调用栈深度
- 可以缩放和平移
-
统计视图
- 函数调用次数
- 总耗时、平均耗时、最小/最大耗时
- 排序和筛选功能
-
帧视图
- 查看每帧的性能
- 识别帧率波动
- 帧时间分布
-
Plot 视图
- 查看
Tracy.Plot()绘制的数值曲线 - 实时监控变量变化
- 查看
常用快捷键
鼠标滚轮: 缩放时间线鼠标中键拖拽: 平移时间线鼠标左键: 选择 Zone 查看详情Ctrl + F: 搜索函数Ctrl + Z: 放大到选中的 Zone
🔧 常见问题排查
问题 1: DLL 加载失败
错误信息: DllNotFoundException: UnityTracyPlugin
解决方案:
- 确认 DLL 文件在正确的目录
- 检查 Plugin Import Settings 的平台配置
- 确认 DLL 架构与 Unity 项目匹配(x64/x86)
- Windows: 检查是否缺少
vcruntime140.dll(安装 Visual C++ Redistributable)
问题 2: Tracy Profiler 无法连接
症状: Tracy Profiler 中看不到 Unity 应用
解决方案:
- 确认防火墙允许 TCP 端口 8086
- 检查
TRACY_ON_DEMAND宏是否正确定义 - 确认
Tracy.Initialize()已被调用 - 检查 Unity Console 是否有 Tracy 初始化消息
// 在 Unity Console 应该看到:
// [Tracy] 性能分析器已初始化
问题 3: 性能数据不显示
症状: Tracy 已连接,但看不到任何 Zone
解决方案:
- 确认代码中使用了
Tracy.Zone()或ZoneScoped - 确认
Tracy.MarkFrame()在每帧被调用 - 检查是否定义了
TRACY_ENABLE编译符号 - 在 Unity Editor 中,确认 Tracy Manager 的 "Enable On Start" 已勾选
问题 4: 编译错误
常见编译错误:
-
找不到 Tracy.hpp
fatal error: tracy/Tracy.hpp: No such file or directory解决: 检查
TRACY_ROOT路径是否正确 -
链接错误 (Windows)
error LNK2019: unresolved external symbol解决: 确认链接了
ws2_32.lib和dbghelp.lib -
链接错误 (Linux)
undefined reference to `pthread_create'解决: 添加
-lpthread -ldl链接选项
问题 5: Android/iOS 构建问题
Android:
- 使用 Android NDK 编译
- 确保为所有需要的 ABI 编译(armeabi-v7a, arm64-v8a)
- 将
.so文件放在Assets/Plugins/Android/libs/{ABI}/
iOS:
- 编译为静态库(.a)
- 在 Unity Build Settings 中设置 "Target SDK" 为 "Device SDK"
- 确保代码签名正确
🎯 最佳实践
1. Zone 命名规范
// ✅ 好的命名 - 清晰、描述性
using (Tracy.Zone("PlayerController.Move"))
using (Tracy.Zone("AI.UpdatePathfinding"))
using (Tracy.Zone("Render.DrawTerrain"))
// ❌ 不好的命名 - 模糊、无意义
using (Tracy.Zone("Function1"))
using (Tracy.Zone("Update"))
using (Tracy.Zone("Test"))
2. 适度使用 Zone
void Update()
{
// ✅ 追踪主要的逻辑块
using (Tracy.Zone("Update"))
{
using (Tracy.Zone("ProcessInput"))
{
ProcessInput(); // 追踪大块逻辑
}
UpdateGameLogic(); // 内部有自己的 Zone
}
}
// ❌ 过度追踪会增加开销
void BadExample()
{
for (int i = 0; i < 10000; i++)
{
using (Tracy.Zone($"Iteration {i}")) // 太多 Zone!
{
DoSomething();
}
}
}
3. 使用条件编译
// 在生产构建中禁用细粒度追踪
#if TRACY_ENABLE
using (Tracy.Zone("DetailedAnalysis"))
{
// 详细的性能分析代码
}
#endif
4. 监控关键指标
void LateUpdate()
{
// 监控帧率
Tracy.Plot("FPS", 1.0f / Time.deltaTime);
// 监控内存
Tracy.Plot("Memory (MB)", GC.GetTotalMemory(false) / 1024.0 / 1024.0);
// 监控对象计数
Tracy.Plot("Enemy Count", enemies.Count);
Tracy.Plot("Active Particles", particleSystem.particleCount);
// 监控物理
Tracy.Plot("Rigidbodies", FindObjectsOfType<Rigidbody>().Length);
}
5. 多线程命名
using System.Threading;
void WorkerThread()
{
Tracy.SetThreadName("Worker Thread");
while (running)
{
using (Tracy.Zone("WorkerThread.Process"))
{
ProcessData();
}
}
}
📚 进阶主题
自定义构建配置
在 Unity 项目中创建 link.xml 防止代码剥离:
<linker>
<assembly fullname="Assembly-CSharp">
<namespace fullname="TracyProfiler" preserve="all"/>
</assembly>
</linker>
持久化性能数据
Tracy 支持保存性能数据到文件:
- 在 Tracy Profiler 中,点击 "Save trace"
- 选择保存位置(.tracy 文件)
- 之后可以用 Tracy Profiler 打开查看
集成到 CI/CD
可以在自动化测试中使用 Tracy:
public class PerformanceTest
{
[Test]
public void TestPerformance()
{
Tracy.Initialize();
using (Tracy.Zone("PerformanceTest"))
{
// 运行性能测试
RunGameLoop(100); // 运行 100 帧
}
Tracy.Shutdown();
// 分析结果...
}
}
🔗 资源链接
- Tracy 官方仓库
- Tracy 官方手册
- Unity Native Plugin 文档
- 本项目的完整文档:
UNITY_INTEGRATION_GUIDE.md
💡 技巧和提示
-
使用 Release 构建进行性能测试
- Debug 构建会有大量额外开销
- 在 Unity 中创建专门的 "Profiling" 构建配置
-
关闭 V-Sync 测试真实性能
- V-Sync 会限制帧率
- 在 Project Settings > Quality 中关闭
-
使用 Tracy 的统计功能
- 查看函数调用次数
- 识别被频繁调用的函数
-
比较不同实现
- 使用 Tracy 比较算法性能
- A/B 测试优化效果
-
定期保存 Trace 文件
- 记录性能基准
- 跟踪性能变化趋势
🎉 完成!
现在你已经成功将 Tracy 集成到 Unity 项目中了!
开始使用 Tracy 分析你的游戏性能,找出瓶颈,优化代码吧!
如有问题,请参考完整文档 UNITY_INTEGRATION_GUIDE.md 或访问 Tracy 官方仓库。