-
Ofereça conteúdo dentro do jogo com o StoreKit e o Background Assets
Simplifique seu desenvolvimento multiplataforma usando o Steam Asset Converter e um novo plug-in do Unity que ajuda você a oferecer compras dentro do app. Descubra como tornar seu jogo mais leve e proporcionar uma ótima experiência ao jogador com pacotes de recursos específicos para cada idioma, permitindo entregar apenas o que é necessário.
Capítulos
- 0:01 - Introduction
- 0:33 - Background Assets
- 1:35 - Localized asset packs
- 3:14 - Convert Steam depots to asset packs
- 4:15 - Unity plug-ins
- 5:52 - StoreKit and Background Assets sample code
- 8:25 - Game presence
- 9:10 - Next steps
Recursos
Vídeos relacionados
WWDC26
Meet with Apple
WWDC25
WWDC22
-
Buscar neste vídeo...
-
-
3:06 - Asset pack manifest for a localized asset pack
// Asset pack manifest { "assetPackID": "voice-english", "downloadPolicy": { /* … */ }, "language": "en-US", "sourceRoot": ".", "fileSelectors": [ /* … */ ], "platforms": [ /* … */ ] //… } -
3:27 - Convert a Steam depot to an asset pack manifest
# Convert a Steam depot to an asset pack manifest xcrun ba-package convert --asset-pack-id voice-english --l en-US --on-demand voice-english.vdf -o voice-english.json -
3:28 - Convert an asset pack manifest to an asset pack archive
# Convert an asset pack manifest to an asset pack archive xcrun ba-package voice-english.json -o voice-english.aar -
5:52 - Fetch and purchase products with the StoreKit plug-in
// Fetch and purchase products with the StoreKit plug-in using UnityEngine; using Apple.StoreKit; async void Start() { var products = await Product.FetchProducts(new[] { "com.thecoast.capecod" }); } -
6:01 - Fetch and purchase products with the StoreKit plug-in
// Fetch and purchase products with the StoreKit plug-in using UnityEngine; using Apple.StoreKit; async void Purchase(Product product) { var result = await product.Purchase(); if (result.Result == PurchaseResult.ResultEnum.Success && result.TransactionVerification.IsVerified) { // Unlock access to purchased content result.TransactionVerification.SafePayload.Finish(); } } -
6:23 - Listen for Transaction updates with the StoreKit plug-in
// Listen for Transaction updates with the StoreKit plug-in using UnityEngine; using Apple.StoreKit; public static class TransactionListener { public static void Initialize() => Transaction.Updates += OnUpdate; async void OnUpdate(VerificationResult<Transaction> result) { if (!result.IsVerified) return; var verifiedTransaction = result.SafePayload; // Consumables are not in CurrentEntitlements, so handle them inline if (verifiedTransaction.ProductType == ProductType.ProductTypeEnum.Consumable) { if (verifiedTransaction.RevocationDate != null) { // Revoke the consumable identified by verifiedTransaction.ProductId } else { // Grant access to the consumable } }else { // Non-consumables and subscriptions: re-read CurrentEntitlements as source of truth await foreach (var verificationResult in Transaction.GetCurrentEntitlements()) { if (!verificationResult.IsVerified) continue; // Grant access to the product } } verifiedTransaction.Finish(); } } -
7:13 - Download asset packs with the Background Assets plug-in
// Download asset packs with the Background Assets plug-in using Apple.BackgroundAssets; using UnityEngine; async void LoadTutorial(string language) { try { string assetPackId = $"tutorial-{language}"; AssetPackManifest manifest = await AssetPackManager.GetManifestAsync(); AssetPack assetPack = manifest.GetAssetPack(assetPackId); CancellationTokenSource tokenSource = new CancellationTokenSource(); _ = Task.Run(async () => { await foreach (AssetPackManager.DownloadStatusUpdate statusUpdate in AssetPackManager.DownloadStatusUpdatesAsync(assetPackId)) { // Update download progress in UI } }, tokenSource.Token); await AssetPackManager.EnsureLocalAvailabilityOfAssetPackAsync(assetPack); tokenSource.Cancel(); // Start tutorial with the locally available assets } catch (Exception exception) { // Handle the exception } }
-
-
- 0:01 - Introduction
New tools for building games on Apple platforms: updates to Background Assets, new Unity plug-ins for In-App Purchase, and ways to enhance your presence on the App Store and Apple Games app.
- 0:33 - Background Assets
Apple-Hosted Managed Background Assets save players time and storage by downloading asset packs only when needed. Now with Apple-hosting, up to 200 GB per app is included in the Developer Program.
- 1:35 - Localized asset packs
Localized asset packs greatly reduce the size of assets that players need to download by allowing the system to identify the player’s preferred language selected in Settings and only deliver assets for your game in that language.
- 3:14 - Convert Steam depots to asset packs
Learn how to bring your Steam depots into asset pack manifests and asset pack archives to ship along with your game on Apple platforms.
- 4:15 - Unity plug-ins
Two new Apple Unity plug-ins: Background Assets and StoreKit expose C# APIs that bridge to the native frameworks. Build and test with Xcode 27, Python 3, and Unity 2022 LTS or later.
- 5:52 - StoreKit and Background Assets sample code
Examples of how to use the C# version of the native StoreKit and Background Assets APIs in your game.
- 8:25 - Game presence
Make your game stand out with new visuals for your product page header and search results.
- 9:10 - Next steps
Ways to go further — upload localized asset packs in App Store Connect to reduce app size, adopt new Unity plug-ins, and highlight features with new image and video assets in the App Store and Apple Games app.