找回密码
 注册帐号

扫一扫,访问微社区

应用程序准备“内购”

2015-1-8 17:41| 发布者: 杨炎| 查看: 4166| 评论: 0|原作者: 蛮牛|来自: unity3d脚本manual

摘要: 应用程序准备“内购”本章的目标并不是讨论如何将您的游戏与 apple "storekit" api 集成。而是假设您已经通过本地代码插件与 "storekit" 集成。apple "storekit" 文档定义了四种可以通过“内购”过程销售的产品:内 ...

应用程序准备“内购”

本章的目标并不是讨论如何将您的游戏与 apple "storekit" api 集成。而是假设您已经通过本地代码插件与 "storekit" 集成。

apple "storekit" 文档定义了四种可以通过“内购”过程销售的产品

内容 (content)

功能 (functionality)

服务 (services)

认购 (subscriptions)

本章仅讲述第一例,主要侧重于可下载内容的概念。资源包是可下载内容的理想选择,包括两种情况:

如何导出ios 上使用的资源包

如何在 ios 上下载和缓存资源包

请注意,assetbundles 是一项仅适用于专业版的功能。(基础版)ios 附加组件的用户将无法在游戏代码中使用资源包。

导出资源供 ios 使用

可下载内容拥有独立工程是不错的想法,可以让主应用程序自带的内容和稍后下载的内容之间有更好的分离。

请注意:任何包含可下载内容的游戏脚本必须存在于主要可执行文件中。(ios 所有游戏脚本的所有调用都将提前编译成机械臂组件并包含在 xcode 工程中。)

在工程视图内创建编辑器 (editor)文件夹。

在此处创建exportbundle.js脚本,并写入以下代码:

@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);

}

}

设计必须作为预设下载的对象。

选择一个需要输出的预设,点击鼠标右键。

如果正确地完成了开始两个步骤,就可以看见build assetbundle from selection - track dependencies内容菜单项。

如果想要包含该资源使用的所有内容,选中此菜单项。

此时将显示保存对话框,输入想要的资源包文件名称。将自动添加.assetbundle扩展名。unity ios 运行时间仅接受使用相同版本的 unity 编辑器构建的资源包作为最终应用程序。参阅buildpipeline.buildassetbundle,了解更多详细信息。

在 ios 上下载资源包

注意:apple 可能更改允许您写入数据的文件夹位置。始终检查 apple 文件以确认您的应用程序符合要求。以下是 2013 年年初正确的建议:

资源包可以通过使用www 类下载和加载,并实例化一个主资源。建议使用loadfromcacheordownload方法下载资源包。以下代码示例显示了如何进行这一操作:

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");

}

下载的资源包文件将保存在 ios 应用程序沙盒的库 (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);

注意:如果启用了文件共享,可以从文件 (documents) 文件夹测试读取文件。在info.plist文件设置uifilesharingenabled为 true,您将可以从 itunes 访问文件 (documents) 文件夹。注意,文件 (documents) 内容已缓存至 icloud,因此这不是保存已发布程序资源包的位置。查阅 apple ios 文档中的文件系统基础知识。

相关阅读

文章点评
相关文章