0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【GS2】Showcaseの購入後の処理が変わったのでメモ

Posted at

起こったこと

久方ぶりに「GS2 SDK for Unity」のバージョンアップを行いました。
(2023.8.13へバージョンアップ)

すると…ガチャ機能で使用しているShowcaseの処理で、今まで使用していた以下の処理でコンパイルエラーが発生するように。

/// <summary>
        /// 抽選商品を購入する
        /// Purchase Lottery Items
        /// </summary>
        public IEnumerator Buy(
            Gs2Domain gs2,
            GameSession gameSession,
            string showcaseNamespaceName,
            string showcaseName,
            string displayItemId,
            AcquireInventoryItemEvent onAcquireInventoryItem,
            ErrorEvent onError,
            List<EzConfig> config
        )
        {
            var tempConfig = new List<EzConfig>(config);
            
            void LotteryResult(
                string _namespace,
                string lotteryName,
                DrawnPrize[] prizes
            )
            {
                // 抽選処理の結果を取得
                // Obtain the results of the lottery process

                // 抽選で獲得したアイテム
                // Items won in the lottery
                var DrawnPrizes = new List<EzDrawnPrize>();
                foreach (var prize in prizes)
                {
                    var item = EzDrawnPrize.FromModel(prize);
                    DrawnPrizes.Add(item);
                }

                onAcquireInventoryItem.Invoke(
                    DrawnPrizes
                );
            }
            
            // 抽選結果取得コールバックを登録
            // Register lottery result acquisition callback
            Gs2Lottery.Domain.Gs2Lottery.DrawnResult = LotteryResult; ※ここと
            
            // 商品の購入をリクエスト
            // Request to purchase an item
            var domain = gs2.Showcase.Namespace(
                namespaceName: showcaseNamespaceName
            ).Me(
                gameSession: gameSession
            ).Showcase(
                showcaseName: showcaseName
            );
            var future = domain.Buy( ※ここでエラー
                displayItemId: displayItemId,
                config: tempConfig.ToArray()
            );
            yield return future;
            if (future.Error != null)
            {
                onError.Invoke(
                    future.Error,
                    null
                );
            }
        }

原因

SDKバージョンアップ後、Gs2Lottery.Domain.Gs2LotteryではDrawnResultが消えてDrawByUserIdCompleteに変更、
Buyを呼び出すメソッドがEzShowcaseGameSessionDomainではなくEzDisplayItemGameSessionDomainへ移動となりました。

SDK新バージョン用に以下修正


 UnityEvent<string, DrawByUserIdRequest, DrawByUserIdResult> LotteryResult; //UnityEvent用に追加

 /// <summary>
 /// 抽選商品を購入する
 /// Purchase Lottery Items
 /// </summary>
 public async UniTask BuyAsync(
     Gs2Domain gs2,
     GameSession gameSession,
     string showcaseNamespaceName,
     string showcaseName,
     string displayItemId,
     AcquireInventoryItemEvent onAcquireInventoryItem,
     ErrorEvent onError,
     List<EzConfig> config
 )
 {
     var tempConfig = new List<EzConfig>(config);
     // 抽選処理の結果を取得
     LotteryResult.RemoveListener(DrawResult);
     /// <summary>
     /// ガチャ結果を取得した後の処理
     /// </summary>
     /// <param name="arg0"></param>
     /// <param name="request"></param>
     /// <param name="result"></param>
     void DrawResult(string arg0, DrawByUserIdRequest request, DrawByUserIdResult result)
     {
         var DrawnPrizes = new List<EzDrawnPrize>();
         DrawnPrize[] prizes = result.Items;
         foreach (var prize in prizes)
         {
             var item = EzDrawnPrize.FromModel(prize);
             DrawnPrizes.Add(item);
         }

         onAcquireInventoryItem.Invoke(
            DrawnPrizes
        );
     }
     LotteryResult.AddListener(DrawResult);

     // 抽選結果取得コールバックを登録
     // Register lottery result acquisition callback
     Gs2.Gs2Lottery.Domain.Gs2Lottery.DrawByUserIdComplete = LotteryResult;

     // 商品の購入をリクエスト
     // Request to purchase an item
     var domain = gs2.Showcase.Namespace(
         namespaceName: showcaseNamespaceName
     ).Me(
         gameSession: gameSession
     ).Showcase(
         showcaseName: showcaseName
     ).DisplayItem(
         displayItemId: displayItemId
     ); //DisplayItemまで設定

     try
     {
         //購入
         var future = await domain.BuyAsync(
             quantity: null,
             config: tempConfig.ToArray()
         );

         if (future == null)
         {
             UIManager.Instance.OpenDialog1("エラー", "Failed");
             UIManager.Instance.CloseProcessing();
         }

         UIManager.Instance.CloseProcessing();
          
     }
     catch(TransactionException te)
     {
         onError.Invoke(te, null);
         await te.Retry();
         return;
     }
     catch (Gs2Exception e)
     {
         onError.Invoke(e, null);
         return;
     }
 }

domainに入れている部分の処理は、以下ドキュメント側も更新されていました。
https://docs.gs2.io/ja/api_reference/showcase/game_engine/#buy

見慣れない型が引数に追加されたUnityEventに代わっていたり、
メソッドの実装箇所が変わったりで最初は焦りましたがドキュメント読み返したり実装を追うことでなんとか元の動作に戻せました。

バージョンアップ前に変更点を要確認。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?