В этой главе не описывается, как интегрировать вашу игру с Apple StoreKit API. Предполагается, что у вас уже есть интеграция с StoreKit через плагин собственного кода.
Документация Apple StoreKit определяет четыре типа продуктов, которые можно продавать с помощью процесса Покупка в приложении:
- Content
- Functionality
- Services
- Subscriptions
В этой главе рассматривается только первый случай и основное внимание уделяется концепции загружаемого контента. AssetBundle рекомендуются для реализации загружаемого контента в Unity, и здесь будет рассмотрено как создание, так и использование AssetBundle во время выполнения.
Экспорт ваших ресурсов для использования на iOS
Иногда полезно поддерживать отдельные проекты для основного приложения и загружаемых пакетов AssetBundles, которые оно будет использовать. Однако следует отметить, что все скрипты, на которые ссылаются объекты в AssetBundle, должны присутствовать в основном исполняемом файле игры. Проект, который вы используете для создания AssetBundle, должен иметь iOSмобильную операционную систему Apple. Подробнее
Увидеть в Словарь выбранную цель сборки, поскольку содержимое файлов AssetBundle не совместимость между iOS и другими платформами.
AssetBundles создаются с помощью редактора скриптовфрагмента кода, который позволяет создавать собственные компоненты, запускать игровые события, изменять Свойства компонента с течением времени и реагировать на ввод пользователя любым удобным для вас способом. Подробнее
См. в Словарь — простой пример приведен ниже:
using UnityEngine;
using UnityEditor;
public class ExportBundle : MonoBehaviour {
[MenuItem ("Assets/Build AssetBundle From Selection - Track dependencies")]
static void DoExport() {
string str = 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);
}
}
}
Вы должны сохранить этот код в файле с именем ExportBundle и поместить его в папку с именем Editor (вы можете просто создать ее, если ее еще нет в проект). Сценарий добавит пункт меню под названием Build AssetBundle From Selection — Track dependencies в меню Assets в редакторе.
Контент, который вы хотите включить в комплект, должен быть подготовлен в виде готовых элементов. Выберите префаб в представлении «Проект», а затем выберите Assets > Build AssetBundle From Selection — Track dependencies (т. е. пункт меню, добавленный сценарием ExportBundle). Эта команда вызовет диалоговое окно сохранения, в котором вы сможете выбрать имя и расположение файла AssetBundle.
Загрузка ваших ресурсов на iOS
Примечание. Apple может изменить расположение папок, в которые вам разрешено записывать данные. Всегда проверяйте последнюю версию документации Apple, чтобы убедиться, что ваше приложение соответствует требованиям. Следующий совет был верным на начало 2018 года.
AssetBundles можно загрузить с помощью класса WWW, и после завершения переноса можно будет получить доступ к вложенным ресурсам. Рекомендуемый способ загрузки AssetBundle — использовать LoadFromCacheOrDownload, как показано в следующем примере:
IEnumerator GetAssetBundle() {
WWW download;
string url = "https://somehost/somepath/someassetbundle.assetbundle";
while (!Caching.ready)
yield return null;
download = WWW.LoadFromCacheOrDownload(url, 0);
yield return download;
AssetBundle assetBundle = download.assetBundle;
if (assetBundle != null) {
// Alternatively you can also load an asset by name (assetBundle.Load("my asset name"))
Object go = assetBundle.mainAsset;
if (go != null)
Instantiate(go);
else
Debug.Log("Couldn't load resource");
} else {
Debug.Log("Couldn't load resource");
}
}
Загруженные файлы набора ресурсов хранятся в папке Library изолированной программной среды приложения iOS, и для них установлен флаг Без резервного копирования. Это означает, что ОС не удалит эти файлы случайно, и эти файлы не будут скопированы в iCloud.
Если вам нужно выбрать, где именно хранится файл AssetBundle, вы можете использовать стандартную загрузку из WWW (т. е. просто использовать конструктор вместо LoadFromCacheOrDownload), а затем сохранить загруженные данные на диск с помощью файлового API .NET. Вы можете сохранить необходимые файлы в папку Application.temporaryCachePath (хранится в Library/Caches, которая регулярно очищается) ОС) или папку Application.persistentDataPath (хранится в Документах и не очищается ОС). Вы должны установить флаг No Backup для этих файлов с iOS.Device.SetNoBackupFlag, чтобы предотвратить их резервное копирование. в iCloud.
Примечание. Если вы не установите флажок Без резервного копирования, ваше приложение может быть отклонено при отправке в App Store.
Вы можете получить доступ к сохраненным файлам, создав объект WWW с URL-адресом в форме file:///pathtoyourapplication/Library/savedassetbundle.assetbundle
:-
string cachedAssetBundle = Application.temporaryCachePath + "/savedassetbundle.assetbundle";
System.IO.FileStream cache = new System.IO.FileStream(cachedAssetBundle, System.IO.FileMode.Create);
cache.Write(download.bytes, 0, download.bytes.Length);
cache.Close();
iOS.Device.SetNoBackupFlag(cachedAssetBundle);
Debug.Log("Cache saved: " + cachedAssetBundle);
Примечание. Вы можете проверить чтение сохраненных файлов в папке "Документы", если вы включите общий доступ к файлам (настройка UIFileSharingEnabled
значение true в вашем Info.plist
позволяет вам получить доступ к папке Documents из iTunes). Обратите внимание, что содержимое папки «Документы» кэшируется в iCloud, поэтому вам не следует использовать это место для хранения AssetBundles в окончательной сборке, которая будет отправлена. См. Основы файловой системы в документации Apple iOS. для получения дополнительной информации.