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

这篇具有很好参考价值的文章主要介绍了【GameFramework框架内置模块】2、数据节点(Data Node)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

推荐阅读

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

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

一、前言

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

二、正文

2-1、简介

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

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

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

数据节点DataNode模块的数据的存储方式是以树形结构存储。
【GameFramework框架内置模块】2、数据节点(Data Node),# GameFramework框架,unity,游戏引擎,编辑器
图:树形存储结构

简单总结一下,就是数据节点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("节点:不存在");
        }
    }
}

运行结果:
【GameFramework框架内置模块】2、数据节点(Data Node),# GameFramework框架,unity,游戏引擎,编辑器

2-3、实现及代码分析

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

DataNodeManager.cs

/// 数据结点管理器。
internal class DataNodeManager : IDataNodeManager
{
    private const string RootName = "<Root>";//根节点是Root
    private 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
【GameFramework框架内置模块】2、数据节点(Data Node),# GameFramework框架,unity,游戏引擎,编辑器
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干货文章。


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

博主主页有联系方式。

博主还有跟多宝藏文章等待你的发掘哦:文章来源地址https://www.toymoban.com/news/detail-833586.html

专栏 方向 简介
Unity3D开发小游戏 小游戏开发教程 分享一些使用Unity3D引擎开发的小游戏,分享一些制作小游戏的教程。
Unity3D从入门到进阶 入门 从自学Unity中获取灵感,总结从零开始学习Unity的路线,有C#和Unity的知识。
Unity3D之UGUI UGUI Unity的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)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • node中的内置模块path和fs

    Node中的path模块是用来操作文件路径的内置模块,主要用于字符串路径操作,其有多种用法用来返回不同的路径信息。 path.join path.join()方法主要用于连接路径。该方法的主要作用就是将所有传入的路径片段连接在一起,然后规范化生成的路径。需要注意的是,在Join操作中’

    2024年02月13日
    浏览(52)
  • Node.js | 使用 zlib 内置模块进行 gzip 压缩

    🖥️ NodeJS专栏:Node.js从入门到精通 🖥️ 博主的前端之路:前端之行,任重道远(来自大三学长的万字自述) 🧧 加入社区领红包:海底烧烤店ai(从前端到全栈) 🧑‍💼个人简介:即将大三的学生,一个不甘平庸的平凡人🍬 👉 你的一键三连是我更新的最大动力❤️!

    2024年02月02日
    浏览(51)
  • node.js内置模块fs,path,http使用方法

    NodeJs中分为两部分 一是V8引擎为了解析和执行JS代码。 二是内置API,让JS能调用这些API完成一些后端操作。 内置API模块(fs、path、http等) 第三方API模块(express、mysql等) fs模块 fs.readFile()方法,用于读取指定文件中的内容。 fs.writeFile()方法,用于向执行的文件中写入内容 path路径处

    2024年02月12日
    浏览(58)
  • 我的框架-Unity3d中的用户数据储存模块UserDB

    前言:         我们在开发一些小游戏的时候,不可能将所有的数据都上传到服务器里去储存,有很多数据是需要储存到用户本地的。比如一些简单的用户设置,一些只需要打开一次的用户提示记录等等。当所需储存的数据比较少的时候,我们可以直接用 PlayerPrefs.SetString 直

    2023年04月14日
    浏览(37)
  • GameFramework框架详解之 Network网络框架

    目前流行的一些开源的网络框架有很多,我自己也手写过网络相关的模块。但是当我看了GameFramework的网络框架,还是眼前一亮的感觉。他的封装继承体系真的非常值得我们细细去品味,去学习。今天就和大家拆解一下GameFramework的网络框架的使用。 NetworkManager只负责维护Netw

    2024年02月13日
    浏览(47)
  • [Unity] GraphView 可视化节点的事件行为树(一) Runtime Node

            这个框架最近自己终于补充完成了,使用文档和源码已经放在了Github上,可以在之前的文章中找到: [Unity] 使用GraphView实现一个可视化节点的事件行为树系统(序章/Github下载)_Sugarzo的博客-CSDN博客_unity graphview                  本文将开始介绍Runtime部分的

    2024年02月07日
    浏览(34)
  • GameFramework框架详解之 Entity实体

    GameFramework中Entity,一般用于游戏运行时动态加载的游戏对象,如角色,怪物,武器,技能,子弹,特效等。 一般来说,我们想创建一个实体,最简单的方法当然是Resource.Load()+Instantiate(),然后放到合适的位置,播放合适的动画即可。 但是GameFramework却给每个实体定义了一个

    2024年02月13日
    浏览(48)
  • GameFramework 框架详解之 如何接入热更框架HybridCLR

    HybridCLR是一个特性完整、零成本、高性能、低内存的近乎完美的c#热更新方案 GameFramework是一个非常出色完整的基于Unity引擎的游戏框架,里面包含了非常多的模块,封装非常完整。 以前市面上的热更大多数都是Lua为主,后来出了一个ILRuntime的C#热更框架,虽然性能差了点,但

    2024年02月07日
    浏览(45)
  • GameFramework框架详解之 Config全局配置

    GameFramework是一个模块封装非常完整的游戏框架,其中有一个全局配置表,存储了一些游戏中使用的全局常量。 全局配置表的结构和DataTable结构很相似,只不过少了id一列,因为全局配置不使用Id进行查询,而是使用key值进行查询。 全局配置逻辑比较简单,下面我们来通过示例

    2024年02月01日
    浏览(78)
  • GameFramework框架详解之 Event事件系统

    GameFramework是一种基于Unity3D引擎的游戏开发框架,其中包括了强大的事件系统。该系统使用了观察者设计模式,允许游戏对象之间的松耦合通信和交互。 传统的事件系统,一般都是由一个EventManager管理着所有的Event集合,每个Event包括一个EventId+EventHandler。 GameFramework的事件系

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包