Unity-UI 架构优化小技巧(二)

简介: Unity-UI 架构优化小技巧

注意这个时候初始化方法已经被封装起来了,在设置状态时会自动调用,而初始化方法设置成了虚函数,方便子类进行定制。

因此加载进度界面和登录注册界面的代码的修改前后为:

using UnityEngine;
using UnityEngine.UI;
public class LoadingWnd : WindowRoot
{
    //初始化加载进度界面
    protected override void InitWnd()
    {
        //实际操作代码
    }
    //设置进度
    public void SetProgress(float prg)
    {
      //实际操作代码
    }
}    
using UnityEngine;
using UnityEngine.UI;
public class LoginWnd : WindowRoot
{
    //初始化登录注册界面
    protected override void InitWnd()
    {
        //实际操作代码
    }
}

注意对比,现在初始化方法要对父类的初始化方法覆写,同时权限不再是公有,因为父类中权限为 protected,所以子类中无法设置成 public,因此此时初始化方法只能被设置状态时自动调用,无需也不能在外部手动调用了。

此时无需改动 GameRoot,但登录注册业务模块和资源加载服务模块对界面的调用也应该发生改变:

using System;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ResSvc : MonoBehaviour 
{
    public void AsyncLoadScene(string sceneName,Action loaded)
    {
        //显示加载界面
        GameRoot.Instance.loadingWnd.SetWndState(true);
        //异步加载指定名字的场景
        AsyncOperation sceneAsync = SceneManager.LoadSceneAsync(sceneName);
        prgCB = ()=>
        {
            //获取当前进度
            float val = sceneAsync.progress;
            //在加载界面设置当前进度
            GameRoot.Instance.loadingWnd.SetProgress(val);
            //加载完成
            if(val == 1)
            {
                //加载完成后调用回调函数
                if(loaded != null)
                {
                    loaded();
                }
                //清空委托和中间结构
                sceneAsync = null;
                prgCB = null;
                //取消对加载界面的展示
                GameRoot.Instance.loadingWnd.SetWndState(false);
            }
        };
    }
}
using UnityEngine;
public class LoginSys : MonoBehaviour 
{
    public void EnterLogin()
    {
        //加载登录场景
        ResSvc.Instance.AsyncLoadScene(Constants.SceneLogin,()=>{
            //加载完成后打开登录注册界面
            loginWnd.SetWndState(true);
        });
    }
}

我们的改动不大,改动部分:(其余部分省略)


//显示加载界面 GameRoot.Instance.loadingWnd.SetWndState(true);


//取消对加载界面的展示 GameRoot.Instance.loadingWnd.SetWndState(false);


//加载完成后打开登录注册界面 loginWnd.SetWndState(true);

其实每个窗口界面里也有可能会用到公共服务 (如资源加载服务模块),如果不作改进,那我们每个窗口界面中都要去获取资源加载服务模块的单例并调用功能,这样改进之后,我们可以在基类窗口脚本中持有对此服务模块的引用,随后在基类初始化方法中对引用赋值,然后在每个窗口的自定义初始化函数中多调用下基类的初始化方法,就可以进一步精简代码,架构也更加清晰。

标红部分即为修改部分:

image.png

UI界面基类

image.png

加载进度界面

同理,其他界面,如登录注册界面,也可以这么改。

目录
相关文章
|
10天前
|
存储 缓存 负载均衡
高效后端开发中的架构设计与优化策略
在当今快速发展的技术环境中,高效的后端开发不仅仅依赖于编程技能,更需要精心设计的架构和优化策略。本文探讨了如何通过合理的架构设计和优化策略,提升后端系统的性能和可维护性,以应对复杂的业务需求和大规模的用户访问。【7月更文挑战第5天】
19 1
|
5天前
|
弹性计算 负载均衡 网络协议
在缓解DDoS攻击方面,如何优化业务架构?
**缓解DDoS攻击的策略:** 1. 缩小暴露面,隔离业务并隐藏非必需服务端口。 2. 使用VPC以增强内网安全。 3. 优化业务架构,进行压力测试,部署弹性伸缩和负载均衡。 4. 优化DNS解析,智能解析并屏蔽异常DNS响应。 5. 提供充足带宽以防攻击时影响正常流量。 6. 服务器安全加固,更新补丁,限制服务和端口,使用防火墙。 7. 建立应急响应预案,定期演练。 8. 考虑采用Web应用防火墙和专业DDoS防护服务。
135 17
|
17天前
|
图形学 开发者
【Unity小技巧】unity移动物体的探究——使用8个不同方法
【Unity小技巧】unity移动物体的探究——使用8个不同方法
14 1
|
17天前
|
图形学
【unity小技巧】实现投掷物品,比如长矛,刀具,手榴弹和其他物体
【unity小技巧】实现投掷物品,比如长矛,刀具,手榴弹和其他物体
10 1
|
17天前
|
图形学
【unity小技巧】实现FPS武器的瞄准放大效果(UGUI实现反向遮罩,全屏遮挡,局部镂空效果)
【unity小技巧】实现FPS武器的瞄准放大效果(UGUI实现反向遮罩,全屏遮挡,局部镂空效果)
14 1
|
17天前
|
图形学
【unity小技巧】unity3d创建和实现破碎打破物品,万物可破碎
【unity小技巧】unity3d创建和实现破碎打破物品,万物可破碎
11 0
【unity小技巧】unity3d创建和实现破碎打破物品,万物可破碎
|
17天前
|
图形学
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
14 0
|
17天前
|
存储 图形学
【unity小技巧】unity事件系统创建通用的对象交互的功能
【unity小技巧】unity事件系统创建通用的对象交互的功能
14 0
|
17天前
|
图形学
【unity小技巧】unity通过代码进行更改后处理效果
【unity小技巧】unity通过代码进行更改后处理效果
12 0
|
17天前
|
图形学
【unity小技巧】unity3D寻路指示轨迹预测
【unity小技巧】unity3D寻路指示轨迹预测
19 0