index.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. <!DOCTYPE html>
  2. <html lang="en-us">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  6. <title>Unity WebGL Player | 万世镜</title>
  7. <link rel="shortcut icon" href="TemplateData/favicon.ico">
  8. <link rel="stylesheet" href="TemplateData/style.css">
  9. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  10. <meta name="screen-orientation" content="portrait">
  11. <!-- 引入H5SDK -->
  12. <script>
  13. // 先定义全局变量防止未定义错误
  14. window.CQGameSDK = window.CQGameSDK || {};
  15. </script>
  16. <script type="text/javascript" src="https://cdn.jihuigame.com/sdk/h5sdk-1.0.3.js"
  17. onerror="console.error('SDK加载失败!')"></script>
  18. </head>
  19. <body>
  20. <div id="unity-container" class="unity-desktop">
  21. <canvas id="unity-canvas" width=960 height=600></canvas>
  22. <div id="unity-loading-bar">
  23. <div id="unity-logo"></div>
  24. <div id="unity-progress-bar-empty">
  25. <div id="unity-progress-bar-full"></div>
  26. </div>
  27. </div>
  28. <div id="unity-warning"> </div>
  29. <div id="unity-footer">
  30. <div id="unity-webgl-logo"></div>
  31. <div id="unity-fullscreen-button"></div>
  32. <div id="unity-build-title">万世镜</div>
  33. </div>
  34. </div>
  35. <!-- 添加SDK交互的div -->
  36. <div id="sdk-container" style="display:none;"></div>
  37. <script>
  38. window.onload = function() {
  39. if (screen.orientation && screen.orientation.lock) {
  40. screen.orientation.lock('portrait').catch(e => console.log(e));
  41. }
  42. // 调整Canvas尺寸适配竖屏
  43. var canvas = document.querySelector('canvas');
  44. if (canvas) {
  45. canvas.style.width = '100%';
  46. canvas.style.height = '100vh';
  47. }
  48. };
  49. </script>
  50. <script>
  51. var container = document.querySelector("#unity-container");
  52. var canvas = document.querySelector("#unity-canvas");
  53. var loadingBar = document.querySelector("#unity-loading-bar");
  54. var progressBarFull = document.querySelector("#unity-progress-bar-full");
  55. var fullscreenButton = document.querySelector("#unity-fullscreen-button");
  56. var warningBanner = document.querySelector("#unity-warning");
  57. // SDK相关的全局变量
  58. var sdkParams = null;
  59. // 从URL获取SDK参数
  60. function getSDKParamsFromUrl() {
  61. var urlParams = new URLSearchParams(window.location.search);
  62. return {
  63. user_id: urlParams.get('user_id'),
  64. user_name: urlParams.get('user_name'),
  65. uuid: urlParams.get('uuid'),
  66. sign: urlParams.get('sign'),
  67. timestamp: urlParams.get('timestamp'),
  68. cp_ext: urlParams.get('cp_ext')
  69. };
  70. }
  71. // 初始化SDK参数
  72. function initSDKParams() {
  73. sdkParams = getSDKParamsFromUrl();
  74. console.log("SDK Params:", sdkParams);
  75. // 这里可以添加将参数传递给Unity的逻辑
  76. // 例如通过UnityInstance.SendMessage
  77. if (unityInstance) {
  78. unityInstance.SendMessage('JHGameSDKGameObject', 'OnInitSDKParams', JSON.stringify(sdkParams));
  79. }
  80. }
  81. // 显示临时消息横幅
  82. function unityShowBanner(msg, type) {
  83. function updateBannerVisibility() {
  84. warningBanner.style.display = warningBanner.children.length ? 'block' : 'none';
  85. }
  86. var div = document.createElement('div');
  87. div.innerHTML = msg;
  88. warningBanner.appendChild(div);
  89. if (type == 'error') div.style = 'background: red; padding: 10px;';
  90. else {
  91. if (type == 'warning') div.style = 'background: yellow; padding: 10px;';
  92. setTimeout(function() {
  93. warningBanner.removeChild(div);
  94. updateBannerVisibility();
  95. }, 5000);
  96. }
  97. updateBannerVisibility();
  98. }
  99. var buildUrl = "Build";
  100. var loaderUrl = buildUrl + "/webgl.loader.js";
  101. var config = {
  102. dataUrl: buildUrl + "/webgl.data.gz",
  103. frameworkUrl: buildUrl + "/webgl.framework.js.gz",
  104. codeUrl: buildUrl + "/webgl.wasm.gz",
  105. streamingAssetsUrl: "StreamingAssets",
  106. companyName: "gfg",
  107. productName: "万世镜",
  108. productVersion: "1.0",
  109. showBanner: unityShowBanner,
  110. };
  111. if (/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)) {
  112. container.className = "unity-mobile";
  113. config.devicePixelRatio = 1;
  114. unityShowBanner('WebGL builds are not supported on mobile devices.');
  115. } else {
  116. canvas.style.width = "960px";
  117. canvas.style.height = "600px";
  118. }
  119. canvas.style.background = "url('" + buildUrl + "/webgl.jpg') center / cover";
  120. loadingBar.style.display = "block";
  121. var script = document.createElement("script");
  122. script.src = loaderUrl;
  123. script.onload = () => {
  124. createUnityInstance(canvas, config, (progress) => {
  125. progressBarFull.style.width = 100 * progress + "%";
  126. }).then((unityInstance) => {
  127. loadingBar.style.display = "none";
  128. fullscreenButton.onclick = () => {
  129. unityInstance.SetFullscreen(1);
  130. };
  131. // Unity实例加载完成后初始化SDK
  132. initSDKParams();
  133. // 这里可以添加将unityInstance保存为全局变量的代码
  134. // window.unityInstance = unityInstance;
  135. setupSDKCallbacks(unityInstance);
  136. }).catch((message) => {
  137. alert(message);
  138. });
  139. };
  140. document.body.appendChild(script);
  141. </script>
  142. <!-- 添加SDK交互的JavaScript代码 -->
  143. <script>
  144. // 这部分代码将在Unity加载完成后执行
  145. function setupSDKCallbacks(unityInstance) {
  146. // 支付回调示例
  147. window.JHRecharge = function(params) {
  148. console.log("调用支付:", params);
  149. // 这里可以添加支付前的Unity交互逻辑
  150. // 例如通知Unity准备支付
  151. if (unityInstance) {
  152. unityInstance.SendMessage('JHGameSDKGameObject', 'OnRechargeStart', JSON.stringify(params));
  153. }
  154. // 调用SDK支付
  155. CQGameSDK.recharge(params).then(function(res) {
  156. console.log('支付结果:', res);
  157. // 支付完成后通知Unity
  158. if (unityInstance) {
  159. unityInstance.SendMessage('JHGameSDKGameObject', 'OnRechargeComplete', JSON.stringify(res));
  160. }
  161. }).catch(function(error) {
  162. console.error('支付错误:', error);
  163. if (unityInstance) {
  164. unityInstance.SendMessage('JHGameSDKGameObject', 'OnRechargeError', JSON.stringify(error));
  165. }
  166. });
  167. };
  168. // 创建角色回调
  169. window.JHCreateRole = function(params) {
  170. console.log("创建角色:", params);
  171. if (unityInstance) {
  172. unityInstance.SendMessage('JHGameSDKGameObject', 'OnCreateRoleStart', JSON.stringify(params));
  173. }
  174. CQGameSDK.createRole(params).then(function(res) {
  175. console.log('创建角色结果:', res);
  176. if (unityInstance) {
  177. unityInstance.SendMessage('JHGameSDKGameObject', 'OnCreateRoleComplete', JSON.stringify(res));
  178. }
  179. }).catch(function(error) {
  180. console.error('创建角色错误:', error);
  181. if (unityInstance) {
  182. unityInstance.SendMessage('JHGameSDKGameObject', 'OnCreateRoleError', JSON.stringify(error));
  183. }
  184. });
  185. };
  186. // 角色登录回调
  187. window.JHLoginRole = function(params) {
  188. console.log("角色登录:", params);
  189. if (unityInstance) {
  190. unityInstance.SendMessage('JHGameSDKGameObject', 'OnLoginRoleStart', JSON.stringify(params));
  191. }
  192. CQGameSDK.loginRole(params).then(function(res) {
  193. console.log('角色登录结果:', res);
  194. if (unityInstance) {
  195. unityInstance.SendMessage('JHGameSDKGameObject', 'OnLoginRoleComplete', JSON.stringify(res));
  196. }
  197. }).catch(function(error) {
  198. console.error('角色登录错误:', error);
  199. if (unityInstance) {
  200. unityInstance.SendMessage('JHGameSDKGameObject', 'OnLoginRoleError', JSON.stringify(error));
  201. }
  202. });
  203. };
  204. // 角色升级回调
  205. window.JHUpgradeRole = function(params) {
  206. console.log("角色升级:", params);
  207. if (unityInstance) {
  208. unityInstance.SendMessage('JHGameSDKGameObject', 'OnUpgradeRoleStart', JSON.stringify(params));
  209. }
  210. CQGameSDK.upgradeRole(params).then(function(res) {
  211. console.log('角色升级结果:', res);
  212. if (unityInstance) {
  213. unityInstance.SendMessage('JHGameSDKGameObject', 'OnUpgradeRoleComplete', JSON.stringify(res));
  214. }
  215. }).catch(function(error) {
  216. console.error('角色升级错误:', error);
  217. if (unityInstance) {
  218. unityInstance.SendMessage('JHGameSDKGameObject', 'OnUpgradeRoleError', JSON.stringify(error));
  219. }
  220. });
  221. };
  222. // 顶号回调
  223. window.JHRepeatLogin = function() {
  224. console.log("顶号处理");
  225. if (unityInstance) {
  226. unityInstance.SendMessage('JHGameSDKGameObject', 'OnRepeatLoginStart', '');
  227. }
  228. CQGameSDK.repeatLogin().then(function(res) {
  229. console.log('顶号结果:', res);
  230. if (unityInstance) {
  231. unityInstance.SendMessage('JHGameSDKGameObject', 'OnRepeatLoginComplete', JSON.stringify(res));
  232. }
  233. }).catch(function(error) {
  234. console.error('顶号错误:', error);
  235. if (unityInstance) {
  236. unityInstance.SendMessage('JHGameSDKGameObject', 'OnRepeatLoginError', JSON.stringify(error));
  237. }
  238. });
  239. };
  240. // 备案跳转回调
  241. window.JHCallIcpBeian = function() {
  242. console.log("备案跳转");
  243. if (unityInstance) {
  244. unityInstance.SendMessage('JHGameSDKGameObject', 'OnCallIcpBeianStart', '');
  245. }
  246. CQGameSDK.call({target:"icpbeian"}).then((res) => {
  247. console.log('备案跳转结果:', res);
  248. if (unityInstance) {
  249. unityInstance.SendMessage('JHGameSDKGameObject', 'OnCallIcpBeianComplete', JSON.stringify(res));
  250. }
  251. }).catch(function(error) {
  252. console.error('备案跳转错误:', error);
  253. if (unityInstance) {
  254. unityInstance.SendMessage('JHGameSDKGameObject', 'OnCallIcpBeianError', JSON.stringify(error));
  255. }
  256. });
  257. };
  258. }
  259. </script>
  260. </body>
  261. </html>