johnsoncodehk 发表于 2022-9-7 21:17

Unity技术-GameFramework文档-简介和初步使用以及日志 ...

公众号-空名先生感谢您的点赞和关注!
关注我 @空名先生
关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!! 专注于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版本。导入后如下图:



公众号-空名先生



image.png

如何使用?

工程目录及作用如下:



公众号-空名先生


[*]Libraries 存放 GameFramework.dll 核心框架和一些框架必需的第三方库(当前只有一个开源 zip 压缩算法库)
[*]Prefabs 存放 GameFramework.prefab 预制体,用于快速创建一个游戏框架启动场景
[*]Scripts 存放 UnityGameFramework 的全部 Runtime 和 Editor 代码
[*]Example.unity 是一个含有 GameFrameork.prefab 预制体的空场景,作为游戏启动的场景
[*]ProcedureExample.cs 是一个示例流程代码文件,示例将以这个流程作为启动流程。
运行项目后发现Game场景有个浮动小窗口,这是框架提供的调试器窗口



image.png


[*]Console 选项卡在运行时(当然可以在移动设备上)默认按不同日志类型,以不同的日志颜色回显最近的日志。点击某条日志可以查看详细的日志和堆栈详请
[*]Information 选项卡显示设备硬件信息、游戏版本和资源信息,输入信息,传感器等
[*]Profiler 选项卡显示性能调试相关的信息,内存,对象池,网络等信息
[*]Other 选项卡可以用来配置调试框窗口的大小缩放(一般不用修改)、执行内存回收操作或者执行重启游戏操作等
作者英语不是很好,为了用起来快捷将里面部分英文翻译成了中文,看起来确实顺延多了,哈哈



公众号-空名先生

日志管理工具

在任何编程语言中,日志都是重中之重,是逻辑分析的首要工具,所以我们首要任务就是要学会使用框架的日志工具。
首先是基础的Log日志(如图),和系统的一样输出到Unity编辑器的控制台



image.png

发布的产品,最好关闭所有日志或者仅开启错误及以上级别日志,自己开发调试的时候可以自定义开启日志级别。



公众号-空名先生

除了在控制台打印,我们使用框架更多的可能是将日志保存到文件的功能。
自定义一个类继承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<span class="kt">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脚本的物体中选择使用即可,就这么简单!!!



image.png

运行的时候,也可以在调试器窗口中找到各个路径位置。



公众号-空名先生

作者:小空和小芝中的小空 转载说明:务必注明来源:https://www.zhihu.com/people/zhimalier 这位道友请留步,我观你气度不凡,谈吐间隐隐有王者霸气 ,日后定有一番大作为 !!!旁边有点赞 收藏 今日传你,点了吧,未来你成功,我分文不取,若不成功,也好回来找我。关注我 @空名先生
『更多专栏』:

点击跳转->Unity一路向东
点击跳转->有意思又酷的网站网址
点击跳转->精致神器软件推荐
点击跳转->精品书籍图谱
点击跳转->中国神话联盟宇宙
点击跳转->Android 指南
页: [1]
查看完整版本: Unity技术-GameFramework文档-简介和初步使用以及日志 ...