Используйте Currency Override Save Key, чтобы бандл мог списывать валюту по ключу сохранения Money.SaveKey.
- Пустой ключ: используется валюта магазина по умолчанию.
- Непустой ключ:
Shopищет кошелёк черезMoney.FindBySaveKey(key)и списывает цену из него. - Поле GameObject
Currency Overrideудалено: бандл — этоScriptableObject, поэтому он выбирает валюту только по ключу сохранения.
Назначение: ScriptableObject для бандла — набора ShopItemData, продающегося за одну цену. На успешной покупке Shop добавляет все предметы бандла в ShopProfileData.OwnedItemIds и (опционально) выдаёт каждому соответствующий InventoryItemData в подключённый инвентарь.
Доступно с версии 8.5.0.
Right Click > Create > Neoxider > Shop > Shop Bundle Data.- Задайте
Id(или оставьте пустым — авто-fill изnameBundle). - Заполните
_items— массивShopItemData, которые игрок получит за покупку. - Назначьте
_bundlePrice. - Добавьте ассет в массив
_bundlesконтроллера Shop.
| Поле | Описание |
|---|---|
_id |
Стабильный идентификатор бандла. Авто-fill из _nameBundle. |
_nameBundle / _description |
Текст для UI. |
_sprite / _icon |
Превью и иконка. |
_bundlePrice |
Цена бандла. 0 = бандл бесплатный. |
_isSinglePurchase |
Если true, бандл попадает в OwnedBundleIds и больше не покупается. |
_items |
Массив ShopItemData — что игрок получит. Каждый вложенный предмет может быть привязан к инвентарю через ShopInventoryGrantBridge. |
_currencyOverrideSaveKey |
Опциональный ключ Money.SaveKey. Если задан, бандл списывает валюту из найденного Money; если пустой, используется default moneySpendSource магазина, затем Money.I. |
Shop.BuyBundle(id):
- Если режим
_purchaseFlow=BrowseилиEquipOnly— игнорируется. - Если бандл
isSinglePurchaseи уже вOwnedBundleIds— игнорируется. - Списание
_bundlePriceчерез резолвнутыйIMoneySpend(_currencyOverrideSaveKeyприоритетнее default). - Для каждого
ShopItemDataиз_items: еслиisSinglePurchase— добавление вOwnedItemIds; поднимаетсяOnPurchasedId(item.Id). - После выдачи всех предметов —
OnPurchasedBundle(bundle). - Если на сцене есть
ShopInventoryGrantBridgeс маппингом для соответствующихShopItemData.Id, он поймает каждоеOnPurchasedIdи выдаст инвентарю настроенные предметы.
ShopBundleData bundle = ...;
bundle.Id;
bundle.price;
bundle.isSinglePurchase;
foreach (var item in bundle.Items) { ... }
bundle.CurrencyOverrideSaveKey;