【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)

简介: 【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)

需要框架资源包和源码请点赞关注收藏后评论区留言私信~~~

框架,又称软件框架,这个词最初是建筑学概念,意思是一个框子,指其约束性,也是一个架子,指其支撑性,一个基本概念的结构,用于解决或处理复杂的问题。

框架这个定义十分流行,尤其在软件领域,叫做软件框架,软件框架,通常是为了实现某个业界标准或完成特定基本人物的软件组件规范,也是指为了实现某个软件组成规范时,提供贵伐要求的基础功能的软件产品

简而言之,框架就是制定一套规范或者规则,大家在该规范或规则下工

框架就是为了在一定的规则限定下,让程序具有可靠性,安全性,可伸缩性,可定制性,可拓展性以及可维护性。

常见的框架有MVC三层框架,下面介绍Unity 3D中的Gameframework和QFramework进行简单讲解

1:GameFramework框架

GameFramework是一个基于Unity引擎的游戏框架,主要对游戏开发过程中常用模块进行了封装,最大限度的规范了开发过程,加快了开发速度并保证了产品质量 该框架适用于所有Unity 5.3.0及以上的版本

完整的GameFramework框架由GameFramework Unity UnityGameFramework以及Game四部分组成,GameFramework框架如下图所示

将GameFramework.unitypackage导入项目中

导入后 工程目录如下

GameFramework文件夹是框架的全部内容 其中

Libraries存放GameFramework.dll核心框架和一些框架必须的第三方库

Prefabs存放预制体 用于快速创建一个游戏框架启动场景

Scripts存放Runtime和Editor代码

Example文件夹是一个示例目录其中

Example.unity是一个含有GameFramework对象的空场景,作为游戏启动场景

ProcedureExample.cs是一个示例流程代码文件 示例将以这个流程作为启动流程

接下来 用GameFramework的方式在控制台中打印Hello World的日志

脚本代码如下

using GameFramework;
using GameFramework.Procedure;
using UnityGameFramework.Runtime;
using ProcedureOwner = GameFramework.Fsm.IFsm<GameFramework.Procedure.IProcedureManager>;
namespace GameFrameworkExample
{
    public class ProcedureExample : ProcedureBase
    {
        protected override void OnEnter(ProcedureOwner procedureOwner)
        {
            base.OnEnter(procedureOwner);
            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);
        }
    }
}

运行程序控制台打印信息,可以看到控制台根据不同级别分别输出了一条日志

将日志信息记录到文件中,为日志添加一个新的日志辅助器,它派生自默认的日志辅助器DefaultLogHelper 新建一个FileLogHelper.cs脚本 双击打开脚本 该脚本可以实现日志辅助器功能

该脚本代码如下

using GameFramework;
using System;
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;
        if (File.Exists(PreviousLogPath))
        {
            File.Delete(PreviousLogPath);
        }
        if (File.Exists(CurrentLogPath))
        {
            File.Move(CurrentLogPath, PreviousLogPath);
        }
    }
    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);
        File.AppendAllText(CurrentLogPath, log, Encoding.UTF8);
    }
}

将日志辅助器设置为使用状态 运行程序后 所有输出到控制台的日志,都可以同时写入Application.persisitentDataPath下的current.log文件中

2:QFramework框架

QFramework是一套快速开发框架,可以满足任何类型的游戏以及应用项目的开发需求

QFramework提供了Manager Of Manager架构以及DVA单项数据流的架构,它还内置了UI Kit(UI工作流管理套件) Res Kit(资源工作流管理套件) UniRx(异步编辑)等强大的模块 在细节上提升开发效率

QFramework提供了一套插件平台,即PackageKit 平台上有丰富的拓展模块以及UI空间和Shader案例等等 软件开发人员可以按需自行下载使用

QFramework框架使用了Manager Of Manager(MOM)框架 框架方案如下图所示

QFramework导入

将QFramework框架包导入项目中

然后按组合键Ctrl+E 即可弹出QFramework可视化管理窗口

接下来 使用QFramework在控制台打印Hello World的日志

首先新建一个HelloQF.cs脚本 双击打开 代码如下

using UnityEngine;
using QFramework;
public class HelloQF : MonoBehaviour
{
    void Start()
    {
        //QFramework实现第一种Log方式
        // 打印调试级别日志
        Log.I("Hello World");
        // 打印警告级别日志
        Log.E("Hello World");
        // 打印错误级别日志
        Log.W("Hello World");
        //QFramework实现第二种Log方式
        "Hello World".LogInfo();
        "Hello World".LogWarning();
        "Hello World".LogError();
        //Unity自带Log方式
        Debug.Log("Hello World");
        Debug.LogWarning("Hello World");
        Debug.LogError("Hello World");
    }
}

运行程序 可以看到程序对应不同的级别都打印了hello world

创作不易 觉得有帮助请点赞关注收藏~~~

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7天前
|
C# 图形学
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
61 0
|
7天前
|
人工智能 自然语言处理 区块链
【Unity 3D】元宇宙概念、应用前景、价值链等概述
【Unity 3D】元宇宙概念、应用前景、价值链等概述
59 0
|
7天前
|
vr&ar C# 图形学
【Unity 3D】VR飞机拆装后零件说明功能案例实战(附源码和演示视频 超详细)
【Unity 3D】VR飞机拆装后零件说明功能案例实战(附源码和演示视频 超详细)
44 0
|
7天前
|
vr&ar C# 图形学
【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)
【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)
48 0
|
7天前
|
vr&ar 图形学
【Unity 3D】VR飞机起飞喷火游戏案例实战(附源码和演示视频 超详细)
【Unity 3D】VR飞机起飞喷火游戏案例实战(附源码和演示视频 超详细)
64 0
|
7天前
|
vr&ar 开发工具 图形学
【Unity 3D】使用EasyAR实现单图识别的AR增强现实功能(附实现步骤)
【Unity 3D】使用EasyAR实现单图识别的AR增强现实功能(附实现步骤)
106 0
|
7天前
|
图形学
【Unity 3D】3D游戏跑酷小子实战教学(附源码和步骤 超详细)
【Unity 3D】3D游戏跑酷小子实战教学(附源码和步骤 超详细)
196 0
|
7天前
|
C# 图形学
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
223 1
|
7天前
|
开发框架 Java C#
【Unity逆向】玩游戏遇到的“飞天锁血”是怎么实现的?
【Unity逆向】玩游戏遇到的“飞天锁血”是怎么实现的?
99 0
|
7天前
|
存储 自然语言处理 监控
【Unity 实用工具篇】| 游戏多语言解决方案,官方插件Localization 实现本地化及多种语言切换
Unity的多语言本地化是一个很实用的功能,它可以帮助游戏支持多种语言,让不同语言的玩家都能够更好地体验游戏。 而实现本地化的方案也有很多种,各个方案之间也各有优劣,后面也会对多个方案进行介绍学习。 本文就来介绍一个专门作用于多语言本地化的Unity官方插件:Localization 。 这个插件方便进行游戏的多语言本地化,让游戏支持多种语言,下面就来看看该插件的使用方法吧!