【GameFramework框架内置模块】2、数据节点(Data Node)

2024-02-21 01:12

本文主要是介绍【GameFramework框架内置模块】2、数据节点(Data Node),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

推荐阅读

  • CSDN主页
  • GitHub开源地址
  • Unity3D插件分享
  • 简书地址

大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

一、前言

【GameFramework框架】系列教程目录:
https://blog.csdn.net/q764424567/article/details/135831551

二、正文

2-1、简介

这一篇讲数据节点DataNode,基本开发程序都会有类似数据节点作用的东西,数据节点的作用其实就是保存游戏运行时的一些缓存数据,比如用户登录信息、用户名、任务节点等等。

数据一般会有增删改查这四种操作,在运行时的数据一般是使用单例或者静态属性,将数据存储在内存中

而数据节点也是将数据存储在内存中,但是不用序列化数据,比使用单例或者静态属性要容易维护的多,特别时它的树形结构可以让我们很好的组织我们的数据结构,方便做增删改查操作。

数据节点DataNode模块的数据的存储方式是以树形结构存储。
在这里插入图片描述
图:树形存储结构

简单总结一下,就是数据节点DataNode模块的主要作用就是方便存储数据,高效查找数据。

下面,我们就来看一下数据节点DataNode模块如何使用吧。

2-2、使用说明

示例代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityGameFramework.Runtime;public class Test02 : MonoBehaviour
{void Start(){// 获取DataNode组件var component = UnityGameFramework.Runtime.GameEntry.GetComponent<DataNodeComponent>();// 设置不同类型的节点数据component.SetData("Player.Id", (VarInt32)10101);component.SetData("Player.Name", (VarString)"frank");component.SetData("Player.Sex", (VarBoolean)true);component.SetData("Player.Age", (VarInt32)30);// 获取节点上数据string name = component.GetData<VarString>("Player.Name");Debug.Log("获取节点上数据:" + name);// 根据父节点获取孩子数据var parent = component.GetNode("Player");var age = parent.GetChild("Age").GetData();Debug.Log("根据父节点获取孩子数据:" + age);// 判断节点是否存在var node = component.GetNode("Player.Age");if (node != null){Debug.Log("节点:存在");}else{Debug.Log("节点:不存在");}// 移除节点component.RemoveNode("Player.Age");var del_node = component.GetNode("Player.Age");if (del_node != null){Debug.Log("节点:存在");}else{Debug.Log("节点:不存在");}}
}

运行结果:
在这里插入图片描述

2-3、实现及代码分析

源码:https://gitee.com/jiangyin/GameFramework/tree/master/GameFramework/DataNode

DataNodeManager.cs

/// 数据结点管理器。
internal class DataNodeManager : IDataNodeManager
{private const string RootName = "<Root>";//根节点是Rootprivate DataNode m_Root;/// 根据类型获取数据结点的数据。public T GetData<T>(string path, IDataNode node=null) where T : Variable;/// 设置数据结点的数据。public void SetData<T>(string path, T data, IDataNode node=null) where T : Variable;/// 获取数据结点。public IDataNode GetNode(string path, IDataNode node=null);/// 移除数据结点。public void RemoveNode(string path, IDataNode node = null);
}

可以看出来它的基本API就是增删改查:

  • 增和改都用 :SetData
  • 删:RemoveNode
  • 查: GetData

在使用过程中,我们发现了一个类型Variable
在这里插入图片描述
Variable类型是什么呢,其实就是一个可变的数据类型。

因为C#是强类型语言,没有用一个类型来表示所有的数据类型,一般数据类型都继承object基类,当不确定的数据类型要转成指定的类型,需要进行装箱和拆箱操作,将数据转成object,再强转为指定类型。

而使用Variable类型,就跟object强转类似,但是又有区别,就是它类型不丢失,可以无感使用Variable类和直接使用泛型T一样的。

Variable类就是GF框架中一个万能类。

基类Variable.cs结构如下所示:

Variable.cs

/// 基类变量。
public abstract class Variable : IReference
{public Variable(){}// 初始化变量的新实例。public abstract Type Type{get;}// 获取变量类型。public abstract object GetValue();// 获取变量值。public abstract void SetValue(object value);// 设置变量值。public abstract void Clear();// 清理变量值。
}

三、后记

如果觉得本篇文章有用别忘了点个关注,关注不迷路,持续分享更多Unity干货文章。


你的点赞就是对博主的支持,有问题记得留言:

博主主页有联系方式。

博主还有跟多宝藏文章等待你的发掘哦:

专栏方向简介
Unity3D开发小游戏小游戏开发教程分享一些使用Unity3D引擎开发的小游戏,分享一些制作小游戏的教程。
Unity3D从入门到进阶入门从自学Unity中获取灵感,总结从零开始学习Unity的路线,有C#和Unity的知识。
Unity3D之UGUIUGUIUnity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。
Unity3D之读取数据文件读取使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。
Unity3D之数据集合数据集合数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。
Unity3D之VR/AR(虚拟仿真)开发虚拟仿真总结博主工作常见的虚拟仿真需求进行案例讲解。
Unity3D之插件插件主要分享在Unity开发中用到的一些插件使用方法,插件介绍等
Unity3D之日常开发日常记录主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等
Unity3D之日常BUG日常记录记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。

这篇关于【GameFramework框架内置模块】2、数据节点(Data Node)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/730138

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个