Unity技术-GameFramework文档-简介初识和日志管理
我一路种下了蘑菇,只为让你知道回家的路。
本文约9.6千字,新手阅读需要18分钟,复习需要9分钟 【收藏随时查阅不再迷路】
👉关于作者
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单。
👉前提
这段时间学习个Unity框架并且准备应用到实际项目中,但是因为作者神龙见首不见尾,没有什么比较详细的文档,学习困难,不过好在作者将框架所有内容开源了,再次记录下学习过程。
👉实践过程
😜Game Framework简介导读
问:她到底是个什么玩意?
答:Game Framework 是一个基于 Unity 引擎的游戏框架,主要对游戏开发过程中常用模块进行了封装,很大程度地规范开发过程、加快开发速度并保证产品质量。
支持5.3以上到现在所有的Unity版本。
问:那她到底有什么功能呢?
答:相当多哦,包含全局配置,日志等工具集,数据表维护,提示器,下载,事件,文件系统,有限状态机,本地化,网络,对象池,流程,资源管理,场景管理,游戏配置,声音,界面,Web请求。-详情参见文末功能备注(链接)
问:她能帮助我什么?
答:帮你快速开发项目以及搭建良好的产品框架,顺便提高自己的业务能力。
问:那应该怎么找到她,学习她呢?
答:Github地址- https://github.com/EllanJiang/GameFramework/
API手册- https://gameframework.cn/api/
😜初识Game Framework
完整的 Game Framework 内容包含三部分:
-
GameFramework – 封装基础游戏逻辑,如数据管理、资源管理、文件系统、对象池、有限状态机、本地化、事件、实体、网络、界面、声音等,此部分逻辑实现不依赖于 Unity 引擎,以程序集的形式提供。
-
UnityGameFramework.Runtime – 依赖 UnityEngine.dll 进行对 GameFramework.dll 的补充实现。为了方便兼容 Unity 的各个版本,此部分已经以代码的形式包含在 Unity 插件中。
-
UnityGameFramework.Editor – 依赖 UnityEditor.dll 进行对工具、Inspector 的实现。为了方便兼容 Unity 的各个版本,此部分已经以代码的形式包含在 Unity 插件中。
我们直接从官网下载unitypackage插件包,我的是2020.7.30版本。导入后如下图:
😜如何使用?
工程目录及作用如下:
- Libraries 存放 GameFramework.dll 核心框架和一些框架必需的第三方库(当前只有一个开源 zip 压缩算法库)
- Prefabs 存放 GameFramework.prefab 预制体,用于快速创建一个游戏框架启动场景
- Scripts 存放 UnityGameFramework 的全部 Runtime 和 Editor 代码
- Example.unity 是一个含有 GameFramework.prefab 预制体的空场景,作为游戏启动的场景
- ProcedureExample.cs 是一个示例流程代码文件,示例将以这个流程作为启动流程。
运行项目后发现Game场景有个浮动小窗口,这是框架提供的调试器窗口
- Console 选项卡在运行时(当然可以在移动设备上)默认按不同日志类型,以不同的日志颜色回显最近的日志。点击某条日志可以查看详细的日志和堆栈详请
- Information 选项卡显示设备硬件信息、游戏版本和资源信息,输入信息,传感器等
- Profiler 选项卡显示性能调试相关的信息,内存,对象池,网络等信息
- Other 选项卡可以用来配置调试框窗口的大小缩放(一般不用修改)、执行内存回收操作或者执行重启游戏操作等
作者英语不是很好,为了用起来快捷将里面部分英文翻译成了中文,看起来确实顺畅多了,哈哈
😜日志管理工具
在任何编程语言中,日志都是重中之重,是逻辑分析的首要工具,所以我们首要任务就是要学会使用框架的日志工具。
首先是基础的Log日志(如图),和系统的一样输出到Unity编辑器的控制台
发布的产品,最好关闭所有日志或者仅开启错误及以上级别日志,自己开发调试的时候可以自定义开启日志级别。
除了在控制台打印,我们使用框架更多的可能是将日志保存到文件的功能。
自定义一个类继承DefaultLogHelper
using GameFramework;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
using UnityGameFramework.Runtime;
internal class FileLogHelper : DefaultLogHelper
{
//设置日志文件保存路径-你可以自定义,也可以使用系统的
private readonly string CurrentLogPath = Utility.Path.GetRegularPath(Path.Combine(Application.persistentDataPath, "current.log"));
private readonly string PreviousLogPath = Utility.Path.GetRegularPath(Path.Combine(Application.persistentDataPath, "previous.log"));
public FileLogHelper()
{
Application.logMessageReceived += OnLogMessageReceived;
try
{
//每次运行的时候将日志替换,就像队列一样
if (File.Exists(PreviousLogPath))
{
File.Delete(PreviousLogPath);
}
if (File.Exists(CurrentLogPath))
{
File.Move(CurrentLogPath, PreviousLogPath);
}
}
catch
{
}
}
private void OnLogMessageReceived(string logMessage, string stackTrace, LogType logType)
{
string log = Utility.Text.Format("[{0}][{1}] {2}{4}{3}{4}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), logType.ToString(), logMessage ?? "<Empty Message>", stackTrace ?? "<Empty StackTrace>", Environment.NewLine);
try
{
File.AppendAllText(CurrentLogPath, log, Encoding.UTF8);
}
catch
{
}
}
}
然后在挂在了Base脚本的物体中选择使用即可,就这么简单!!!
运行的时候,也可以在调试器窗口中找到各个路径位置。
👉其他
📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:
https://zhima.blog.csdn.net/
https://www.zhihu.com/people/zhimalier
https://juejin.cn/user/4265760844943479
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
- 点赞
- 收藏
- 关注作者
评论(0)