本文 Game Framework 版本:3.1.1本文 Unity3D 版本:2017.3更多GF教程和实例:https://github.com/mutouzdl/gameframework_demo.git
转载请注明,原文地址:http://www.benmutou.com/archives/2615
文章来源:笨木头与游戏开发
关于AssetBundle的用法,官方已经有两篇文档了,我当然不会重复写的。
但是,对于AssetBundle新手来说,官方那两篇文档还少了几个细节,这几个细节可能会导致新手无法打包成功,所以我在这里以补充的角度和大家讲解一下AssetBundle(针对GF框架)的注意事项。
(另外,Demo8还没完成,因为有朋友问到了打包的问题,所以先研究这块了)
1.为什么打包后,场景加载不了
大家别笑,有位朋友问我,为什么打包成windows平台后,加载场景都失败了。
然后我觉得很奇怪,怎么会呢,后来我试了试…
啪啪啪,脸疼。
确实加载不了场景呢,呵呵。
原因很简单,在GameFramework框架中,所有的东西都是资源,包括场景。
所以,想要在打包后成功加载场景,就得把场景作为资源进行加载。
资源怎么加载?由于我也是GF的新手,目前我只知道通过AssetBundle打包资源,然后再加载。
2.AssetBundle是什么?
木头离开游戏行业2、3年了,Unity3D也一直都是业余在玩,所以,老实说,我压根没有用过AssetBundle。
最简单粗暴的理解就是,AssetBundle的作用是,把资源打包,然后可以动态加载,从而可以实现资源的热更新。
大家自行去学习AssetBundle,我就不误人子弟了。
3.AssetBundle Editor
关于GameFramework的AssetBundle打包方式,大家自行去看官方的文档,按照以下顺序:
http://gameframework.cn/archives/320 (使用AssetBundle编辑工具)
http://gameframework.cn/archives/356 (使用AssetBundle构建工具)
关于AssetBundle编辑工具,简单补充一下,左边是各个资源包,自己新建即可。
选中资源包后,中间的部分就是资源包的内容,内容从哪来?就是从右边的资源列表里来。
把你想添加的资源选中,然后点击"<<
"按钮就可以了。 由于场景和预制体没法打在一个包里,我在Demo里打了两个包:
4.AssetBundle Builder
关于就是这个构建工具了,大家打开的话,一定是报错的(除非你直接把StarForce项目拿过来用)。
大概是这样:
这个问题折腾了我2天(我每天只能在上班前和下班后分别研究50分钟,一天是两个50分钟)。
因为报错信息是一连串的,99.
9%都是同一条信息,导致我忽略了第一条:
似乎有某个程序集缺失了,要解决这个问题,有两个办法,第一个,建一个Editor的目录,然后随便建一个类。
然后就会生成这个带Editor名称的程序集了:
第二个办法是,将GameFramework\
Scripts\
Editor\
Misc目录下的Type.
cs文件的EditorAssemblyNames属性里的"Assembly-CSharp-Editor"注释掉。
然后就正常了。
剩下就按照官方文档来做就行了
5.初始化时,加载资源
资源打包好,并且拷贝到相应的目录后,并不代表结束了。
这点在官方文档里并没有提到,资源打包之后,是需要先加载再使用的。
大家别笑我,我只是以为框架有自动加载所需资源的功能而已…
好吧,你们笑就笑,但别捂肚子,我是认真的。
对于一开始就把所有资源都加载的游戏,很简单(需要实时加载的我就不演示了,没去研究)。
在初始场景里,先调用ResourceComponent的InitResources函数对资源进行初始化,初始化成功后会出发ResourceInitComplete事件。
在资源初始化后再进行我们的菜单场景(或其它你想进入的场景)即可。
protected override void OnEnter (ProcedureOwner procedureOwner) {
base.OnEnter (procedureOwner);
ResourceComponent Resource
= UnityGameFramework.Runtime.GameEntry.GetComponent<ResourceComponent> ();
// 初始化资源
Resource.InitResources ();
EventComponent Event
= UnityGameFramework.Runtime.GameEntry.GetComponent<EventComponent> ();
// 订阅资源初始化成功事件(记得在OnLeave函数里取消订阅,我就不演示了)
Event.Subscribe (ResourceInitCompleteEventArgs.EventId, OnResourceInitComplete);
}
OK,本Demo的注意事项已经说完了,具体请大家看代码。 特别提醒,如果你要在电脑上加载AB资源,则必须把GameFramework对象里的Editor Resource Mode的勾去掉:
6.唠叨一下
我研究这个问题也就花了2、3个小时,但是我写这篇文章,需要花一小时(有些文章会更久)。
希望大家也能有分享精神,解决了自己的问题的同时,能分享一下心得。
那样的话,在帮助了其他人的同时,自己也能梳理思路,何乐而不为呢。
我毕竟已经不在一线开发游戏了,在GameFramework框架上,不会给大家带来太多的帮助,只能给大家做个入门指引,仅此而已。
我研究这个框架的目的并不是要在实际项目中使用,说实话,我个人写的小游戏,压根用不上什么框架,我自己搭的搓框架就够用了。
我就是想学习一线高手的思想,但是…
我觉得很孤单…
我平时时间不多,没法一直关注官方群,所以大家在群里再怎么讨论,我都没法获得太多帮助(每天去翻聊天记录太耗时,还得筛选无效信息)。
我相信,和我一样的人,有很多…
真的希望大家可以戒掉群聊,多留点文章、issues,造福后人。
以上。