Unity学习完全基于Ultimate Replay 2.0的UI回放系统
Posted 努力码代码走上人生巅峰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity学习完全基于Ultimate Replay 2.0的UI回放系统相关的知识,希望对你有一定的参考价值。
完全基于Ultimate Replay 2.0的UI回放系统
前言
前面两节已经介绍了本人在项目中使用的结合JSON和Ultimate Replay 2.0的UI回放系统,那是在项目结构特殊,代码不好更改的情况下,本人所做的些许调整。但在这几天的开发过程中,我发现通常情况下只使用Ultimate Replay 2.0即可实现大部分情况下的UI回放。
针对固定UI实时更新的情况
这在基于JSON的UI回放系统(倍速)(二)一节中已经进行了介绍。
针对代码生成的UI实时更新的情况
此种情况例如ScrollRect实时显示滚动的消息,需要用到代码实时生成UI元素,这里就需要用到Ultimate Replay 2.0中的ReplayBehaviour,及需要在回放过程中任然保持运行的脚本,需要继承ReplayBehaviour基类,需要回放的方法应使用[ReplayMethod]特性修饰,并在录制过程中使用RecordMethodCall方法去调用需要回放的方法,才能记录此方法的调用时间以备回放,如下:
using System.Collections;
using System.Collections.Generic;
using UltimateReplay;
using UnityEngine;
using UnityEngine.UI;
public class ReplayUIByUR2 : ReplayBehaviour
[ReplayVar]public string textA;
[ReplayVar] public int textB;
public Text textPrefab;
public RectTransform contentRoot;
public MScrollRect scrollRect;
private float interval = 1.5f;
private float time = 0;
private string testText;
private void Update()
if (IsRecording)
time += Time.deltaTime;
if (time >= interval)
textA = "测试:" + Random.Range(0, 10).ToString();
textB = Random.Range(0, 10);
testText = Time.timeSinceLevelLoad.ToString();
RecordMethodCall(AddText,testText);
time = 0;
[ReplayMethod]
public void AddText(string str)
UIHelper.AddScrollText(textPrefab, contentRoot, str, scrollRect);
但是此种方法回放的代码生成的UI不能自动销毁,需要手动在每一次录制前和回放前销毁已产生的动态UI元素,如下所示,在Record和Replay前都调用此方法:
private void ClearUIData()
for (int i = 0; i < uiContentRoot.childCount;i++)
GameObject obj = uiContentRoot.GetChild(i).gameObject;
Destroy(obj);
效果如下:
注意:
- 有时候使用ReplayMethod回放方法操作,会重复回放某一操作,就比如滚动UI只更新了85.252这个数据,但是回放的时候则回放了85.252这个数四五次,这种情况尚未解决,但好在是少数情况下才会出现这种情况。
- 用来回放的.replay文件不能放在StreamingAssets文件夹下,要不然录制的时候会报出警告说我们重复写入空数据到某一文件。
Demo下载
以上是关于Unity学习完全基于Ultimate Replay 2.0的UI回放系统的主要内容,如果未能解决你的问题,请参考以下文章
关于Unity中实现绳索物理效果Ultimate+Rope+Editor插件解析
从 Visual Studio 2013 中完全删除 Resharper Ultimate
Spark编程环境搭建(基于Intellij IDEA的Ultimate版本)
电商性能测试实战 | JMeter 插件 Ultimate Thread Group 完成梯度递增场景的压测