开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2006

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 1906|回复: 19

[海莉zhe] 【知识摘录】 Unity3D AssetBundle资源加载-IOS (二)

[复制链接]  [移动端链接]
排名
936
昨日变化

57

主题

191

帖子

2282

积分

Rank: 9Rank: 9Rank: 9

UID
76890
好友
55
蛮牛币
3295
威望
0
注册时间
2015-3-4
在线时间
790 小时
最后登录
2017-12-12

专栏作家

发表于 2017-1-11 10:40:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 海莉zhe 于 2017-1-11 10:35 编辑

    今天小编继续之前的AssetBundle的分享,在IOS上如何打包Assetbundle和加载Assetbundle资源,我们知道有很多类似的文章,但是还是想简单和大家一起学习一下,希望对一些刚刚学习unity3d的同学有帮助。
   好吧!废话不多讲,我直接上图上操作哈!

   1.首先还是新建一个unity3d项目,导入需要资源文件,我这边导入一个asset store 模型插件unity-chan资源。

   2.第一步,我们先创建打包AssetBundle 的环境的,项目需要一个内置的文件夹Editor (必须的,这是为了可以在项目编辑器中打包AssetBundle资源),并且把AssetBundleEditor.cs组件类放在该文件下面。 [ 需要注意的是 :不同的平台参数是不一样的,IOS平台上Assetbundle打包时需要使用 BuildTarget.iPhone 参数。]
   1.png

   3.png
    AssetBundleEditor.cs 代码如下:
   
