Unity3D 实现动态加载游戏资源
在 ash 时代,资源的动态加载非常的普遍,主要是受限于网速的快慢,我们在用 unity3d 制作在线项目的时候,不可避免的要考虑到优化加载
的问题,这篇文章算是比较好的经验之谈了,转来大家看看!用 Unity3D 制作基于 web 的网络游戏,不可避免的会用到一个技术-资源动态加载。
比如想加载一个大场景的资源,不应该在游戏的开始让用户长时间等待全部资源的加载完毕。应该优先加载用户附近的场景资源,在游戏的过程
中,不影响操作的情况下,后台加载剩余的资源,直到所有加载完毕。
本文包含一些代码片段讲述实现这个技术的一种方法。本方法不一定是最好的,希望能抛砖引玉。代码是 C#写的,用到了 Json,还有 C#的事件
机制。
在讲述代码之前,先想象这样一个网络游戏的开发流程。首先美工制作场景资源的 3D 建模,游戏设计人员把 3D 建模导进 Unity3D,托托拽拽编
辑场景,完成后把每个 gameobject 导出成 XXX.unity3d 格式的资源文件(参看 BuildPipeline),并且把整个场景的信息生成一个配置文件,
xml 或者 Json 格式(本文使用 Json)。最后还要把资源文件和场景配置文件上传到服务器,最好使用 CMS 管理。客户端运行游戏时,先读取服
务器的场景配置文件,再根据玩家的位置从服务器下载相应的资源文件并加载,然后开始游戏,注意这里并不是下载所有的场景资源。在游戏的
过程中,后台继续加载资源直到所有加载完毕。
一个简单的场景配置文件的例子:
MyDemoSence.txt
Json 代码:
{
"AssetList" : [{
"Name" : "Chair 1",
"Source" : "Prefabs/Chair001.unity3d",
"Position" : [2,0,-5],
"Rotation" : [0.0,60.0,0.0]
},
{
"Name" : "Chair 2",
"Source" : "Prefabs/Chair001.unity3d",
"Position" : [1,0,-5],
"Rotation" : [0.0,0.0,0.0]
},
{
"Name" : "Vanity",
"Source" : "Prefabs/vanity001.unity3d",
"Position" : [0,0,-4],
"Rotation" : [0.0,0.0,0.0]