StatDisplay(统计显示)
StatDisplay 系统为 realvirtual 仿真提供全面的实时性能监控和生产统计,支持对自动化系统性能进行详细分析。
仅 Professional 版本:StatDisplay 仅在 realvirtual Professional 中可用。不包含在 Starter 版本中。
要求
需要 TextMeshPro:StatDisplay 需要 Unity 的 TextMeshPro 进行文本渲染。TextMeshPro 随 Unity 一起提供,可通过 Window 菜单访问。
设置 TextMeshPro
TextMeshPro 已随 Unity 包含。要访问 TextMeshPro 资源:
- 访问 TextMeshPro 菜单:Window → TextMeshPro
- 导入必要资源:如果提示,选择"Import TMP Essential Resources"
- 导入示例(可选):选择"Import TMP Examples and Extras"获取额外资源

注意:TextMeshPro 预装在 Unity 中。您只需在项目中首次使用 TextMeshPro 组件时导入必要资源。
概述
StatDisplay 由多个专业组件组成,它们协同工作,提供对仿真性能和生产指标的完整可见性。系统追踪产出率、周期时间、状态利用率和操作效率,帮助在虚拟调试期间优化自动化系统。
主要优势包括:
- 仿真期间的实时生产监控
- 用于性能优化的周期时间分析
- 用于效率分析的状态利用率追踪
- 最少设置的自动化统计收集
- 与 realvirtual 的 LogicStep 系统集成

💡 提示 StatDisplay 组件在仿真开发过程中尽早集成效果最佳,允许在系统开发和优化过程中持续监控。
组件架构
StatDisplay 系统由五个专业组件组成,它们协同工作:
StatController(中央协调器)
├── StatDisplayOutput(视觉显示)
├── StatCycleTime(时序分析)
├── StatStates(利用率追踪)
└── StatOutput(生产计数)
组件角色
StatController:统计管理和重置计时的中央协调器
StatDisplayOutput:使用 TextMeshPro 将实时统计渲染到屏幕显示
StatCycleTime:追踪生产周期时序,进行最小/最大/平均分析
StatStates:监控操作状态并计算利用率百分比
StatOutput:计算生产产出并计算速率(每小时/每天件数)
运行时显示
系统提供所有统计数据的全面运行时可视化:

