Kaynağa Gözat

改用jslib调用js函数

hexiaojie 7 ay önce
ebeveyn
işleme
b54ae64460

+ 17 - 34
GameClient/Assets/Game/Launcher/Platform/QDJHGameManagerInit.cs

@@ -8,42 +8,21 @@ namespace GFGGame.Launcher
     {
         public IJHGameSDKListener _jhGameSDKListener;
 
+        public JHGameSDKHandler _eventHandler;
+
         // SDK 参数
         public void InitSDK()
         {
-            JHGameSDKHandler eventHandler = GameObject.Find("JHGameSDKGameObject")?.GetComponent<JHGameSDKHandler>();
-            if (eventHandler == null)
+            _eventHandler = GameObject.Find("JHGameSDKGameObject")?.GetComponent<JHGameSDKHandler>();
+            if (_eventHandler == null)
             {
                 GameObject gameObject = new GameObject("JHGameSDKGameObject");
                 gameObject.AddComponent<JHGameSDKHandler>();
                 GameObject.DontDestroyOnLoad(gameObject);
+                _eventHandler = GameObject.Find("JHGameSDKGameObject")?.GetComponent<JHGameSDKHandler>();
             }
         }
 
-        // // 调用JS函数的通用方法
-        // private void CallJSFunction(string functionName, Dictionary<string, object> parameters)
-        // {
-        //     // 将参数字典转换为JSON字符串
-        //     string jsonParams = JsonUtility.ToJson(parameters);
-        //
-        //     // 调用JS函数
-        //     Application.ExternalCall(functionName, jsonParams);
-        // }
-
-        private void CallJSFunction(string functionName, Dictionary<string, object> parameters)
-        {
-            string jsonParams = JsonUtility.ToJson(parameters ?? new Dictionary<string, object>());
-            Debug.Log($"CallJSFunction {functionName}: {jsonParams}");
-            
-#if UNITY_WEBGL && !UNITY_EDITOR
-    // 调用JSLib方法
-    JH_CallJSFunction(functionName, jsonParams);
-#else
-            // 非WebGL环境模拟调用(如编辑器)
-            Debug.Log($"[模拟] 调用 {functionName}: {jsonParams}");
-#endif
-        }
-
         /// <summary>
         /// 支付相关
         /// </summary>
@@ -85,8 +64,8 @@ namespace GFGGame.Launcher
                 { "fighting", fighting }
             };
 
-            // 调用JS的JHRecharge函数
-            CallJSFunction("JHRecharge", parameters);
+            string jsonParams = JsonUtility.ToJson(parameters);
+            _eventHandler.CallJHRechargeAb(jsonParams);
         }
 
         /// <summary>
@@ -119,8 +98,8 @@ namespace GFGGame.Launcher
                 { "roleCTime", roleCTime }
             };
 
-            // 调用JS的JHCreateRole函数
-            CallJSFunction("JHCreateRole", parameters);
+            string jsonParams = JsonUtility.ToJson(parameters);
+            _eventHandler.CallJHCreateRoleAb(jsonParams);
         }
 
         // 角色登录
@@ -143,7 +122,8 @@ namespace GFGGame.Launcher
             };
 
             // 调用JS的JHLoginRole函数
-            CallJSFunction("JHLoginRole", parameters);
+            string jsonParams = JsonUtility.ToJson(parameters);
+            _eventHandler.CallJHLoginRoleAb(jsonParams);
         }
 
         // 角色升级
@@ -166,21 +146,24 @@ namespace GFGGame.Launcher
             };
 
             // 调用JS的JHUpgradeRole函数
