收藏
回答

Unity调用WX.cloud.CallFunction的data参数怎么填?

        public static void SaveWxCloud<T>(T playerData)

        {

            if (playerData == null) return;

            WX.cloud.CallFunction(new CallFunctionParam()

            {

                name = "upLoadData",

                data = JsonUtility.ToJson(playerData),

                //data = playerData,

                success = (res)=>

                {

                    Debug.Log($"保存{playerData}成功,{res.result}");

                },

                fail = (res)=>

                {

                    Debug.Log($"保存{playerData}失败,错误原因:{res.errMsg}");

                }

            });

        }

我按教程填的 data = JsonUtility.ToJson(playerData),

出现错误提示 保存HappyBirdStudio.MiniParty.PlayerData失败,错误原因:parameter should be object instead of string;

但如果改成data = playerData,转成小游戏代码后又提示数据为空,但其实数据并不为空。这个异常在调用服务器的uploadData前就抛出了

TypeError: Cannot convert undefined or null to object

at t.keys (<anonymous>)

at fixCallFunctionData (cloud.js? [sm]:7)

at cloud.js? [sm]:9

at Array.forEach (<anonymous>)

at fixCallFunctionData (cloud.js? [sm]:7)

at Object.WX_CloudCallFunction (cloud.js? [sm]:41)

at _WX_CloudCallFunction (webgl.wasm.framework.unityweb.js:11)

at WXCloud_CallFunction_mA2AD4DB862B89E10C6DBD8D1BC918C6A60AD5FD9 (<anonymous>:wasm-function[10017]:0x29f7f8)

at WXWrapper_SaveWxCloud_TisIl2CppFullySharedGenericAny_m8E518C419A96B8392ADA1FA11069DADC41B9042A_gshared (<anonymous>:wasm-function[13217]:0x32b573)

at U3CU3Ec_U3CCreateHeroU3Eb__1_0_mC04785FF5499D3C0CE4D0B519C812FC2C36B413E (<anonymous>:wasm-function[26273]:0x6643f2)

at U3CU3Ec__DisplayClass5_0_U3CGetUserInfoU3Eb__0_m9EDE4B3CE512EE2209869822D6E93B64BF712DE8 (<anonymous>:wasm-function[26279]:0x6647ca)

at RuntimeInvoker_TrueVoid_t4861ACF8F4594C3437BB48B6E56783494B843915_VoidU2A_t104EAEFBD2D237A8C29618913DA9B4D99355E965(void (*)(), MethodInfo const*, void*, void**, void*) (<anonymous>:wasm-function[28756]:0x6f95cb)

at Func_1_Invoke_m35CBC166F464B8A1169583672025E6D64211856C_ClosedInstInvoker(Func_1_tBB8824FA8746333BFFF3AB3CE4A41B58450AF431*, void**, MethodInfo const*) (<anonymous>:wasm-function[15712]:0x3b045d)

at WXSDKManagerHandler__CloudCallFunctionCallback_m8AADBC5ACD828FA354AA33E3897CA87104E7E84F (<anonymous>:wasm-function[11199]:0x2c1521)

at RuntimeInvoker_TrueVoid_t4861ACF8F4594C3437BB48B6E56783494B843915_VoidU2A_t104EAEFBD2D237A8C29618913DA9B4D99355E965(void (*)(), MethodInfo const*, void*, void**, void*) (<anonymous>:wasm-function[28756]:0x6f95cb)

at il2cpp::vm::Runtime::InvokeWithThrow(MethodInfo const*, void*, void**) (<anonymous>:wasm-function[30088]:0x711d16)

at dynCall_iiii (<anonymous>:wasm-function[43020]:0xcd103d)

at invoke_iiii (webgl.wasm.framework.unityweb.js:28)

at il2cpp::vm::Runtime::Invoke(MethodInfo const*, void*, void**, Il2CppException**) (<anonymous>:wasm-function[30072]:0x710db0)

at il2cpp_runtime_invoke (<anonymous>:wasm-function[1247]:0x76358)

at scripting_method_invoke(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingArguments&, ScriptingExceptionPtr*, bool) (<anonymous>:wasm-function[42641]:0xcbd523)

at ScriptingInvocation::Invoke(ScriptingExceptionPtr*, bool) (<anonymous>:wasm-function[40166]:0xc69915)

at MonoBehaviour::InvokeMethodOrCoroutineChecked(ScriptingMethodPtr, ScriptingObjectPtr) (<anonymous>:wasm-function[31059]:0x76b78a)

at Scripting::SendScriptingMessage(GameObject&, char const*, ScriptingObjectPtr) (<anonymous>:wasm-function[40153]:0xc69339)

at SendMessageString (<anonymous>:wasm-function[39693]:0xc301ed)

at Module._SendMessageString (webgl.wasm.framework.unityweb.js:28)

at Object.SendMessage [as _send] (webgl.wasm.framework.unityweb.js:11)

at Object.send (module-helper.js? [sm]:13)

at Object.success (cloud.js? [sm]:54)

at Object.C.forEach.v.<computed> [as success] (VM190 WAGame.js:1)

at Object.C.forEach.v.<computed> [as success] (VM190 WAGame.js:1)

at Function.C.forEach.v.<computed> (VM190 WAGame.js:1)

at <api cloud.callFunction success callback function>

at Function.<anonymous> (VM190 WAGame.js:1)

at <anonymous>:1:246875

at F (<anonymous>:1:246722)

at <anonymous>:1:246866

at <anonymous>:1:247497

at j (<anonymous>:1:247501)

at <anonymous>:1:287089

回答关注问题邀请回答
收藏

1 个回答

  • 天蓝
    天蓝
    星期六 20:55

    我也遇到这个问题了,后来发现参数直接用就行。

    [System.Serializable]

    public class PlayerData

    {

        public int player_id;

        public string player_name;

    }

     PlayerData playerData = new PlayerData();

     playerData.player_id = 1;

     playerData.player_name = "test";

     WX.cloud.CallFunction(new CallFunctionParam()

     {

         name = "setUserData",

         data = playerData,//JsonUtility.ToJson(playerData),

         success = (res) =>

         {

             Debug.Log("upload success");

         },

         fail = (res) =>

         {

             Debug.Log("upload fail");

             Debug.Log(res.errMsg);

         }

     });

    星期六 20:55
    有用 1
    回复 2
    • Cyber飞
      Cyber飞
      星期日 01:33
      我就是这么调的,但就是不行5555
      星期日 01:33
      回复
    • Cyber飞
      Cyber飞
      星期日 02:10
      犯蠢了,name填的函数和云函数有大小写的差别,所以无法识别对应的云函数
      星期日 02:10
      回复
登录 后发表内容