快速开始
基本设置(5 分钟)
- 创建统计游戏对象:
- 在层级中右键单击 → Create Empty
- 命名为 "ProductionStats"
- 添加核心组件:
- 添加 StatController 组件
- 添加 StatOutput 组件用于生产计数
- 添加 StatDisplayOutput 组件用于视觉显示
- 配置显示:
- 如果不存在,创建 UI Canvas
- 将 TextMeshPro 组件分配给 StatDisplayOutput
- 在 StatController 中设置重置间隔(默认:60 秒)
- 连接到生产:
- 使用 LogicStep 组件或直接 API 调用触发统计
- 当零件生产出来时调用
StatOutput.IncrementCount()
StatDisplayOutput 组件
属性
显示配置
统计显示(Stat Displays)(数组)用于显示不同统计数据的显示元素集合。
- 类型:StatDisplayElement 数组
- 默认:空数组
- 使用场景:定义要显示的统计数据及其格式
Text Mesh Pro 设置
背景(Background) 统计显示的视觉背景组件。
- 类型:UI Image 组件引用
- 默认:无
- 使用场景:提供视觉背景以获得更好的文本可读性
内边距(Padding) 文本布局的显示内边距设置。
- 类型:Vector2(X 和 Y 值)
- 默认:(10, 10)
- 范围:0 到 100 像素
- 使用场景:调整显示背景内的文本间距
运行时显示功能
屏幕显示显示:
- 产出率:当前每小时件数(例如,"308"、"334")
- 总数:累积生产计数
- 实时更新:仿真期间更新的实时统计
StatController 组件
属性
核心设置
重置统计(Reset Statistics) 跨所有组件自动重置统计的时间间隔。
- 类型:Float
- 默认:60 秒
- 范围:1 到 3600 秒(1 秒到 1 小时)
- 使用场景:定义统计数据清除以进行新测量的频率
组件管理
统计组件(Stat Components) 场景中自动检测到的统计组件。
- 类型:组件数组(只读)
- 默认:自动填充
- 使用场景:显示由该控制器管理的组件
功能
StatController 通过以下方式协调所有统计组件:
- 在所有统计之间同步重置计时
- 提供集中管理界面
- 自动检测场景中兼容的组件
StatCycleTime 组件
属性
周期追踪
自动开始检测(Auto Start Detection) 从连接的组件自动检测周期开始事件。
- 类型:Boolean
- 默认:true
- 使用场景:启用以自动检测周期,禁用以手动控制
周期超时(Cycle Timeout) 将周期视为未完成之前的最大时间。
- 类型:Float
- 默认:300 秒(5 分钟)
- 范围:10 到 3600 秒
- 使用场景:防止不完整周期影响统计
运行时统计
组件追踪和显示:
- 最小周期时间:记录的最短周期(秒)
- 最大周期时间:记录的最长周期(秒)
- 平均周期时间:监控期间的平均周期时间
- 当前周期时间:最近完成的周期
- 周期计数:自上次重置以来的总完成周期
💡 提示 在 LogicStep 组件中使用StartCycle()和EndCycle()方法精确控制时序测量。
StatStates 组件
属性
状态配置
默认状态(Default States) 用于追踪的预定义操作状态。
- 类型:字符串数组
- 默认:["Moving", "Waiting", "MoveBack", "Error"]
- 使用场景:自定义状态以匹配自动化系统
显示利用率(Show Utilization) 在运行时统计中显示总体利用率百分比。
- 类型:Boolean
- 默认:true
- 使用场景:切换总体利用率显示
运行时分析
组件提供详细的操作分析:
总体利用率:基于生产与空闲时间比的系统效率百分比
状态细分:每个操作状态中的时间和百分比:
- Moving:活动生产操作
- Waiting:操作之间的空闲时间
- MoveBack:返回或定位运动
- Error:错误或维护状态
💡 提示 调用 State("StateName") 方法追踪状态更改。状态区分大小写,必须与配置的状态名称匹配。
StatOutput 组件
属性
生产设置
每天小时数(Hours Per Day) 用于每日生产率计算的工作小时数。
- 类型:Float
- 默认:24 小时
- 范围:1 到 24 小时
- 使用场景:设置实际操作时间表(例如,单班制 8 小时)
零件描述(Parts Description) 对正在计数的项目类型的自定义标签。
- 类型:String
- 默认:"Parts"
- 使用场景:指定产品类型("Bottles"、"Assemblies"、"Packages")
显示选项
显示每天件数(Show Parts Per Day) 在显示中包含每日生产预测。
- 类型:Boolean
- 默认:true
- 使用场景:为短期分析切换每日速率计算
运行时统计
显示实时生产指标:
- 总数:自上次重置以来的累积生产项目数
- 每小时件数:基于最近活动的当前生产率
- 每天件数:基于当前速率和运行时间预测的每日产出
💡 提示 使用IncrementCount()或IncrementCount(int amount)追踪生产。系统会根据时序自动计算速率。
编辑器工具
检视器功能
组件自动检测:StatController 自动查找和管理场景中兼容的统计组件。
实时预览:统计数据显示在播放模式下实时更新,提供即时反馈。
重置按钮:StatController 检视器中的手动重置按钮,用于在测试期间清除统计。
辅助图标和视觉辅助
状态可视化:StatStates 组件在选中时显示当前状态于场景视图中。
连接指示器:视觉线条显示 StatController 与管理的组件之间的关系。
高级配置
多工位设置
- 独立控制器:为每个生产工位使用单独的 StatController 组件
- 组件分组:将相关统计组件分组到特定工位的游戏对象下
- 显示协调:为不同的查看区域配置多个 StatDisplayOutput 组件
- 同步重置:根据需求使用全局重置计时或独立的工位重置
使用示例
基本生产监控
简单产出计数
// 在生产逻辑中
public class ProductionStation : MonoBehaviour
{
public StatOutput outputCounter;
public void OnPartCompleted()
{
outputCounter.IncrementCount();
Debug.Log($"Total parts: {outputCounter.TotalCount}");
}
}
周期时间测量
// 追踪完整生产周期
public class CycleController : MonoBehaviour
{
public StatCycleTime cycleTimer;
public StatStates stateTracker;
public void StartProduction()
{
cycleTimer.StartCycle();
stateTracker.State("Moving");
}
public void CompleteProduction()
{
cycleTimer.EndCycle();
stateTracker.State("Waiting");
}
}
与 LogicStep 系统集成
StatDisplay 组件与 realvirtual 的 LogicStep 系统无缝集成:
开始周期时间追踪
public class LogicStep_StatStartCycle : LogicStep
{
public StatCycleTime StatCycleTimeComponent;
#pragma warning disable 0414
private bool signalnotnull = false;
#pragma warning restore 0414
protected new bool NonBlocking()
{
return true;
}
protected override void OnStarted()
{
State = 50;
if (StatCycleTimeComponent != null)
StatCycleTimeComponent.StartCycle();
NextStep();
}
protected new void Start()
{
base.Start();
}
}
为利用率追踪设置状态
public class LogicStep_StatSetState : LogicStep
{
public StatStates StatStatesComponent;
public string SetState = "Moving";
protected override void OnStarted()
{
if (StatStatesComponent != null)
{
StatStatesComponent.State(SetState);
}
NextStep();
}
protected new void Start()
{
base.Start();
}
}
高级 LogicStep 集成
// 具有全面统计的完整生产工作流
public class ProductionSequence : LogicStep
{
[Header("Statistics Components")]
public StatCycleTime cycleTimer;
public StatStates stateTracker;
public StatOutput outputCounter;
protected override void OnStarted()
{
// 初始化生产周期
cycleTimer?.StartCycle();
stateTracker?.State("Moving");
// 执行生产步骤
ExecuteProductionSequence();
}
private void ExecuteProductionSequence()
{
// 此处放置生产逻辑
// 完成周期
OnProductionComplete();
}
private void OnProductionComplete()
{
cycleTimer?.EndCycle();
outputCounter?.IncrementCount();
stateTracker?.State("Waiting");
NextStep();
}
}
自定义统计管理器
// 集中统计管理
public class ProductionStatsManager : MonoBehaviour
{
[Header("Statistics References")]
public StatController controller;
public StatCycleTime[] stationTimers;
public StatOutput[] stationOutputs;
public void ResetAllStatistics()
{
controller.ResetStatistics();
}
public void GetProductionSummary()
{
float totalOutput = 0;
foreach (var output in stationOutputs)
{
totalOutput += output.TotalCount;
}
Debug.Log($"Total Production: {totalOutput} parts");
}
}
显示自定义
自定义显示布局
// 程序化显示配置
public class CustomStatDisplay : MonoBehaviour
{
public StatDisplayOutput display;
void Start()
{
ConfigureDisplay();
}
void ConfigureDisplay()
{
// 自定义显示外观
display.Background.color = Color.black;
display.Padding = new Vector2(15, 15);
// 添加自定义格式
display.ShowDecimalPlaces = 1;
}
}
故障排除
统计数据不更新
症状:显示显示静态值、零或过时信息
常见原因和解决方案:
缺失组件引用
- 检查所有 StatDisplay 组件的脚本引用是否正确分配
- 验证 StatController 能否在场景中找到并管理统计组件
- 确保包含统计组件的游戏对象处于活动状态
时序配置问题
- 验证 StatController 重置间隔是否符合您的分析需求
- 检查自动重置是否过于频繁清除数据
- 确保生产事件确实触发了统计更新
集成问题
- 确认 LogicStep 组件正确调用了统计方法
- 验证 API 调用如
IncrementCount()和StartCycle()是否被执行 - 检查 Unity 控制台是否有统计组件错误消息
周期时间不准确
症状:周期时间测量不反映实际生产时序
诊断步骤:
- 验证周期边界:
// 确保 StartCycle() 和 EndCycle() 在正确的时间调用
Debug.Log($"Starting cycle at: {Time.time}");
cycleTimer.StartCycle();
// ... 生产逻辑 ...
Debug.Log($"Ending cycle at: {Time.time}");
cycleTimer.EndCycle();
- 检查时序冲突:
- 多个组件同时调用周期方法
- 重置操作中断活动周期测量
- LogicStep 时序与手动周期控制冲突
- 检查重置设置:
- StatController 重置间隔对于完成周期测量来说太短
- 活动生产周期期间的手动重置
显示格式问题
症状:统计数据格式、位置不正确或难以辨认
视觉显示问题:
- 文本重叠:增加 StatDisplayOutput 中的内边距值
- 背景问题:验证 UI Image 组件已分配且正确配置
- 布局问题:检查 Canvas 缩放和 StatDisplayOutput 定位
- 缺失统计:确保 StatDisplayOutput 数组包含所有所需的显示元素
UI 集成问题:
- Canvas 设置:验证 UI Canvas 是否正确配置为您的显示方法
- TextMeshPro 配置:检查字体、大小和颜色设置
- Z 轴排序:确保统计数据显示在其他 UI 元素之上
性能问题
症状:统计激活时帧率下降或卡顿
优化解决方案:
降低更新频率:
- 增加 StatController 重置间隔以减少计算频率
- 在大型场景中使用更少的并发统计组件
- 考虑为不同生产区域使用单独的 StatController
显示优化:
- 限制显示中显示的小数位数
- 对动态统计显示使用对象池
- 在不需要时禁用统计可视化
集成调试
症状:统计在隔离中工作但在完整仿真中失败
系统集成检查:
- 组件依赖:
// 验证所有必需组件是否存在
if (cycleTimer == null) Debug.LogError("Missing StatCycleTime component");
if (stateTracker == null) Debug.LogError("Missing StatStates component");
- 事件时序:
- 确保统计事件按正确顺序发生
- 检查复杂自动化序列中的竞态条件
- 验证 LogicStep 执行顺序与统计没有冲突
- 多场景问题:
- StatDisplay 组件可能不会跨场景加载持久存在
- 重新加载场景时统计引用可能断裂
- 考虑使用
DontDestroyOnLoad()实现持久统计
性能提示:在具有许多统计组件的大型仿真中,考虑为不同生产区域使用单独的 StatController,以优化性能并逻辑地组织统计。
另请参见
- LogicStep - 统计事件集成的核心系统
- 运行时调试器(Runtime Debugger) - 额外的调试和监控工具
- MU、源和汇 - 生成统计的生产组件
- 性能工具(Performance Tools) - 框架性能优化组件
© 2025 realvirtual GmbH https://realvirtual.io - 保留所有权利。未经出版商事先书面许可,不得以任何形式或任何方式(包括打印、保存、影印、录制或其他电子或机械方法)复制、分发或传播本出版物的任何部分。