Unity-GUI设计模式-基于观察者模式的设计

本文介绍了在Unity项目中如何使用观察者模式。通过定义IObserver和IViewer接口,实现被观察者和观察者之间的交互。具体示例中,当在Baseboard场景中保存模型并返回主场景MainScene时,利用静态数据进行信息传递。MainInitManager作为被观察者在第三帧加载数据并广播更新,而CustomController作为观察者接收广播并更新主场景的下拉框选项。
摘要由CSDN通过智能技术生成

在最近的项目工程中。用到了观察者模式。记录一下。

首先,展示一下观察者与被观察者的接口
被观察者IObviewer接口,定义了三个函数。
1.添加观察者 addViewer()
2.删除观察者 deleteViewer()
3.广播 broadCast()
在这里插入图片描述

观察者IViewer接口,定义了三个函数。
1.观察者接收广播后的操作 updae()

在这里插入图片描述

====然后,给出一个实例:
当我在场景Baseboard中定义好新的底板模型,并且存入xml中后,
1:需要返回到主场景MainScene中
2:需要在主场景的下拉框中,显示:我之前定义好的底板模型。

由于两个场景不互通。只有static静态的数据才可以被获取。
【1】首先要设置状态onRebackFromInsBaseBoard,从InsBaseBoard场景跳转回来之后设定非空。

public class DataCatche : MonoBehaviour {
   


    /// <summary>
    /// 我从InsBaseBoard回来之后,只有从那个场景跳转会MainScene时才会设定非空
    /// </summary>
    public static int onRebackFromInsBaseBoard = -1;

}

【2】在按下保存底板类型button后,改变onRebackFromInsBaseBoard,返回主界面

       //按下button的函数中写:
        DataCatche.onRebackFromInsBaseBoard = int.Parse(baseboard_type);
        SceneManager.LoadScene("MainScene");

============ 【被观察者】MainInitManager================
在localManger下创建delayInit,挂上MainInitManager的脚本,
【3】MainInitManager实现了,在第三帧中加载数据

(1)加载观察者列表 addViewer(CustomController.Instance);

(2)第三帧 StartCoroutine(delayInit());

(3)获取两个参数:要显示的底板的id 以及 下拉框的value。

(4)向观察者们广播

         ViewInfo info = new ViewInfo();
        info.arg1 = value+"";
        info.arg3 = reData;
        broadCast(info);

(2) 重新加载loadxml:ConfigFile.Instance.LoadXml();
因为在跳转之后,更新xml是只更新【ROM】的数据,但是动态加载的【RAM】数据(static)没有被更新。所以需要重新加载loadXML


public class MainInitManager : MonoBehaviour, IObviewer
{
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值