-            CallJSFunction("JHUpgradeRole", parameters);
+            string jsonParams = JsonUtility.ToJson(parameters);
+            _eventHandler.CallJHUpgradeRoleAb(jsonParams);
         }
 
         // 顶号处理
         public void RepeatLogin()
         {
             // 调用JS的JHRepeatLogin函数
-            CallJSFunction("JHRepeatLogin", new Dictionary<string, object>());
+            string jsonParams = JsonUtility.ToJson(new Dictionary<string, object>());
+            _eventHandler.CallJHRepeatLoginAb(jsonParams);
         }
 
         // 备案跳转
         public void CallIcpBeian()
         {
             // 调用JS的JHCallIcpBeian函数
-            CallJSFunction("JHCallIcpBeian", new Dictionary<string, object>());
+            string jsonParams = JsonUtility.ToJson(new Dictionary<string, object>());
+            _eventHandler.CallJHCallIcpBeianAb(jsonParams);
         }
 
         public class JHGameSDKHandler : AbJHGameSDKHandler

+ 74 - 0
GameClient/Assets/Plugins/WebGL/JHSDK.jslib

@@ -0,0 +1,74 @@
+mergeInto(LibraryManager.library, {
+    // 中间函数:调用 JHRecharge
+    CallJHRecharge: function(jsonParams) {
+        var paramsStr = Pointer_stringify(jsonParams);
+        var params = JSON.parse(paramsStr);
+
+        console.log("JS 中间层收到升级参数:", params);
+        if (window.JHRecharge) {
+            window.JHRecharge(params);
+        } else {
+            console.error("JHRecharge 未定义!");
+        }
+    },
+    // 中间函数:调用 JHCreateRole
+    CallJHCreateRole: function(jsonParams) {
+        var paramsStr = Pointer_stringify(jsonParams);
+        var params = JSON.parse(paramsStr);
+
+        console.log("JS 中间层收到升级参数:", params);
+        if (window.JHCreateRole) {
+            window.JHCreateRole(params);
+        } else {
+            console.error("JHCreateRole 未定义!");
+        }
+    },
+    // 中间函数:调用 JHLoginRole
+    CallJHLoginRole: function(jsonParams) {
+        var paramsStr = Pointer_stringify(jsonParams);
+        var params = JSON.parse(paramsStr);
+
+        console.log("JS 中间层收到升级参数:", params);
+        if (window.JHLoginRole) {
+            window.JHLoginRole(params);
+        } else {
+            console.error("JHLoginRole 未定义!");
+        }
+    },
+    // 中间函数:调用 JHUpgradeRole
+    CallJHUpgradeRole: function(jsonParams) {
+        var paramsStr = Pointer_stringify(jsonParams);
+        var params = JSON.parse(paramsStr);
+
+        console.log("JS 中间层收到升级参数:", params);
+        if (window.JHUpgradeRole) {
+            window.JHUpgradeRole(params);
+        } else {
+            console.error("JHUpgradeRole 未定义!");
+        }
+    },
+    // 中间函数:调用 JHRepeatLogin
+    CallJHRepeatLogin: function(jsonParams) {
+        var paramsStr = Pointer_stringify(jsonParams);
+        var params = JSON.parse(paramsStr);
+
+        console.log("JS 中间层收到升级参数:", params);
+        if (window.JHRepeatLogin) {
+            window.JHRepeatLogin(params);
+        } else {
+            console.error("JHRepeatLogin 未定义!");
+        }
+    },
+    // 中间函数:调用 JHCallIcpBeian
+    CallJHCallIcpBeian: function(jsonParams) {
+        var paramsStr = Pointer_stringify(jsonParams);
+        var params = JSON.parse(paramsStr);
+
+        console.log("JS 中间层收到升级参数:", params);
+        if (window.JHCallIcpBeian) {
+            window.JHCallIcpBeian(params);
+        } else {
+            console.error("JHCallIcpBeian 未定义!");
+        }
+    },
+});

+ 1 - 1
GameClient/Assets/Plugins/WebGL/JHWebGL.jslib.meta → GameClient/Assets/Plugins/WebGL/JHSDK.jslib.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 41702a5f5a84e20468c2f79bc0a3707f
+guid: 89df690afc3e7374289eb3847272d93e
 PluginImporter:
   externalObjects: {}
   serializedVersion: 2

