Unity版本2022.3.50f1
GameFramework版本2021.5.31
相关文章:
笨木头[GameFramework]Demo9-AssetBundle打包的一些坑笨木头Gamefarmework的AB打包http://www.benmutou.com/archives/2615
Gameframework官网https://gameframework.cn/及相关文章
http://gameframework.cn/archives/320 AssetBundle编辑工具http://gameframework.cn/archives/356 AssetBundle构建工具
写在前面:
本文主要讨论解决我在使用GameFramework打Ab包时遇到的相关问题。
本项目采用直接导入官网下载的GameFramework包的格式,不在StarForce项目的基础上讨论,方便大家自己项目的开发。资源包导入请参考(其实就是为了写这一篇文章才写了链接这篇文章)GameFarmework导入官方包文件并创建自己的第一个流程-CSDN博客
本文介绍如何使用GameFramework框架自带的工具打AB包,虽然我也没有AB包的具体使用经验,但是还是与大家分享我在跟官网教程学习打AB包并加载AB包时遇到的问题的解决方案。(因为这部分的问题都太离谱了)
1.准备一个项目工程
参考上面的链接,准备一个导入好资源包的工程。相关设置也按链接文章配置。(说白了就是拿上篇文章里的工程来使用)
2.GameFramework框架自带的AB包打包工具
如图,右边框选到的两个就是这篇文章要用到的框架自带打包工具,简单认识一下,ResourceEditor就是选择你要打包的资源的工具,方便你不用每次打包都得选择一堆东西,可以以增量的方法来添加要打包资源。ResourceBulider就是实际的打包输出工具,用来输出各个平台用到的AB包。详细内容我们后面介绍。
3.ResourceEditor工具介绍
上面简单介绍了一下这个工具,下面我们打开这个工具来看看它长什么样。(如果你看过其他教程,就想知道为什么下图最右边的框里没有显示任何东西,可以直接跳过工具介绍)
现在里面没有任何东西是正常的,别被这么大一个框吓唬到了,其实原理很简单,我们从右向左介绍这3个栏。
第三栏:
最右边是你项目的所有资源,也就是预制体和场景之类的东西,不包含脚本,这不难理解,框架会找到你项目里所有的资源让你选择其中的一部分来打包,
上面是第三栏下面的按钮,我们从左到右介绍框选的部分
(1)把选中的资源加入到选中的资源包中(跑到第二栏)
(2)把选中的资源直接生成为一个资源包(跑到第一栏)
(3)清除所有资源包(第一栏清空)
(4)保存当前的打包方式
第二栏:
第二栏会显示你选中的资源包中的所有资源,当然这些都是你自己加进去的,新建的资源包不带任何东西。
上面是第三栏下面的按钮,我们从左到右介绍所有的按钮
(1)选中所有资源包中资源
(2)取消所有选中
(3)选择资源的显示方法,有按名称,按路径,按Guid这三种(Guid也就是分配给这个资源的唯一识别编号)
(3)把选中的资源退回到项目资源中(跑到第三栏)
第一栏:
第一栏显示你创建的所有资源包,如果比喻一下,这就是根目录,第二栏就是子目录。(这能算是比喻吗)
还是介绍按钮
(1)添加一个资源包
(2)重命名选中资源包
(3)删除选中资源包
(4)选择资源从哪里加载(具体用处不知道,请参考其他文章)、
有人要问了,这还有两个没被框的是什么?我没用过,这篇文章我们现在也用不上,以后再说。
4.ResourceBulider工具介绍
一样还是先看看这个工具长什么样
上面就是这个工具的全貌,(好多东西,不想再打字了)上面框选的东西已经在图片里介绍过了,不是常用的东西。我们看看下半部分。(虽然官方的网站图片加载不出来,但还是建议需要详细了解的同学去看看,或者找别的文章学习)
从上往下看
(1)小版本号,每次打包后重新打开ResourceBulider工具界面会自己加一
(2)AB包打包路径,建议用右边的Browse按钮来选择,直接输入有点问题
(3)根据你的游戏类型来选择,单机还是网络,全选也没事(这部分我也没理解,对AB包熟悉的同学应该知道,可以评论写出自己的理解,想理解的同学请找别的文章学习,我这里只是演示如何按官方教程的路线完成AB包操作)
(4)开始打包的按钮,右边Save是保存上面的一系列设置的按钮
还是再声明一下,关于这两个工具的介绍我写的不是非常详细,需要了解这两个工具的详细设置的同学请另找文章视频学习。
5.打AB包的方法和会遇到的问题
介绍完这两个工具,我们开始学习如何打包,首先我们需要为工具创建他们需要的配置文件。观察你项目中的GameFarmework文件。
我们先点击ResourceEditor工具中的Save按钮。(别问为什么,先照做)
然后再看你项目中的GameFarmework文件。
发现了什么?没错多出来一个Configs文件,还送你了两个.xml文件,这两个就是打包工具的配置文件,(但不是全部)我们重点看看这个ResourceEditor文件,这是核心的配置文件。
这是2021.5.31版本GameFramework框架自动给你生成的配置文件,但很可惜它不能正常使用。把这个文件修改成下面的样子。
这个文件的具体含义我就不介绍了,这是从官方的StarForce项目上扒下来并修改的。官方的AB包教程介绍过要添加一个配置文件,但是由于作者没有更新官方教程的原因,配置的文件名和文件内容都不一样,但实际是一个东西,(作者的水平自然不必多说,也非常的友善,是由于时间和精力不足很难再更新GameFramwork框架的相关内容。但官方群的管理反感讨论GameFramwork的入门相关内容,这点我不是很理解,但这不是作者的原因,请不要责怪作者!!!)
下面贴出官方教程的图来做对比。
虽然这些文字已经失去了现有的作用,但是有耐心有能力阅读源码的同学可以用于参考推测正确配置文件中的设置的含义。
还是回归主题,上面的操作实际就是创建了一个工具需要的配置文件。然后我们回到ResourceEditor工具的界面中。可以看到第三栏中终于出现了项目资源。(当然你想不到点开三角标我也没办法了)
我们先回到Unity界面,创建几个预制体,方便我们选择并打包。我这里创建了一个Prefab文件夹并加入了两个预制体。(就是简单的方块和球)
下一步我们就创建一个资源包并选择需要打包的资源,看过上面介绍的同学应该会操作吧,我创建一个Test资源包,然后在包中加入上图的两个预制体,保存。
这样我们就选择好了我们要打包的资源,接下来就得交给ResourceBulider工具了。这个工具界面会报错是正常的,因为没有配置好设置。
修改红色框中的选项,路径我就在桌面创建了一个文件夹,用工具的Browse按钮导航过去,然后最下面框中就没有报错啦。
还是先点击一下Save。(别急着点StarBuildResource啊喂)
然后你就会看到这个地方又多了一个文件,这就是ResourceBulider工具的配置文件,当然,这次生成的文件没有问题。(大概吧,我没有遇到这里出现问题的错误)
现在我们去点击StarBuildResource按钮,尝试生成AB包。
这里出现了警告,但是AB包已经生成了,你可以检查你的打包路径的文件夹,里面已经又东西了,但我们还是解决这个警告,双击到代码中去。
这里是方法过时了,我们替换一下这个方法。
然后就不会有警告啦。下面工具的警告是告诉你版本会被覆盖,只要把工具界面的数字手动加一就不会有警告了。
吸一口气,现在只是打包好而已,还要解决读取的问题。(这篇文章也太长了吧)
打包好后,文件夹中会生成这些文件夹。
简单介绍一下BuildReport, 里面有你的每次打包的文件夹,而每次打包的文件夹中是这些文件。
BulidLog就是打包过程中产生的消息集,你可以查看打包的每一步完成的怎么样,有没有错误。BulidReport我们先不管。
Working文件夹里的东西是给打包工具看的,用来增量的生成下次打包的文件。
至于剩下三个,官方是这样描述的,我看的不是很懂。
上面的东西我们不必重点关注,我们先想办法完成加载AB包的流程,而官方举的例子是这样说的。
也就是说我们得创建一个StreamingAssets文件夹然后把打包好的文件丢进去。我这里丢进去的是Package文件夹下的文件。(因为丢Packed文件夹的会报错,原因大概还是太久没有更新)
但是这样还是不够的,因为框架不会自动加载AB包,还得再流程中加入启用加载的操作。这里我们就在Demo_ProcedureLaunch流程中实现。对脚本修改如下。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GameFramework;
using GameFramework.Procedure;
using ProcedureOwner = GameFramework.Fsm.IFsm
using UnityGameFramework.Runtime;
using GameFramework.Event;
using System;
public class Demo_ProcedureLaunch : ProcedureBase
{
//AB包初始化完成标志位
private bool m_InitResourcesComplete = false;
//进入流程回调函数
protected override void OnEnter(ProcedureOwner procedureOwner)
{
base.OnEnter(procedureOwner);
//打印初始化消息
Log.Debug("初始化");
//获取资源更新组件
ResourceComponent Resource = UnityGameFramework.Runtime.GameEntry.GetComponent
// 初始化资源,注意:使用单机模式并初始化资源前,需要先构建 AssetBundle 并复制到 StreamingAssets 中,否则会产生 HTTP 404 错误
Resource.InitResources(OnInitResourcesComplete);//初始化资源完成后会调用括号中填入的函数
}
//流程中帧更新回调函数
protected override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds)
{
base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);
//判断资源加载是否完成
if (!m_InitResourcesComplete)
{
// 初始化资源未完成则继续等待
return;
}
Log.Debug("AB包加载完成");
//ChangeState
}
//初始化资源完成回调函数
private void OnInitResourcesComplete()
{
//资源加载完成置位
m_InitResourcesComplete = true;
//打印加载完成消息
Log.Info("Init resources complete.");
}
}
注释写的很详细了,当然可能有些同学还是会有疑问,没关系,之后的文章会教大家,这些是如何使用的。
再把GameFramework上的EditorResourceMode取消勾选。
做完这些,启动游戏。
显示AB包加载完成。(终于结束了,其实好多都是废话,写的多是希望更多人能看懂,那就下篇文章再见啦)