Powerful Store manager for Unity project. You have codeless products management system, where you can create in-game products. Create all currencies with custom names and icons. Each product has price in single or multiple in-game currencies. Ability to create bundle of different products and sell them in single purchase. Any product can be easily swapped to IAP or back to in-game product. Fully supported IAP for iOS and Android out of the box, other platforms supported also, just need to extend fram base class and add needed to you code.
- ✔️ add custom currencies
- ✔️ item price in multiple currencies
- ✔️ item categorization
- ✔️ in-app purchases supported for iOS and Android
- ✔️ currencies management
- ✔️ pack of multiple products by single purchase
- ✔️ pack of multiple currencies by single purchase
- ✔️ drawer for showing items in Unity UI with ability to override for any other UI system
- ✔️ drawer adapter for showing all items from specific category in Unity UI with ability to override for any other UI system
- Install ODIN Inspector
- Install OpenUPM-CLI
- Open command line in Unity project folder
openupm add extensions.unity.iap.store
- Install ODIN Inspector
- Add this code to
/Packages/manifest.json
{
"dependencies": {
"extensions.unity.iap.store": "4.12.2",
},
"scopedRegistries": [
{
"name": "package.openupm.com",
"url": "https://package.openupm.com",
"scopes": [
"extensions.unity",
"com.cysharp.unitask",
"com.neuecc.unirx"
]
}
]
}
Override at least abstract method. You should take of saving your data in persistent memory. There are basic methods required to implement in the example below.
using System;
using System.Collections.Generic;
using Sirenix.Serialization;
using UnityEngine;
using UniRx;
using Project.Store;
using BigInt = System.Numerics.BigInteger;
[CreateAssetMenu(fileName = "MyStore", menuName = "Store/MyStore")]
public class MyStore : StoreSO
{
[OdinSerialize, NonSerialized]
public ReactiveProperty<BigInt> balance = new ReactiveProperty<BigInt>();
public override IObservable<Price> OnBalanceChanged(string currency)
{
return balance.Select(x => new Price(currency, x));
}
public override BigInt GetBalance(string currency)
{
return balance.Value;
}
protected override void SpendBalance(string currency, BigInt amount)
{
balance.Value -= amount;
}
protected override void ApplyPurchase(List<IStoreSellable> sellables)
{
// Apply purchase here
}
}
Create instance and do setup. You can add as many currencies as needed. Also you can use it without currencies at all, if you just need to handle in-app purchases.
This system is quite independent, but you need to show sellable items for a user, to make ability for a user to buy them. There are multiple ways to do that.
- create prefab for drawing UI element which represent single item for selling. If you need you can use multiple prefabs for different reasons in different places
- add
StoreSellableDrawer_UGUI
component to the prefab - bind all required elements to the component
It can be used for showing single sellable item.
Adapter generates multiples items, very easy to setup all of them from single place with small amount of setup steps.
StoreCategoryAdapter
- shows list of sellable items from specific categoryStoreCustomAdapter
- shows custom list of sellable items- Or create your own StoreAdapter, for that need to extand from
StoreAdapter
. Also you may create custom StoreSellableDrawer for any UI system in case if you don't use Unity UI.
CurrencyBalanceDrawer_UGUI_TMP
show currency balance and refreshes it when it changed.
That is easy. Just create any gameObject with Text component and add PriceDrawer
on it.
- to execute
Purchase
action without sellable item drawer and/or adapter useSimplePurchaser
- to restore non-consumable in-app purchases use
SimpleInAppPurchaseRestorer