php 手机网站cms系统,购物网站制作流程,郑州做网站优化电话,zzcms网站开发推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好#xff0c;我是佛系工程师☆恬静的小魔龙☆#xff0c;不定时更新Unity开发技巧#xff0c;觉得有用记得一键三连哦。
一、前言
【GameFramework框架】系列教程目录#xff1a; https://blog.csdn.net/q7… 推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好我是佛系工程师☆恬静的小魔龙☆不定时更新Unity开发技巧觉得有用记得一键三连哦。
一、前言
【GameFramework框架】系列教程目录 https://blog.csdn.net/q764424567/article/details/135831551
这是GameFramework框架内置模块的第一篇全局配置Config讲解这些模块的时候会尽量的涉及介绍、为什么使用、如何使用、代码分析这几块让大家可以知其然也知其所以然。
二、正文
2-1、介绍
全局配置表存储了一些游戏中使用的全局的参数配置比如玩家的初始速度、游戏初始音量等。
全局配置表的结构跟DataTable结构类似也是列行键值对只是没有ID这一列因为全局配置也不需要用ID去查询 是直接使用key值进行查询。
2-2、全局配置的作用
全局配置的作用其实我在介绍里面已经说了就是存储游戏中使用的全局的参数配置比如玩家的初始速度、初始蓝量、初始防御力等等。
在实际开发中也会有这么一个类来存放初始数据不过通常都需要程序员自己去写这个类存放初始数值而GF框架已经帮我们封装好了我们只需要拿来用就可以了。
2-3、全局配置表使用说明
配置文件推荐存放位置
这里我们以官方的StarForce演示项目为例配置文件都在这里 说明一下框架里面是没有GameMain这个文件夹的这个文件夹是自己的源工程文件的位置可以放场景、脚本、配置文件等东西。
也就是说Configs里面放的东西也是自己配置的下面就说明一下这个文件怎么配置以及怎么使用的。
配置文件的格式
我们打开一个名字叫做DefaultConfig的默认配置文件 文件的格式是txt的内容是个表比如将json存到一个txt里面只是为了读取方便文件格式不重要重要的里面的内容是怎么读取的。
先来看一下表结构 配置项 | 策划备注 | 配置值
OK了解了表结构我们来看一下如何快速使用全局配置Config。
1首先我们需要构建一个表这里用了示例的DefaultConfig.txt的文件 路径需要记住需要动态加载。
2新建脚本Test01.cs双击编辑代码
using StarForce;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Test01 : MonoBehaviour
{private void Awake(){LoadConfig();}private void LoadConfig(){// 全局配置表路径string configAssetName Assets/GameMain/Configs/DefaultConfig.txt;// 读取GameEntry.Config.ReadData(configAssetName, this);}void Start(){// 获取GameIDint GameID GameEntry.Config.GetInt(Scene.Main);Debug.Log(GameID);}
}就Unity持久化数据用法比较类似实际也就是一回事只是这个持久化做了封装和统一管理避免太分散不好管理。
3建立流程运行脚本
这个脚本直接挂载物体上是肯定是不能直接运行的不符合框架流程。 PS这里再啰嗦一下这个框架内部有一个自己的运行流程代码执行顺序我们使用这个框架的时候就要避免再使用Unity原来的流程比如Start、Update、Awake特别是制作流程的时候。 当然避免使用不是不用其他不是流程的脚本也可以用Unity的流程。 接下来我们需要制作一个流程让框架首先去运行这个流程入口然后流程入口再执行我们的代码。
我们再次打开我们的Test01.cs脚本修改代码
using StarForce;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ProcedureOwner GameFramework.Fsm.IFsmGameFramework.Procedure.IProcedureManager;public class Test01 : ProcedureBase
{public override bool UseNativeDialog throw new System.NotImplementedException();protected override void OnEnter(ProcedureOwner procedureOwner){base.OnEnter(procedureOwner);LoadConfig();}protected override void OnLeave(ProcedureOwner procedureOwner, bool isShutdown){base.OnLeave(procedureOwner, isShutdown);}protected override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds){base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);// 获取GameIDint GameID GameEntry.Config.GetInt(Scene.Main);Debug.Log(GameID);}private void LoadConfig(){// 全局配置表路径string configAssetName Assets/GameMain/Configs/DefaultConfig.txt;// 读取GameEntry.Config.ReadData(configAssetName, this);}
}PS继承ProcedureBase 使用OnEnter、OnLeave、OnUpdate做状态切换这里用到了FSM状态机在另一篇文章有涉及感兴趣的读者可以翻过去看看【GameFramework框架】三、快速启动
4设置流程启动 将框架中的GameFramework预制体拖入场景中挂载GameEntry脚本 找到流程组件设置启动流程 运行程序 顺利打印。
2-4、代码分析
全局配置组件 **IConfigManager **
namespace GameFramework.Config;public interface IConfigManager : IDataProviderIConfigManager
{// 获取全局配置项数量。int Count { get; }// 获取缓冲二进制流的大小。int CachedBytesSize { get; }// 资源管理器。void SetResourceManager(IResourceManager resourceManager);// 全局配置数据提供者辅助器。void SetDataProviderHelper(IDataProviderHelperIConfigManager dataProviderHelper);// 全局配置辅助器。void SetConfigHelper(IConfigHelper configHelper);// 要确保二进制流缓存分配内存的大小。void EnsureCachedBytesSize(int ensureSize);// 释放缓存的二进制流。void FreeCachedBytes();// 指定的全局配置项是否存在。bool HasConfig(string configName);// 从指定全局配置项中读取布尔值。bool GetBool(string configName);// 从指定全局配置项中读取布尔值。bool GetBool(string configName, bool defaultValue);// 从指定全局配置项中读取整数值。int GetInt(string configName);// 从指定全局配置项中读取整数值。int GetInt(string configName, int defaultValue);// 从指定全局配置项中读取浮点数值。float GetFloat(string configName);// 从指定全局配置项中读取浮点数值。float GetFloat(string configName, float defaultValue);// 从指定全局配置项中读取字符串值。string GetString(string configName);// 从指定全局配置项中读取字符串值。string GetString(string configName, string defaultValue);// 增加指定全局配置项。bool AddConfig(string configName, string configValue);// 增加指定全局配置项。bool AddConfig(string configName, bool boolValue, int intValue, float floatValue, string stringValue);// 移除指定全局配置项。bool RemoveConfig(string configName);// 清空所有全局配置项。void RemoveAllConfigs();
}
ConfigData 配置文件解析后存到一个ConfigData类ConfigData是一个结构体有四个字段支持存储4中不同类型的数据
namespace GameFramework.Config
{internal sealed partial class ConfigManager : GameFrameworkModule, IConfigManager{private struct ConfigData{private readonly bool m_BoolValue;private readonly int m_IntValue;private readonly float m_FloatValue;private readonly string m_StringValue;}}
}所以当配置表中的数据被读取出来之后会被同时解析成四种类型然后构造一个ConfigData进行存储
/// 增加指定全局配置项。
public bool AddConfig(string configName, string configValue)
{bool boolValue false;bool.TryParse(configValue, out boolValue);int intValue 0;int.TryParse(configValue, out intValue);float floatValue 0f;float.TryParse(configValue, out floatValue);//把解析的四种类型值全部存入ConfigDatareturn AddConfig(configName, boolValue, intValue, floatValue, configValue);
}
/// 增加指定全局配置项。
public bool AddConfig(string configName, bool boolValue, int intValue, float floatValue, string stringValue)
{m_ConfigDatas.Add(configName, new ConfigData(boolValue, intValue, floatValue, stringValue));return true;
}之后就是正常的使用了
//通过Key值Scene.Main 查询配置
var lastSceneId GameEntry.Config.GetInt(Scene.Main));ConfigComponent提供了四种方式GetInt、GetBool、GetFloat、GetString获取四种类型的值但是获取的值需要跟设置的值要相同不然就获取不到正确的值了。
比如存储Scene.Main值是2用GetBool获取可能就是默认值false但是通过GetInt就能获取正确的2。
这么设计的原因可能是为了配置一个字段但是有可能用到他的不同类型。
比如枚举判断我们可以用int值数据乘除计算的时候可能使用float值。
这样设计用起来就非常灵活了。
三、后记
如果觉得本篇文章有用别忘了点个关注关注不迷路持续分享更多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和坑让后来人可以有些参考。