index.html 10 KB

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