像很多编程语言类教程一样,我们用 Game Framework 的方式,在控制台中打印出“Hello World”的日志。
教程工程源码,请参考: https://github.com/EllanJiang/Tutorial
打开导入插件时导入的 ProcedureExample.cs 代码文件,在 Unity 中修改文件名为 ProcedureLaunch.cs,意为游戏启动流程。流程相关的内容会在后面的教程中介绍,这里将启动流程直接进行设置。
在 ProcedureLaunch 的 OnEnter 中加入以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
string welcomeMessage = Utility.Text.Format("Hello Game Framework {0}.", Version.GameFrameworkVersion); // 打印调试级别日志,用于记录调试类日志信息 Log.Debug(welcomeMessage); // 打印信息级别日志,用于记录程序正常运行日志信息 Log.Info(welcomeMessage); // 打印警告级别日志,建议在发生局部功能逻辑错误,但尚不会导致游戏崩溃或异常时使用 Log.Warning(welcomeMessage); // 打印错误级别日志,建议在发生功能逻辑错误,但尚不会导致游戏崩溃或异常时使用 Log.Error(welcomeMessage); // 打印严重错误级别日志,建议在发生严重错误,可能导致游戏崩溃或异常时使用,此时应尝试重启进程或重建游戏框架 Log.Fatal(welcomeMessage); |
这段代码会分别用不同级别的日志,分别输出一条欢迎信息(这里的错误是故意输出的)。
由于 Game Framework 为了兼顾发布后的性能,日志的开启是通过宏定义控制的,新工程中默认不包含任何日志宏定义,故没有日志输出。需通过以下菜单项,根据需要开启相应级别的日志。
打印日志的开销非常大(尤其是内存方面),所以在正式发布游戏时,尽量选取 Disable All Logs(关闭所有日志)或者 Enable Error And Above Logs(仅开启错误及以上级别日志)。
请参考文档:基础和工具
有时,我们可能希望将日志记录到文件中,而不仅仅打印在控制台上,此时我们只需要为日志增加一个新的日志辅助器(Helper),它派生自默认的日志辅助器DefaultLogHelper,并加以改造。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
using GameFramework; using System; using System.IO; using System.Text; using UnityEngine; using UnityGameFramework.Runtime; namespace Tutorial { /// <summary> /// 带有文件打印的日志辅助器。 /// </summary> 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 { } } } } |
将日志辅助器设置为使用状态:
此时,所有输出到控制台的日志,都可以同时写到 Application.persistentDataPath 下的 current.log 文件中。
Game Framework 中大量使用的类似日志辅助器这种选择 Helper 来扩展不同需求的方法。
这也是 Game Framework 的一大特色。
日志相关的内容,就讲到这里。
- 本文固定链接: https://gameframework.cn/tutorial/tutorial-002/
- 转载请注明: Ellan 于 Game Framework 发表
《【第二章】Hello World》有 4 条评论