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下载

Demo

以上是关于Unity学习完全基于Ultimate Replay 2.0的UI回放系统的主要内容,如果未能解决你的问题,请参考以下文章

关于Unity中实现绳索物理效果Ultimate+Rope+Editor插件解析

从 Visual Studio 2013 中完全删除 Resharper Ultimate

Spark编程环境搭建(基于Intellij IDEA的Ultimate版本)

电商性能测试实战 | JMeter 插件 Ultimate Thread Group 完成梯度递增场景的压测

请问WIN7的professional和ultimate不同

Unity学习基于JSON的UI回放系统