前言
前面两节已经介绍了本人在项目中使用的结合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);
}
}
效果如下:
注意:文章来源:https://www.toymoban.com/news/detail-659093.html
- 有时候使用ReplayMethod回放方法操作,会重复回放某一操作,就比如滚动UI只更新了85.252这个数据,但是回放的时候则回放了85.252这个数四五次,这种情况尚未解决,但好在是少数情况下才会出现这种情况。
- 用来回放的.replay文件不能放在StreamingAssets文件夹下,要不然录制的时候会报出警告说我们重复写入空数据到某一文件。
Demo下载
Demo文章来源地址https://www.toymoban.com/news/detail-659093.html
到了这里,关于【Unity学习】完全基于Ultimate Replay 2.0的UI回放系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!