Unity×NCMBで、ガチャ機能を実装したい

実現したいこと

・NCMBのScript機能を使って、ソシャゲのガチャ機能を作りたいです

前提

・gachaIdとuserIdは正しい文字列で取得できています。
・ニフクラのGachaクラスには既にデータを格納してあります。
・APIキーCLIキーには、正しい文字列を入力しています。

発生している問題・エラーメッセージ

C#のgachaLogicScriptとqueryには正しい情報が格納されているのですが、ExcuteAsync()がelseを通ってしまい、自分ではもう何もわからず手詰まりな状態です。

E500001: UnityEngine.Debug:Log(Object) <>c__DisplayClass10_0:<executeGachaLogicScriptCoroutine>b__0(Byte[], NCMBException) (at Assets/Script/Test/GachaClick.cs:74) NCMB.Internal.<SendRequest>d__37:MoveNext() (at Assets/NCMB/Script/NCMBConnection.cs:461) UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)

該当のソースコード

C#

1IEnumerator executeGachaLogicScriptCoroutine(string gachaId, NCMBUser currUser)2 {3 scriptResponse.pointDiff = 0;4 scriptResponse.moneyDiff = 0;5 6 NCMBScript gachaLogicScript = new NCMBScript("gacha.js", NCMBScript.MethodType.GET);7 Dictionary<string, object> query = new Dictionary<string, object>()8 {9 {"gachaId", gachaId },10 {"userId", currUser.ObjectId } 11 };12 13 bool isCalculating = true;14 gachaLogicScript.ExecuteAsync(null, null, query, (byte[] result, NCMBException e) =>15 {16 if (e == null)17 {18 Debug.Log("aaaa");19 string resultStr = Encoding.ASCII.GetString(result);20 scriptResponse = JsonUtility.FromJson<ScriptResponse>(resultStr);21 }22 else { Debug.Log(e.ErrorCode + ":" + e.ErrorMessage); } //74行目23 isCalculating = false;24 });25 yield return new WaitWhile(() => { return isCalculating; });26 }

gacha.js

1module.exports = function(req, res) 2{ 3 var NCMB = require('ncmb'); 4 const APL_KEY = "KEY"; 5 const CLI_KEY = "KEY"; 6 var ncmb = new NCMB(APL_KEY, CLI_KEY); 7 8 var gachaId = req.query.gachaId; 9 if(gachaId == null){ 10 res.status(400) 11 .json({"message":"BadRequest (No gachaId)"}) 12 } 13 14 var gachaClass = ncmb.DataStore("Gacha"); 15 gachaClass.equalTo("objectId", gachaId) 16 .fetchAll() 17 .then(function(results){ 18 if(results.length == 0){ 19 res.status(404) 20 .json({"message":"Not Found(confirm objectId)"}); 21 } 22 23 //ガチャ機能本体 24 var rewardNum = selectReward(results[0].probability); 25 if(rewardNum == -1){ 26 res.status(500) 27 .json({"message":"Probabilities of rewards must be defind as Array(length=2)"}); 28 } 29 30 //ガチャの結果 31 var moneyDiff = -results[0].cost; 32 var pointDiff = results[0].rewards[rewardNum]; 33 34 35 var userId = req.query.userId; 36 if(userId == null){ 37 // ユーザIDが渡されていない 38 res.status(400) 39 .json({"message":"BadRequest (No userId)"}) 40 } 41 42 }); 43}; 44 45function selectReward(Probabilities) 46{ 47 if(!(Array.isArray(Probabilities))) return -1; 48 if(Probabilities.length != 2) return -1; 49 50 const p0 = Number(Probabilities[0]); 51 const p1 = Number(Probabilities[1]); 52 53 var randNum = Math.random(); 54 if(randNum <= p0) return 0; 55 else if(randNum <= p0 + p1) return 1; 56 else return 2; 57}

コメントを投稿

0 コメント