本章的目标并不是讨论如何将您的游戏与 Apple "StoreKit" API 集成。而是假设您已经通过本地代码插件与 "StoreKit" 集成。
Apple "StoreKit" 文档定义了四种可以通过“内购”过程销售的产品:
本章仅讲述第一例,主要侧重于可下载内容的概念。资源包是可下载内容的理想选择,包括两种情况:
请注意,AssetBundles 是一项仅适用于专业版的功能。(基础版)iOS 附加组件的用户将无法在游戏代码中使用资源包。
可下载内容拥有独立工程是不错的想法,可以让主应用程序自带的内容和稍后下载的内容之间有更好的分离。
请注意:任何包含可下载内容的游戏脚本必须存在于主要可执行文件中。(iOS 所有游戏脚本的所有调用都将提前编译成机械臂组件并包含在 XCode 工程中。)
@MenuItem ("Assets/Build AssetBundle From Selection - Track dependencies") static function ExportBundle(){ var str : String = EditorUtility.SaveFilePanel("Save Bundle...", Application.dataPath, Selection.activeObject.name, "assetbundle"); if (str.Length != 0){ BuildPipeline.BuildAssetBundle(Selection.activeObject, Selection.objects, str, BuildAssetBundleOptions.CompleteAssets, BuildTarget.iPhone); } }
注意:Apple 可能更改允许您写入数据的文件夹位置。始终检查 Apple 文件以确认您的应用程序符合要求。以下是 2013 年年初正确的建议:
var download : WWW; var url = "http://somehost/somepath/someassetbundle.assetbundle"; download = WWW.LoadFromCacheOrDownload (url, 0); yield download; assetBundle = download.assetBundle; if (assetBundle != null) { // Alternatively you can also load an asset by name (assetBundle.Load("my asset name")) var go : Object = assetBundle.mainAsset; if (go != null) instanced = Instantiate(go); else Debug.Log("Couldn't load resource"); } else { Debug.Log("Couldn't load resource"); }
库 (Library)
文件夹中,并设置有无备份 (No Backup) 标记。这意味着 OS 不会意外删除这些文件,且这些文件不会备份到 iCloud。将缓存大小限制保持较低水平是不错的想法。这可以防止您的应用程序占用所有的设备磁盘空间。
新 WWW(url)
使用定期 WWW 下载,然后使用 .NET 文件 API 将下载的文件保存到磁盘。可以将需要的文件保存至 Application.temporaryCachePath(库 (Library)/类 (Caches),由 OS 清理)文件夹或者 Application.persistentDataPath(文件,不会由 OS 清理)文件夹。请务必通过 iPhone.SetNoBackupFlag 在这些文件上设置无备份标记,防止其备份至 iCloud。注意:未设置此标记可能导致应用程序提交至 App Store 时被拒绝。如需在将来重新使用这些文件,通过 WWW 类和 file:///pathtoyourapplication/Library/savedassetbundle.assetbundle
加载即可。示例缓存代码如下:// Code designed for caching on iPhone, cachedAssetBundle path must be different when running in Editor // See code snippet above for getting the path to your Library/Caches folder private var cachedAssetBundle : String = Application.temporaryCachePath + "/savedassetbundle.assetbundle"; var cache = new System.IO.FileStream(cachedAssetBundle, System.IO.FileMode.Create); cache.Write(download.bytes, 0, download.bytes.Length); cache.Close(); iPhone.SetNoBackupFlag(cachedAssetBundle); Debug.Log("Cache saved: " + cachedAssetBundle);
Info.plist
文件设置 UIFileSharingEnabled
为 true,您将可以从 iTunes 访问文件 (Documents) 文件夹。注意,文件 (Documents) 内容已缓存至 iCloud,因此这不是保存已发布程序资源包的位置。查阅 Apple iOS 文档中的文件系统基础知识。
Page last updated: 2013-06-28