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 是一個含有 GameFramework.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(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
{
}
}
}

赞(0)