ios 上按需加载资源unity5上的实现

需求和应用场景:

应用场景一:初始安装包ipa包的大小,用户在初次下载的时候,只需要下载最小化的安装包,查看app或游戏的基础功能,然后在使用的过程中,再根据需要逐步下载。

应用场景二:在iOS平台上,同一时期会存在性能差异较大的硬件;对于游戏来说,将会根据不同硬件平台的需求,可以生成不同品质的资源,比如在最新发布的手机上使用最高品质的素材,而比较旧的机器上使用品质稍差的资源。来达到自适配。

使用局限性:

只能在iOS9之后的系统上才能使用。目前还是存在比较多,iOS7,8的使用设备。不过根据apple的更新发布节奏,等到再过一年,市面上的机型使用系统将基本上会使iOS9级之后的版本了。

XCode中直接使用:

在Xcode7中,已经有自带该功能,

一、先是开启On Demand Resource

二、给资源打tag

三、提交到app store服务器,将会自动做到根据tag将资源的分发


ios 上按需加载资源unity5上的实现_第1张图片


ios 上按需加载资源unity5上的实现_第2张图片



中文文档中有比较详细的说明:

iOS 按需加载中文文档

http://www.cocoachina.com/ios/20150615/12155.html

在Unity3d 5.2版本之后,引入了按需下载使用的功能。

最初需求来源:

该功能的最初需求来源是Apple TV,因为apple tvOS上的app安装大小最大不能超过200M,要根据使用的情况,要不断下载用到的资源或卸载掉不再使用的资源。

当前该功能在iOS手游上的应用不算常规化。但相信未来一定为成为一个很重要的功能。特别适合游戏的应用场景,随着玩家的不断升级的提升,不断的开始玩新玩法,根据需要就会从app store server下载后期所需资源。对于初次安装的用户来说,不用下载很大的安装包。将可以降低CPI的成本,提升转化率

unity3d 官方有提供一个demo

On Demand Resource


关键的部分的代码如下:

编辑器中功能

usingUnityEditor.iOS;

#if ENABLE_IOS_ON_DEMAND_RESOURCES

publicclassBuildResources

{

[InitializeOnLoadMethod]

staticvoidSetupResourcesBuild()

{

UnityEditor.iOS.BuildPipeline.collectResources+=CollectResources;

}

staticUnityEditor.iOS.Resource[]CollectResources()

{

returnnewResource[]

{

newResource("iOS","AssetBundles/iOS/iOS").AddOnDemandResourceTags("iOS"),

newResource("cube.unity3d","AssetBundles/iOS/cube.unity3d").AddOnDemandResourceTags("cube.unity3d"),

newResource("resource","path/to/resource.file").AddOnDemandResourceTags("resource_tag"),

};

}

}

#endif

运行时

usingUnityEngine.iOS;

// Coroutine that can be asynchronously executed with

StartCoroutine(LoadAsset("asset.data"));

publicstaticIEnumerator LoadAsset(stringresourceName)

{

// Create the request

varrequest=OnDemandResources.PreloadAsync(newstring[]{"resource_tag"

});

// Wait until request is completed

yieldreturnrequest;

// Check for errors

if(request.error!=null)

thrownewException("ODR request failed: "+request.error);

// Get path to the resource and use it. Note that at the moment the only API

// that can load ODR or sliced resources is AssetBundle.CreateFromFile()

varpath="res://"+resourceName;

varbundle=AssetBundle.CreateFromFile(path);

// Call Dispose() when resource is no longer needed. This will release a

pin on ODR resource.

request.Dispose();

}

注意点:

如果是需要app slicing模式的话,在打ab资源的时候,需要设置该选项UncompressedAssetBundle

options |= BuildAssetBundleOptions.UncompressedAssetBundle;

demo 链接

你可能感兴趣的:(ios 上按需加载资源unity5上的实现)