QFramework v1.0 使用指南 更新篇:20240919. 新增 BindableDictionary

news/2024/9/21 15:42:15 标签: unity, 游戏引擎, 游戏程序, QFramework, c#, 框架

虽然笔者目前还不知道 BindableDictionary 能用在什么使用场景下,但是还是应童鞋的要求实现了 BindableDictionary。

基本使用如下:

using System.Linq;
using UnityEngine;

namespace QFramework.Example
{
    public class BindableDictionaryExample : MonoBehaviour
    {
        private BindableDictionary<string, string> mDictionary = new BindableDictionary<string, string>();

        private void Start()
        {
            mDictionary.OnCountChanged.Register(count =>
            {
                print("count:" + count);
            }).UnRegisterWhenGameObjectDestroyed(gameObject);

            mDictionary.OnAdd.Register((key, value) =>
            {
                print("add:" + key + "," + value);
            }).UnRegisterWhenGameObjectDestroyed(gameObject);

            mDictionary.OnRemove.Register((key, value) =>
            {
                print("remove:" + key + "," + value);
            }).UnRegisterWhenGameObjectDestroyed(gameObject);
            
            mDictionary.OnReplace.Register((key, oldValue,newValue) =>
            {
                print("replace:" + key + "," + oldValue + "," + newValue);
            }).UnRegisterWhenGameObjectDestroyed(gameObject);

            mDictionary.OnClear.Register(() =>
            {
                print("clear");
            }).UnRegisterWhenGameObjectDestroyed(gameObject);
        }

        private string mKeyToDelete = null;
        private void OnGUI()
        {
            IMGUIHelper.SetDesignResolution(640,360);
            
            GUILayout.Label("Count:" + mDictionary.Count);
            GUILayout.BeginVertical("box");
            
            foreach (var kv in mDictionary)
            {
                GUILayout.BeginHorizontal("box");
                GUILayout.Label($"{kv.Key},{kv.Value}");
                if (GUILayout.Button("-"))
                {
                    mKeyToDelete = kv.Key;
                }

                GUILayout.EndHorizontal();
            }

            if (GUILayout.Button("add"))
            {
                var key = "key" + Random.Range(0, 100);
                if (!mDictionary.ContainsKey(key))
                {
                    mDictionary.Add("key" + Random.Range(0,100),"value" + Random.Range(0,100));    
                }
            }

            if (mDictionary.Count > 0)
            {
                if (GUILayout.Button("remove"))
                {
                    mDictionary.Remove(mDictionary.Keys.First());
                }

                if (GUILayout.Button("replace"))
                {
                    mDictionary[mDictionary.Keys.First()] = "replaced value" + Random.Range(0, 100);
                }

                if (GUILayout.Button("clear"))
                {
                    mDictionary.Clear();
                }
            }

            GUILayout.EndVertical();
            
            
            
            
            if (mKeyToDelete.IsNotNullAndEmpty())
            {
                mDictionary.Remove(mKeyToDelete);
                mKeyToDelete = null;
            }
        }
    }
}

运行结果如下:
178a650f-97ee-44de-8f5c-447a853cdb6b

输出结果如下:
b8a5eb15-42cc-4c2d-9e5e-dff54e2a10e2

本文由 《QFramework 教程年会员》赞助,298 元,9 套教程一年内随便看。


http://www.niftyadmin.cn/n/5669022.html

相关文章

HelpLook VS GitBook,在线文档管理工具对比

在线文档管理工具在当今时代非常重要。随着数字化时代的到来&#xff0c;人们越来越依赖于电子文档来存储、共享和管理信息。无论是与团队合作还是与客户分享&#xff0c;人们都可以轻松地共享文档链接或通过设置权限来控制访问。在线文档管理工具的出现大大提高了工作效率和协…

PyTorch的特点

PyTorch是一个开源的深度学习框架&#xff0c;由Facebook AI Research&#xff08;FAIR&#xff09;团队开发&#xff0c;自2017年发布以来&#xff0c;凭借其出色的灵活性、易用性和强大的功能&#xff0c;在深度学习和机器学习领域得到了广泛的应用和认可。以下是对PyTorch框…

C++(学习)2024.9.19

目录 面向对象基础 类与对象 概念 类的内容 创建对象 封装 构造函数 基本使用 构造初始化列表 隐式调用与显式调用 拷贝构造函数 浅拷贝 深拷贝 析构函数 作用域限定符: 名字空间 类内声明&#xff0c;类外定义 面向对象基础 类与对象 概念 类&#xff1a;类…

ssh 免密登陆服务器故障

在服务器上新建账户后&#xff0c;希望通过ssh免密或者通过证书登录系统&#xff0c;以提高服务器安全性。 基本流程都已经做完&#xff0c;生成密钥&#xff0c;将公钥内容复制到账户home目录中的.ssh目录下的authorized_keys 文件。同时修改sshd_config文件&#xff0c;禁止通…

寄存器二分频电路

verilog代码 module div2_clk ( input clk, input rst,output clk_div);reg clk_div_r; assign clk_div clk_div_r;always(posedge clk) beginif(rst)beginclk_div_r < 1b0;endelsebeginclk_di…

如何优化前端页面的 AJAX 请求性能并避免冲突

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…

springboot每次都需要重设密码?明明在springboot的配置中设置了密码

第一步&#xff1a;查看当前的密码是什么&#xff1f; 打开redis-cli.exe&#xff0c;输入config get requirepass&#xff0c;查看当前的密码是什么&#xff1f; 接着&#xff0c;修改redis的配置文件&#xff0c;找到redis的安装目录&#xff0c;找到相关的conf文件&#x…

Python实现日志采集功能

目录 一、技术栈选型二、系统架构图三、代码实现1. 日志采集系统的类设计2. Python 代码实现3. 代码解析1. Logger 类2. LogCollector 类3. LogProcessor 类 4. 示例运行5. 整合 Filebeat 和 Fluentd 四、总结 在本文中&#xff0c;我们将基于上一篇文章的设计方案&#xff0c;…