+ 0 - 18
GameClient/Assets/Plugins/WebGL/JHWebGL.jslib

@@ -1,18 +0,0 @@
-mergeInto(LibraryManager.library, {
-    // 通用JS调用方法
-    JH_CallJSFunction: function(functionName, jsonParams) {
-        const fnName = UTF8ToString(functionName);
-        const paramsStr = UTF8ToString(jsonParams);
-        
-        try {
-            const params = JSON.parse(paramsStr);
-            if (typeof window[fnName] === 'function') {
-                window[fnName](params);
-            } else {
-                console.error(`JS函数 ${fnName} 未定义`);
-            }
-        } catch (e) {
-            console.error('调用JS函数失败:', e);
-        }
-    }
-});

+ 65 - 2
GameClient/Assets/ThirdParty/JHGame/AbJHGameSDKHandler.cs

@@ -1,9 +1,34 @@
-using UnityEngine;
+using System.Runtime.InteropServices;
+using UnityEngine;
 
 namespace JHGameSDK
 {
     public abstract class AbJHGameSDKHandler : MonoBehaviour
     {
+        #region 调用
+
+        [DllImport("__Internal")]
+        private static extern void CallJHRecharge(string jsonParams);
+
+        [DllImport("__Internal")]
+        private static extern void CallJHCreateRole(string jsonParams);
+
+        [DllImport("__Internal")]
+        private static extern void CallJHLoginRole(string jsonParams);
+
+        [DllImport("__Internal")]
+        private static extern void CallJHUpgradeRole(string jsonParams);
+
+        [DllImport("__Internal")]
+        private static extern void CallJHRepeatLogin(string jsonParams);
+
+        [DllImport("__Internal")]
+        private static extern void CallJHCallIcpBeian(string jsonParams);
+
+        #endregion
+
+        #region 回调
+
         public abstract void ReceiveMessageAb(string message);
 
         public abstract void OnRechargeStartAb(string message);
@@ -28,6 +53,8 @@ namespace JHGameSDK
 
         public abstract void OnInitSDKParamsAb(string message);
 
+        #endregion
+
 
         /// <summary>
         /// 测试消息
@@ -38,7 +65,7 @@ namespace JHGameSDK
             Debug.Log($"ReceiveMessage:{message}");
             ReceiveMessageAb(message);
         }
-        
+
         // 接收来自JS的回调
         public void OnRechargeStart(string jsonParams)
         {
@@ -171,5 +198,41 @@ namespace JHGameSDK
             Debug.Log("unity 接收到实例化url参数: " + jsonParams);
             OnInitSDKParamsAb(jsonParams);
         }
+
+        public void CallJHRechargeAb(string jsonParams)
+        {
+            Debug.Log("CallJHRechargeAb: " + jsonParams);
+            CallJHRecharge(jsonParams);
+        }
+
+        public void CallJHCreateRoleAb(string jsonParams)
+        {
+            Debug.Log("CallJHCreateRoleAb: " + jsonParams);
+            CallJHCreateRole(jsonParams);
+        }
+
+        public void CallJHLoginRoleAb(string jsonParams)
+        {
+            Debug.Log("CallJHLoginRoleAb: " + jsonParams);
+            CallJHLoginRole(jsonParams);
+        }
+
+        public void CallJHUpgradeRoleAb(string jsonParams)
+        {
+            Debug.Log("CallJHUpgradeRoleAb: " + jsonParams);
+            CallJHUpgradeRole(jsonParams);
+        }
+
+        public void CallJHRepeatLoginAb(string jsonParams)
+        {
+            Debug.Log("CallJHRepeatLoginAb: " + jsonParams);
+            CallJHRepeatLogin(jsonParams);
+        }
+
+        public void CallJHCallIcpBeianAb(string jsonParams)
+        {
+            Debug.Log("CallJHCallIcpBeianAb: " + jsonParams);
+            CallJHCallIcpBeian(jsonParams);
+        }
     }
 }