zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Unity技术-GameFramework文档系列(三)- 日志管理和UI

文档技术日志UI 管理 系列 Unity
2023-09-14 09:04:16 时间
往期文章分享

本文约4.9千字,新手阅读需要11分钟,复习需要4分钟收藏随时查阅不再迷路

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单

在这里插入图片描述

👉前提

👉实践过程

😜UI

经过上一节搞定了场景,接着就要开搞UI了,UI也不是直接就在场景中全部展示出来了,有些需要我们动态从资源中加载。
我直接上个步骤图,看的更形象一些。

  1. 代码中用UIComponent组件加载UI预制体,重点注意第二个参数,将UI进行了分组和层级管理
  2. 回到编辑器中找到GameFramework-UI物体,里面有个UI Groups属性要设置
  3. 预制体需要挂载脚本,脚本需要继承UIFormLogic脚本,这是UI控制脚本,这样才能交给框架进行管理

image.png

这一套下来,真的是如行云流水般顺畅,越来越方便了。继续学习看看框架到底还有多少惊喜。
1A144D0E.jpg

顺畅个屁啊,小空又跑回来更新了,学到后面发现怎么UI也出不来,哎,就是跟你玩,就是不出。不小心踩了个坑。

UI,UI,都说了是UI,我竟然没搞Cnavas,糊涂啊。根据上图步骤,第三步预制体是你布局好UI控件然后将整个Canvas做成预制体。成功后是这样的(下图):
image.png
还有一点要留意,运行后你会发现在场景里并没有找到UI组件,其实不然,框架通过UIComponent 创建的的UI 统统都会跑到Framework 里面 UI下面。无论你打开几个场景UI始终都是在框架所在场景内的。
image.png
如上图所示,全部在【UI-UI Form Instances】下

😜日志管理工具

在任何编程语言中,日志都是重中之重,是逻辑分析的首要工具,所以我们首要任务就是要学会使用框架的日志工具。

首先是基础的Log日志(如图),和系统的一样输出到Unity编辑器的控制台
image.png
发布的产品,最好关闭所有日志或者仅开启错误及以上级别日志,自己开发调试的时候可以自定义开启日志级别。
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
        {
        }
    }
}

然后在挂在了Base脚本的物体中选择使用即可,就这么简单!!!
image.png
运行的时候,也可以在调试器窗口中找到各个路径位置。
image.png

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢欢迎点赞👍收藏🌟留言📝