[C#] 纯文本查看 复制代码
using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;

public class AssetBundleEditor : Editor 
{

        public static string sourcePath = Application.dataPath + "/Resource";
        private static string AssetBundlesOutputPath = Application.dataPath + "/StreamingAssets";

        [MenuItem("AssetBundles/BuildAssetBundle")]
        public static void BuildAssetBundle()
        {
                string outputPath = Path.Combine(AssetBundlesOutputPath, Platform.GetPlatformFolder(BuildTarget.iOS));
                if (!Directory.Exists(outputPath))
                {
                        Directory.CreateDirectory(outputPath);
                }

                //根据BuildSetting里面所激活的平台进行打包 设置过AssetBundleName的都会进行打包
                BuildPipeline.BuildAssetBundles("Assets/StreamingAssets/IOS",BuildAssetBundleOptions.CollectDependencies, BuildTarget.iOS);

                AssetDatabase.Refresh();

                Debug.Log("打包完成");

        }
}

public class Platform
{
        public static string GetPlatformFolder(BuildTarget target)
        {
                switch (target)
                {
                case BuildTarget.Android:
                        return "Android";
                case BuildTarget.iOS:
                        return "IOS";
                case BuildTarget.StandaloneWindows:
                case BuildTarget.StandaloneWindows64:
                        return "Windows";
                case BuildTarget.StandaloneOSXIntel:
                case BuildTarget.StandaloneOSXIntel64:
                case BuildTarget.StandaloneOSXUniversal:
                        return "OSX";
                default:
                        return null;
                }
        }
}

   3.第二步,我们把打包好的AssetBundle资源解包出来,现在在场景中新建一个LoadAssetBundle的对象,实现加载asset bundle资源的脚本。
    LoadAssetBundle.cs 代码如下:
   
[C#] 纯文本查看 复制代码
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class LoadAssetBundle : MonoBehaviour
{

        public  string PathURL;
        public GameObject CurrentObj;

        void Start()
        {
                #if UNITY_IPHONE  
                PathURL = "file://"+Application.dataPath + "/Raw/IOS";  
                #elif UNITY_STANDALONE_WIN || UNITY_EDITOR  
                PathURL = "file://"+Application.streamingAssetsPath+"/IOS";
                #endif  

        }

        void OnGUI()
        {
                if(GUI.Button(new Rect(100,100,100,100),"加载美少女"))
                {
                        StartCoroutine (GetAssetBundleObj("girl_001",PathURL));
                }
        }

        public  IEnumerator GetAssetBundleObj(string objName,string path="")
        {
                string filePath = System.IO.Path.Combine (path,objName);

                WWW w = new WWW(filePath);         //利用www类加载
                yield return w;
                AssetBundle curBundleObj = w.assetBundle;     //获得AssetBundle

                AssetBundleRequest obj = curBundleObj.LoadAssetAsync(objName, typeof(GameObject));    //异步加载GameObject类型
                yield return obj;
                CurrentObj = Instantiate(obj.asset) as GameObject;

                yield return null;
                curBundleObj.Unload(false);     //卸载所有包含在bundle中的对象,已经加载的才会卸载
                w.Dispose();
        }

}


   4.其实从运行项目的时候,我们会发现模型的材质加载不正常,它丢失了材质,然后我们找到的解决的方法是在Edit->Project Setting->Graphics 设置中的Always Include Shaders 中增加模型的Shader,Shader配置好以后,记得重新AssetBundle打包模型。
  
    4_0.png

    4_1.png

    4_2.png
  
   5.好吧,我们Build一个版本在真机上,这个涉及到IOS 开发部署流程,有兴趣的同学可以去研究一下,而我这边直接操作啦!
  
   5.0 首先BuildSetting 切换平台到IOS;
       5_0.png
   5.1 直接在真机上的效果。


       5_1.png

      最后,我们来看一下www访问方式:

  (1).非缓存方式:WWW w=new WWW(url:string);
        通过创建一个WWW实例来对AssetBundle文件下载,下载后的AssetBundle文件将不会进入Unity的缓存区。

  (2)缓存方式:WWW w=WWW.LoadFromCacheOrDownload(url:string,version:int);   
       下载后的AssetBundle会自动被保存到Unity引擎的缓存区内,该方法是Unity推荐的AssetBundle下载方式。下载AssetBundle的时候,该接口会先在本地缓存中查找该文件,看其之前是否被下载过,如果下载过,则直接从缓存中加载,如果没有,则从服务器尽享下载。这样做的好处是可以节省AssetBundle文件的下载时间,从而提高游戏资源的载入速度(还可以节省下载流量)。

        注意:但是WWW.LoadFromCacheOrDownload(url:string,version:int)在测试情况下你可能会频繁的打包生成Assetbundle,如果忘记改版本号的话可能会读取之前的缓存,可能就会看不到新的效果,所以建议在bunild Assetbundle的时候强制清空一下缓存。
      Caching.CleanCache();

  学习交流群:575561285

评分

参与人数 3鲜花 +30 收起 理由
pilibengpa + 5 很给力!
一剑飙血 + 5 赞一个!
仅为年时 + 20 很给力!

查看全部评分


回复

使用道具 举报

5熟悉之中
969/1000
排名
3760
昨日变化
4

0

主题

480

帖子

969

积分

Rank: 5Rank: 5

UID
156480
好友
0
蛮牛币
1594
威望
0
注册时间
2016-7-12
在线时间
179 小时
最后登录
2017-11-27
发表于 2017-1-11 13:40:07 | 显示全部楼层
66666666666

回复

使用道具 举报

7日久生情
2024/5000
排名
1457
昨日变化
2

9

主题

745

帖子

2024

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
68430
好友
3
蛮牛币
7595
威望
0
注册时间
2015-1-14
在线时间
534 小时
最后登录
2017-12-13
发表于 2017-1-11 14:27:14 | 显示全部楼层
蛮好的·~~~

回复

使用道具 举报

7日久生情
2021/5000
排名
627
昨日变化

1

主题

532

帖子

2021

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
111260
好友
0
蛮牛币
7317
威望
0
注册时间
2015-6-30
在线时间
344 小时
最后登录
2017-12-4
发表于 2017-1-11 14:42:56 | 显示全部楼层

蛮好的·~~~

回复

使用道具 举报

7日久生情
3198/5000
排名
90
昨日变化

0

主题

392

帖子

3198

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
239
好友
4
蛮牛币
5778
威望
0
注册时间
2013-6-6
在线时间
668 小时
最后登录
2017-12-13
发表于 2017-1-12 08:46:46 | 显示全部楼层
6666666666666666666666666

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1263/1500
排名
1499
昨日变化
6

4

主题

205

帖子

1263

积分

Rank: 6Rank: 6Rank: 6

UID
81888
好友
2
蛮牛币
6947
威望
0
注册时间
2015-3-19
在线时间
370 小时
最后登录
2017-12-13
发表于 2017-1-12 09:33:05 | 显示全部楼层
辛苦啦 蛮好的

回复

使用道具 举报

7日久生情
2590/5000
排名
191
昨日变化

2

主题

143

帖子

2590

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
40098
好友
0
蛮牛币
13086
威望
0
注册时间
2014-8-15
在线时间
653 小时
最后登录
2017-11-25
QQ
发表于 2017-1-12 11:25:08 | 显示全部楼层
#在这里快速回复#但是WWW.LoadFromCacheOrDownload(url:string,version:int)在测试情况下你可能会频繁的打包生成Assetbundle,如果忘记改版本号的话可能会读取之前的缓存,

回复 支持 反对

使用道具 举报

3偶尔光临
214/300
排名
10236
昨日变化
10

0

主题

51

帖子

214

积分

Rank: 3Rank: 3Rank: 3

UID
156414
好友
1
蛮牛币
327
威望
0
注册时间
2016-7-11
在线时间
85 小时
最后登录
2017-12-8
发表于 2017-1-12 17:30:15 | 显示全部楼层

辛苦啦 蛮好的

回复

使用道具 举报

排名
40323
昨日变化
31

0

主题

7

帖子

18

积分

Rank: 1

UID
10578
好友
0
蛮牛币
24
威望
0
注册时间
2013-12-18
在线时间
8 小时
最后登录
2017-1-20
发表于 2017-1-13 08:54:04 | 显示全部楼层
辛苦了 学习一下

回复

使用道具 举报

4四处流浪
399/500
排名
5628
昨日变化
3

0

主题

60

帖子

399

积分

Rank: 4

UID
118900
好友
0
蛮牛币
1223
威望
0
注册时间
2015-8-20
在线时间
145 小时
最后登录
2017-4-26
发表于 2017-1-14 10:05:04 | 显示全部楼层
66666666666

回复

使用道具 举报

7日久生情
2062/5000
排名
17951
昨日变化
11

2

主题

1723

帖子

2062

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
185807
好友
0
蛮牛币
2701
威望
0
注册时间
2016-11-22
在线时间
313 小时
最后登录
2017-12-13
发表于 2017-1-14 15:43:39 | 显示全部楼层
学习一下

回复

使用道具 举报

0

主题

3

帖子

3

积分

Rank: 1

UID
202505
好友
0
蛮牛币
-2
威望
0
注册时间
2017-1-16
在线时间
0 小时
最后登录
2017-1-16
发表于 2017-1-16 22:38:29 | 显示全部楼层
!!!!!!ohoh

回复

使用道具 举报

6蛮牛粉丝
1154/1500
排名
1905
昨日变化
2

1

主题

84

帖子

1154

积分

Rank: 6Rank: 6Rank: 6

UID
112848
好友
0
蛮牛币
3906
威望
0
注册时间
2015-7-9
在线时间
483 小时
最后登录
2017-5-12
发表于 2017-1-17 16:50:04 | 显示全部楼层
6666666666666666

回复 支持 反对

使用道具 举报

7日久生情
2100/5000
排名
761
昨日变化
6

0

主题

318

帖子

2100

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
8899
好友
0
蛮牛币
3268
威望
0
注册时间
2013-11-25
在线时间
736 小时
最后登录
2017-12-13
发表于 2017-3-7 01:20:26 | 显示全部楼层
谢谢分享                                 

回复 支持 反对

使用道具 举报

5熟悉之中
893/1000
排名
2908
昨日变化
4

3

主题

170

帖子

893

积分

Rank: 5Rank: 5

UID
51046
好友
3
蛮牛币
1604
威望
0
注册时间
2014-10-25
在线时间
314 小时
最后登录
2017-12-13
发表于 2017-3-9 10:33:11 | 显示全部楼层
66666666666666666666666

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表