Unity 转小游戏
填写appid 和游戏资源位置
在导出的项目里可以修改游戏资源位置 两个目录 minigame 是小程序打开的目录 webgl 是要下载的的资源 下载一个http 服务器就有了
和JS交互 大部分js 功能都被封装到了C# 只用做少量的即可
在wx-wasm-sdk 下得 Plugins 目录下新建文件 Channel.jslib
- mergeInto(LibraryManager.library, {
- WebChannelLogin: function () {
- window.WXWASMSDK.WebChannelLogin();
- },
- WebTrackEvent: function(platName,eventName){
- window.WXWASMSDK.WebTrackEvent(_WXPointer_stringify_adaptor(platName),_WXPointer_stringify_adaptor(eventName));
- },
- WebPayItem: function(arg){
- window.WXWASMSDK.WebPayItem(_WXPointer_stringify_adaptor(arg));
- },
- WebCallChannelVoidFunWithArg: function(name, arg) {
- window.WXWASMSDK.WebCallChannelVoidFunWithArg(_WXPointer_stringify_adaptor(name),_WXPointer_stringify_adaptor(arg));
- },
- WebSetUserData: function(arg){
- window.WXWASMSDK.WebSetUserData(_WXPointer_stringify_adaptor(arg));
- },
- WebTanWanEvent: function(name, arg){
- window.WXWASMSDK.WebTanWanEvent(_WXPointer_stringify_adaptor(name),_WXPointer_stringify_adaptor(arg));
- },
- });
他其实和Lua 的全表有点像
新建 apps文件
- import { appEntity } from './app-entity';
- import * as appSystem from './app-system'
- var ThinkingAnalyticsAPI = require("./thinkingdata.mg.wx.min.js");
- //import sdk from "./oreyunwx.min.js"
- import {
- init,
- loginUserInfo,
- dataReport,
- makePayment,
- shareAppMessage,
- payConfig,
- navigateToMiniProgram,
- getBindPhoneCode,
- bindPhone,
- onShareAppMessage,
- requestSubscribeMessage,
- triggerSubscribe,
- createAd
- } from 'gameSDK.bundle.js'
- var ta;
- export default {
- WebChannelLogin(){
- //获取微信品台
- wx.getSystemInfo({
- success (res) {
- if(res.platform === "ios"){
- payConfig().then(res => {
- let iosPay = "1"
- if(res.ios_recharge === true && obj.RoleLv > res.ios_level){
- iosPay = "1"
- }
- else{
- iosPay = "0"
- }
- GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverIosPayConfig",iosPay);
- console.log("ios pay " + JSON.stringify(res))
- }).catch(error => {
- console.log("ios pay " + error)
- })
- }
- }
- })
- if(appEntity.account_id !== ""){
- GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverChannelLoginCallBack",appEntity.account_id);
- var presetProperties = appEntity.ta.getPresetProperties();
- var properties = presetProperties.toEventPresetProperties();
- GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverPresetProperties",JSON.stringify(properties));
- console.log("properties " + JSON.stringify(properties))
- return
- }
- loginUserInfo().then(res => {
- console.log("loginUserInfo " + res.uid)
- appEntity.account_id = res.uid + ""
- GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverChannelLoginCallBack",appEntity.account_id);
- var presetProperties = appEntity.ta.getPresetProperties();
- var properties = presetProperties.toEventPresetProperties();
- GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverPresetProperties",JSON.stringify(properties));
- ta.login(appEntity.account_id)
- }).catch(error => {
- })
- },
- WebTrackEvent(eventName,arg){
- //console.log(eventName);
- //console.log(arg);
- if (arg.length > 0) {
- var obj = JSON.parse(arg);
- ta.track(eventName,obj)
- }
- else{
- ta.track(eventName,{})
- }
- },
- WebPayItem(arg){
- //console.log("sha1", appSystem.sha1("1646989046234D528C6F23C7D7"))
- var obj = JSON.parse(arg)
- if(obj.wx_android === false){
- payConfig().then(res => {
- if(res.ios_recharge === true && obj.RoleLv > res.ios_level){
- UpPay(obj)
- }
- else{
- let objd = {
- code:1,
- info:"iOS 用户等级不够"
- }
- let jsString = JSON.stringify(objd);
- SendPayResultMessage(jsString)
- }
- console.log("ios pay " + JSON.stringify(res))
- }).catch(error => {
- })
- }
- else{
- UpPay(obj)
- }
- },
- WebSetUserData(arg){
- var obj = JSON.parse(arg)
- ta.userSet(obj);
- },
- WebCallChannelVoidFunWithArg(name,arg){
- //GameGlobal.Module.SendMessage("Canvas","ChannelLogout","hahhahah")
- //appSystem.exportTest1()
- //appSystem.exportTest2("zhang san")
- //appSystem.csharp(1,"sss");
- //ta.login("ABC_123456");
- if(name === "setSuperProperties"){
- var obj = JSON.parse(arg)
- ta.setSuperProperties(obj);
- }
- else if(name === "userSet"){
- var obj = JSON.parse(arg)
- ta.userSet(obj);
- }
- else if(name === "unityHasInit"){
- appEntity.unityHasInit = true
- }
- else if(name === "actionRegister"){
- ReyunRegister()
- appSystem.PostSourceRegister()
- }
- else if(name === "actionLogin"){
- ReyunLogin()
- }
- else if(name === "actionPurchase"){
- var obj = JSON.parse(arg)
- ReyunPayment(obj);
- //appSystem.PostSourcePay(obj.currencyAmount * 100)
- }
- else if(name === "showRewardedVideo"){
- createAd({
- ad_type:"video",
- task:''
- }).then(res => {
- adHandler("onRewardedVideoAdRewarded","")
- adHandler("onRewardedVideoAdClosed","")
- //GameGlobal.Module.SendMessage(appEntity.receivername,"onRewardedVideoAdRewarded","");
- //GameGlobal.Module.SendMessage(appEntity.receivername,"onRewardedVideoAdClosed","");
- console.log("showRewardedVideo222 " + JSON.stringify(res))
- }).catch(error => {
- console.log("showRewardedVideo11111 " + JSON.stringify(error))
- })
- console.log("VoidFunWithArg " + name + "---" + arg);
- }
- else if(name === "SDKInit"){
- let tanwandata = {
- app_version: arg,
- config_id: '',
- game_name: ''
- };
- // 初始化小游戏SDK
- init(tanwandata).then(res => {
- wx.showToast({
- title: '进入游戏成功',
- })
- //拉起订阅
- requestSubscribeMessage()
- //触发订阅
- triggerSubscribe('login')
- }).catch(error => {
- })
- let org = {
- userType:"TanWan"
- }
- ta.userSet(org);
- console.log("VoidFunWithArg " + name + "---" + arg);
- }
- },
- WxInit(){
- //u8参数初始化
- //appSystem.InitU8Arg();
- //数数初始化
- ShushuInit();
- //热云初始化
- ///sdk.init(appEntity.reYunAppKey);
- //登录
- //appSystem.channelLogin();
- //归因初始化
- //SourceInit()
- },
- WebTanWanEvent(eventName,arg){
- var obj = JSON.parse(arg)
- let reportArg = {}
- if(eventName === "1"){
- reportArg.data_type = 1
- }
- else if(eventName === "2"){
- reportArg.data_type = 2
- }
- else if(eventName === "3"){
- reportArg.data_type = 3
- }
- else if(eventName === "4"){
- reportArg.data_type = 4
- }
- reportArg.server_id = 1
- reportArg.server_name = ""
- reportArg.uid = obj.RoleId
- reportArg.role_id = obj.RoleId
- reportArg.role_name = ""
- reportArg.role_level = obj.RoleLv
- reportArg.role_currency = obj.MoneyNum
- reportArg.role_create_time = obj.RoleCreateTime
- reportArg.fight = 1
- reportArg.role_sex = 1
- reportArg.vip_level = 1
- reportArg.role_career = ""
- dataReport(reportArg).then(res => {
- }).catch(error => {
- })
- console.log("WebTanWanEvent " + JSON.stringify(reportArg))
- },
- GetOpenId(openid) {
- //console.log("account_id " + openid)
- ta.login(appEntity.account_id);
- },
- ShushuEventTimeStart(eventName){
- ta.timeEvent(eventName);
- },
- ShushuJsTrack(eventName,obj){
- ta.track(eventName,obj)
- }
- }
- function SendPayResultMessage(re){
- console.log("SendPayResult",re)
- GameGlobal.Module.SendMessage(appEntity.receivername,"PayResult",re);
- }
- function ShushuInit(wxcode){
- var config = {
- appId:appEntity.shushuAppId, // 项目 APP ID
- serverUrl:appEntity.shushuUrl , // 上报地址
- enableLog:false,
- autoTrack: {
- appShow: true, // 自动采集 ta_mg_show
- appHide: true // 自动采集 ta_mg_hide
- }
- };
- // 创建 TA 实例
- ta = new ThinkingAnalyticsAPI(config);
- // 初始化
- ta.init();
- ta.identify(ta.getDeviceId());
- appEntity.ta = ta;
- //console.log("shushu init")
- //console.log("getDeviceId",ta.getDeviceId());
- // 上报一个简单事件, 事件名为 test_event
- }
- function UpPay(obj){
- var payArg = {}
- payArg.uid = "1"
- payArg.server_id = "1"
- payArg.server_name = "正式服"
- payArg.role_id = "1"
- payArg.role_name = "1"
- payArg.role_level = 1
- payArg.role_currency = 1
- payArg.amt = obj.Fee / 100
- payArg.game_fee = 1
- payArg.product_id = obj.detail
- payArg.product_name = "游戏充值"
- payArg.product_desc = "游戏充值"
- payArg.ext = obj.gameOrderId + ",1174" + "," + obj.rig
- console.log("payArg" + JSON.stringify(payArg))
- makePayment(payArg).then(payres => {
- wx.getSystemInfo({
- success (res) {
- if(res.platform === "ios"){
- }
- else{
- let objd = {
- code:0,
- info:"轮询"
- }
- let jsString = JSON.stringify(objd);
- SendPayResultMessage(jsString)
- }
- }
- })
- }).catch(error => {
- })
- }
- //热云注册接口
- function ReyunRegister(){
- //sdk.register(appEntity.wxopenId)
- }
- function ReyunLogin(){
- //sdk.loggedin(appEntity.account_id)
- }
- function ReyunPayment(arg){
- //js["transactionId"] = transactionId;
- //js["currencyAmount"] = currencyAmount;
- //js["currencyType"] = currencyType;
- //js["paymentType"] = paymentType;
- //sdk.payment(arg.transactionid,arg.currencyamount,arg.currencytype,arg.paymenttype)
- }
- function SourceInit() {
- let jsobj = wx.getStorageSync('Source')
- var bb = Object.keys(jsobj)
- if(bb.length === 0){
- //if(true){
- //debugger
- let objs = wx.getLaunchOptionsSync()
- if ('query' in objs) {
- let qurayStr = JSON.stringify(objs.query)
- if (qurayStr.length > 0) {
- ta.userSet(qurayStr)
- }
- }
- if ('query' in objs) {
- if ('clue_token' in objs.query) {
- appEntity.clue_token = objs.query.clue_token;
- }
- if ('ad_id' in objs.query) {
- appEntity.ad_id = objs.query.ad_id;
- }
- if ('creative_id' in objs.query) {
- appEntity.creative_id = objs.query.creative_id;
- }
- if ('req_id' in objs.query){
- appEntity.req_id = objs.query.req_id;
- }
- if ('advertiser_id' in objs.query) {
- appEntity.advertiser_id = objs.query.advertiser_id;
- }
- if ('project_id' in objs.query) {
- appEntity.advertiser_id = objs.query.project_id;
- }
- if ('promotion_id' in objs.query) {
- appEntity.advertiser_id = objs.query.promotion_id;
- }
- if ('mid1' in objs.query) {
- appEntity.mid1 = objs.query.mid1;
- }
- if ('mid2' in objs.query) {
- appEntity.mid2 = objs.query.mid2;
- }
- if ('mid3' in objs.query) {
- appEntity.mid3 = objs.query.mid3;
- }
- if ('mid4' in objs.query) {
- appEntity.mid4 = objs.query.mid4;
- }
- if ('mid5' in objs.query) {
- appEntity.mid5 = objs.query.mid5;
- }
- }
- let obj = {
- ad_id:appEntity.ad_id,
- creative_id:appEntity.creative_id,
- advertiser_id:appEntity.advertiser_id,
- clue_token:appEntity.clue_token,
- };
- let str = JSON.stringify(obj);
- //console.log(str);
- wx.setStorageSync('Source',str)
- appEntity.firstOpen = true;
- }
- else{
- let sorObj = JSON.parse(jsobj);
- appEntity.ad_id = sorObj.ad_id;
- appEntity.creative_id = sorObj.creative_id;
- appEntity.advertiser_id = sorObj.advertiser_id;
- appEntity.clue_token = sorObj.clue_token;
- }
- }
- function adHandler(funName,arg){
- let obj = {
- "FunName":funName,
- "Arg":arg
- }
- let tarStr = JSON.stringify(obj)
- console.log("tarStr " + tarStr)
- GameGlobal.Module.SendMessage(appEntity.receivername,"AdHandler",tarStr);
- }
在index 中将 apps 方法注册到全局表中
- import apps from './apps';
- const WXWASMSDK = {
- /*
- 初始化
- */
- WXInitializeSDK() {
- moduleHelper.init();
- moduleHelper.send('Inited', 200);
- },
- ...storage,
- ...userInfo,
- ...share,
- ...ad,
- ...canvasHelper,
- ...fs,
- ...openData,
- ...util,
- ...cloud,
- ...audio,
- ...texture,
- ...video,
- ...logger,
- ...shortAudio,
- ...gameClub,
- canvasContext,
- ...sdk,
- ...camera,
- ...recorder,
- ...uploadFile,
- ...gameRecorder,
- ...apps, //加的这个
- };
SDK 初始化在 Game.js 中
- GameGlobal.WXWASMSDK.WxInit();
实为apps 的调用方法
新建 app-system
- import {appEntity} from './app-entity';
- import {appSanboxCfg} from './appSanboxCfg';
- import { CryptoJS } from './CryptoJS.js';
- export function exportTest1() {
- }
- export function exportTest2(name) {
- }
- export function csharp(id,errMsg){
- }
- export function js(){
- }
- export function u8Post(url, postData, doSuccess, doFail){
- var base = appEntity.u8ServerUrl
- wx.request({
- //项目的真正接口,通过字符串拼接方式实现
- url: base + url,
- // 这个header根据你的实际改!
- header:{
- 'X-GameId':appEntity.u8GameId,
- 'X-ChannelId':appEntity.u8ChannelId,
- 'X-PackageId':appEntity.u8PackageId,
- 'Content-Type': 'application/json',
- 'cookie': appEntity.u8HttpToken,
- 'Request-Origin': 'app'
- },
- data: postData,
- method: 'POST',
- success: function (res) {
- //参数值为res.data,直接将返回的数据传入
- //if (res.data.result.token) { // 如果有token保存下来,下次请求带着token访问
- // appEntity.u8HttpToken = res.data.result.token;
- // console.log("token--> ", appEntity.u8HttpToken)
- //}
- doSuccess(res.data);
- },
- fail: function () {
- doFail();
- },
- })
- }
- export function u8GetData(url, getData, doSuccess, doFail) {
- wx.request({
- url: url,
- header: {
- 'Content-Type': 'application/json',
- 'X-Access-Token': appEntity.u8HttpToken,
- 'Request-Origin': 'app'
- },
- method: 'GET',
- data: getData,
- success: function (res) {
- doSuccess(res.data);
- },
- fail: function () {
- doFail();
- },
- })
- }
- export function getSignStringFromObj(obj){
- let arrIndex = 0;
- let arr = [];
- for (let key in obj) {
- if (obj.hasOwnProperty(key)) {
- arr[arrIndex] = {
- paramKey:key,
- paramVal:obj[key],
- }
- arrIndex = arrIndex + 1
- }
- }
- arr.sort(compare);
- let targeStr = "";
- for(var i = 0; i < arr.length; i++){
- if(targeStr !== ""){
- targeStr = targeStr + "&"
- }
- targeStr = targeStr + arr[i].paramKey + "=" + arr[i].paramVal;
- }
- obj.timestamp = Date.now();
- obj.nonce = 3652;
- targeStr = targeStr + "&" + "timestamp="+ obj.timestamp +"&nonce=" + obj.nonce
- //console.log("test target " + targeStr);
- return targeStr;
- }
- export function channelLogin(){
- //u8 完成登录就不回去登录
- if(appEntity.account_id !== ""){
- GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverChannelLoginCallBack",appEntity.account_id);
- var presetProperties = appEntity.ta.getPresetProperties();
- var properties = presetProperties.toEventPresetProperties();
- GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverPresetProperties",JSON.stringify(properties));
- console.log("properties " + JSON.stringify(properties))
- return
- }
- wx.login({
- success: function(res) {
- //console.log(res.code);//这里的返回值就有Code信息
- u8Login(res.code);
- //debugger;
- },
- fail: function(res) {
- let loginArg = {
- result:false,
- fail_reason:"wx fail",
- }
- GameGlobal.WXWASMSDK.ShushuJsTrack("U8_init",loginArg);
- },
- complete: function(res) {},
- })
- }
- function u8Login(code){
- let url = "usercenter/wx1/login";
- let data = {
- wx_code : code,
- }
- let signCode = getSignStringFromObj(data);
- var hash_result = CryptoJS.HmacSHA256(signCode, appEntity.u8Sign).toString();
- data.sign = hash_result;
- u8Post(url,data,
- function(succ){
- if(succ.code === 200){
- appEntity.account_id = succ.data.account_id;
- appEntity.wxopenId = succ.data.openid;
- //console.log("wxopenId " + succ.data.openid)
- //debugger
- appEntity.wxtoken = succ.data.token;
- //热云初始化,数数login
- GameGlobal.WXWASMSDK.GetOpenId(appEntity.wxopenId);
- //这个要微信的数据
- PostSourceActive()
- GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverChannelLoginCallBack",appEntity.account_id);
- var presetProperties = appEntity.ta.getPresetProperties();
- //生成事件预置属性
- var properties = presetProperties.toEventPresetProperties();
- GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverPresetProperties",JSON.stringify(properties));
- let loginArg = {
- result:true,
- fail_reason:"u8 server ok",
- }
- GameGlobal.WXWASMSDK.ShushuJsTrack("U8_init",loginArg);
- let reArg = {
- login_type:"weixin",
- login_id:appEntity.account_id,
- result:true,
- fail_reason:"ok"
- }
- GameGlobal.WXWASMSDK.ShushuJsTrack("login_result",reArg);
- }
- else{
- let loginArg = {
- result:false,
- fail_reason:succ.message,
- }
- GameGlobal.WXWASMSDK.ShushuJsTrack("U8_init",loginArg);
- }
- },
- function(){
- let loginArg = {
- result:false,
- fail_reason:"u8 server error",
- }
- GameGlobal.WXWASMSDK.ShushuJsTrack("U8_init",loginArg);
- })
- }
- function compare(obj1, obj2) {
- let val1 = obj1.paramKey;
- let val2 = obj2.paramKey;
- if (val1 < val2) {
- return -1;
- } else if (val1 > val2) {
- return 1;
- } else {
- return 0;
- }
- }
- //用户点击了支付
- export function wxPay(csobj){
- wx.login({
- success: function(res) {
- upWxPay(csobj,res.code)
- },
- fail: function(res) {
- let objd = {
- code:1,
- info:"获取微信code失败"
- }
- let jsString = JSON.stringify(objd);
- SendPayResultMessage(jsString)
- },
- complete: function(res) {
- },
- })
- }
- function getSignature(arg,succfunc) {
- let data = {
- account_id:appEntity.account_id,
- nickname:arg.nickName,
- gender:arg.gender,
- language:arg.language,
- city:arg.city,
- province:arg.province,
- country:arg.country,
- avatar_url:arg.avatarUrl,
- }
- let signCode = getSignStringFromObj(data);
- var hash_result = CryptoJS.HmacSHA256(signCode, appEntity.u8Sign).toString();
- data.sign = hash_result;
- //debugger
- u8Post("/usercenter/wx1/min/signature",data,
- function(params) {
- appEntity.signature = params.data.signature;
- succfunc(params)
- //debugger
- },
- function(params) {
- })
- }
- function upWxPay(csobj,wxcode) {
- let arg = {
- mode:"game",
- env:appEntity.env,
- offerId:appEntity.offerId,
- currencyType:"CNY",
- platform:"android",
- buyQuantity:csobj.Fee / 10,
- zoneId:"1",
- success:function(res){
- //console.log("paysucc " + JSON.stringify(res))
- webAndroidMoneyHasGone(csobj,wxcode)
- },
- fail:function(res){
- //console.log(res)
- let objd = {
- code:1,
- info:res
- }
- let jsString = JSON.stringify(objd);
- SendPayResultMessage(jsString)
- webAndroidMoneyHasGone(csobj,wxcode)
- console.log("payfail " + JSON.stringify(res))
- },
- complete:function(){
- //通知服务器去微信服扣货
- },
- };
- //拉起微信支付
- wx.requestMidasPayment(arg);
- //webAndroidMoneyHasGone(csobj,wxcode)
- //console.log("appEntity.offerId offerIdofferId " + appEntity.offerId)
- }
- function webAndroidMoneyHasGone(objCharp,code){
- let postData = {};
- postData.env = appEntity.env
- postData.openid = appEntity.wxopenId;
- //postData.appid = appEntity.wxAppId;
- postData.offer_id = appEntity.offerId;
- postData.zone_id = 1
- postData.access_token = appEntity.weixinServerToken;
- postData.game_orderid = objCharp.gameOrderId
- postData.js_code = code
- postData.accountid = appEntity.account_id
- //debugger
- var base = appEntity.webAndroidPayUrl;
- //console.log("base" + base)
- wx.request({
- //项目的真正接口,通过字符串拼接方式实现
- url: base,
- // 这个header根据你的实际改!
- header: {
- 'Content-Type': 'application/json',
- 'Request-Origin': 'app'
- },
- data: postData,
- method: 'POST',
- success: function (res) {
- //debugger
- let objd = {
- code:0,
- info:"支付成功"
- }
- let jsString = JSON.stringify(objd);
- SendPayResultMessage(jsString)
- },
- fail: function () {
- //debugger
- //doFail();
- let objd = {
- code:1,
- info:"从微信扣款失败"
- }
- let jsString = JSON.stringify(objd);
- SendPayResultMessage(jsString)
- },
- })
- }
- function encodeUTF8(s) {
- var i, r = [], c, x;
- for (i = 0; i < s.length; i++)
- if ((c = s.charCodeAt(i)) < 0x80) r.push(c);
- else if (c < 0x800) r.push(0xC0 + (c >> 6 & 0x1F), 0x80 + (c & 0x3F));
- else {
- if ((x = c ^ 0xD800) >> 10 == 0) //对四字节UTF-16转换为Unicode
- c = (x << 10) + (s.charCodeAt(++i) ^ 0xDC00) + 0x10000,
- r.push(0xF0 + (c >> 18 & 0x7), 0x80 + (c >> 12 & 0x3F));
- else r.push(0xE0 + (c >> 12 & 0xF));
- r.push(0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F));
- };
- return r;
- };
- // 字符串加密成 hex 字符串
- export function sha1(s) {
- var data = new Uint8Array(encodeUTF8(s))
- var i, j, t;
- var l = ((data.length + 8) >>> 6 << 4) + 16, s = new Uint8Array(l << 2);
- s.set(new Uint8Array(data.buffer)), s = new Uint32Array(s.buffer);
- for (t = new DataView(s.buffer), i = 0; i < l; i++)s[i] = t.getUint32(i << 2);
- s[data.length >> 2] |= 0x80 << (24 - (data.length & 3) * 8);
- s[l - 1] = data.length << 3;
- var w = [], f = [
- function () { return m[1] & m[2] | ~m[1] & m[3]; },
- function () { return m[1] ^ m[2] ^ m[3]; },
- function () { return m[1] & m[2] | m[1] & m[3] | m[2] & m[3]; },
- function () { return m[1] ^ m[2] ^ m[3]; }
- ], rol = function (n, c) { return n << c | n >>> (32 - c); },
- k = [1518500249, 1859775393, -1894007588, -899497514],
- m = [1732584193, -271733879, null, null, -1009589776];
- m[2] = ~m[0], m[3] = ~m[1];
- for (i = 0; i < s.length; i += 16) {
- var o = m.slice(0);
- for (j = 0; j < 80; j++)
- w[j] = j < 16 ? s[i + j] : rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1),
- t = rol(m[0], 5) + f[j / 20 | 0]() + m[4] + w[j] + k[j / 20 | 0] | 0,
- m[1] = rol(m[1], 30), m.pop(), m.unshift(t);
- for (j = 0; j < 5; j++)m[j] = m[j] + o[j] | 0;
- };
- t = new DataView(new Uint32Array(m).buffer);
- for (var i = 0; i < 5; i++)m[i] = t.getUint32(i << 2);
- var hex = Array.prototype.map.call(new Uint8Array(new Uint32Array(m).buffer), function (e) {
- return (e < 16 ? "0" : "") + e.toString(16);
- }).join("");
- return hex;
- };
- function PostSourceActive() {
- if (appEntity.firstOpen) {
- let jsondata = {
- clue_token:appEntity.clue_token,
- open_id:appEntity.wxopenId,
- event_type:"0"
- }
- PostSourceHttp(jsondata)
- }
- }
- export function PostSourceRegister() {
- let jsondata = {
- clue_token:appEntity.clue_token,
- open_id:appEntity.wxopenId,
- event_type:"1"
- }
- PostSourceHttp(jsondata)
- }
- export function PostSourcePay(amount) {
- let jsondata = {
- clue_token:appEntity.clue_token,
- open_id:appEntity.wxopenId,
- event_type:"2",
- props:{
- pay_amount:amount
- }
- }
- PostSourceHttp(jsondata)
- }
- function PostSourceHttp(jsondata){
- let time = Date.now();
- let nonce = Math.round(Math.random()*10);
- let strList = [appEntity.sourcetoken, time, nonce];
- strList.sort();
- let buffer = "";
- strList.forEach(str => {
- buffer += str;
- })
- let sign = sha1(buffer)
- //debugger
- let targeturl = appEntity.sourceUrl + "?timestamp=" + time + "&nonce="+ nonce +"&signature=" + sign
- //console.log("url " + targeturl)
- wx.request({
- url:targeturl,
- header: {
- 'Content-Type': 'application/json',
- 'Request-Origin': 'app'
- },
- data: jsondata,
- method: 'POST',
- success: function (res) {
- //console.log("zhangsan " + JSON.stringify(res.data))
- },
- fail:function(){
- },
- })
- }
- export function WebiOSPay(obj){
- let amount = obj.Fee;
- let accid = appEntity.account_id;
- let url = appEntity.webiOSNotPayUrl;
- let extension = obj.extension
- let server_id = 1
- let game = obj.body
- let goods = "方块大作战充值"
- let targetStr = `../index/index?notify_type=createorder&amount=${amount}&account_id=${accid}¬ify_url=${url}&extension=${extension}&server_id=${server_id}&game=${game}&goods=${goods}`
- //console.log(targetStr + "targetStr")
- wx.openCustomerServiceConversation({
- showMessageCard: true,
- sessionFrom: "game",
- sendMessagePath:targetStr,
- sendMessageTitle:"我要充值",
- sendMessageImg: "https://c-ssl.duitang.com/uploads/blog/202102/12/20210212163554_83b7a.jpg",
- success() {
- //console.log('调起成功');
- },
- fail() {
- //console.log('调起失败');
- }
- });
- }
- export function SendPayResultMessage(re){
- //console.log("zhangsan",re)
- GameGlobal.Module.SendMessage(appEntity.receivername,"PayResult",re);
- }
- export function InitU8Arg() {
- if (appSanboxCfg.sanbox) {
- appEntity.u8appid = appEntity.u8
- appEntity.u8GameId = appEntity.u8GameIdTest;
- appEntity.u8ChannelId = appEntity.u8ChannelIdTest;
- appEntity.u8PackageId = appEntity.u8PackageIdTest;
- appEntity.u8Sign = appEntity.u8SignTest;
- appEntity.u8ServerUrl = appEntity.u8ServerUrlTest;
- appEntity.env = appEntity.envTest
- }
- }
还有个app-entity 存放变量的
- export var appEntity = {
- //与U8交互的口令 暂时没有用
- u8HttpToken : null,
- //测试参数
- u8appidTest:,
- u8GameIdTest : "",
- u8ChannelIdTest : "",
- u8PackageIdTest : "",
- u8SignTest:"",
- u8ServerUrlTest:"",
- //正式参数
- u8appid:,
- u8GameId : "",
- u8ChannelId : "",
- u8PackageId : "",
- u8Sign:"",
- u8ServerUrl:"",
- //登录获取的账户id
- account_id:"",
- //微信的union_id
- union_id:'',
- //登录获取的微信id
- wxopenId:"",
- //后端与微信后端交互口令
- wxtoken:"",
- //unity 是否初始胡完成
- unityHasInit:false,
- //webAndroid 支付url
- webAndroidPayUrl:"",
- //微信后台虚拟货币id
- //offerId:"",
- offerId:"",
- //微信的appid
- wxAppId:"",
- env:0,
- envTest:1,
- //热云appkey
- reYunAppKey:"",
- //
- receivername:"Global",
- //游戏服和微信服交互的token
- weixinServerToken:"",
- //归因
- ad_id:'',
- creative_id:'',
- advertiser_id:'',
- clue_token:'',
- req_id:'',
- project_id:'',
- promotion_id:'',
- mid1:'',
- mid2:'',
- mid3:'',
- mid4:'',
- mid5:'',
- firstOpen:false,
- // 归因服url
- sourceUrl:"",
- sourcetoken:"",
- webiOSNotPayUrl:"",
- //数数
- shushuAppId:"",
- shushuUrl:"",
- ta:"",
- }
Unity 转小游戏的更多相关文章
- Unity小游戏制作 - 暗影随行
用Unity制作小游戏 - 暗影惊吓 最近玩了一个小游戏,叫做暗影惊吓,虽然是一个十分简单的小游戏,但是感觉还是十分有趣的.这里就用Unity来实现一个类似的游戏. 项目源码:DarkFollow 主 ...
- 自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药
自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...
- 自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析
自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...
- 自制Unity小游戏TankHero-2D(3)开始玩起来
自制Unity小游戏TankHero-2D(3)开始玩起来 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的.仅 ...
- 自制Unity小游戏TankHero-2D(2)制作敌方坦克
自制Unity小游戏TankHero-2D(2)制作敌方坦克 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的. ...
- 自制Unity小游戏TankHero-2D(1)制作主角坦克
自制Unity小游戏TankHero-2D(1)制作主角坦克 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的. ...
- Kinect+unity 实现体感格斗闯关小游戏
文章目录 项目地址 1 项目概况 1.1 项目简介 1.2 项目目的 1.3 主要技术 2 设计 2.1 基本概念 2.2 框架 2.3 算法 2.4 模型 2.5 调查问卷 3 实现 3.1 技术难 ...
- 解压小游戏之打砖块(C#+unity)
z这个小游戏很简洁,很简单,非常适合一个人玩,特别减压
- 原创跑酷小游戏《Cube Duck Run》 - - 方块鸭快跑
自从unity5出来才开始关注unity,业余时间尝试做了个小游戏: <方块鸭快跑> (Cube Duck Run) 像素风,3d视角,色彩明快,有无尽和关卡两种模式. 应用连接: goo ...
- 历时一周,unity3d+xtion打造我的第一个休闲体感小游戏《空降奇兵》
1.游戏介绍 本游戏属于休闲小游戏,主要操作如下: 菜单控制:举起左手或右手,点击左边或者右边的菜单:挥动左手或右手,选择关卡: 操作方式:玩家跳跃,游戏中的伞兵从飞机开始降落:玩家通过控制伞兵的左右 ...
随机推荐
- k8s入门_RC、RS、Deployment
RC 什么是RC: Replication Controller(副本控制器),RC能够保证pod在任意时间运行的副本数量,能够保证pod总是可用的. RC控制的pod的多个副本,每个副本都有独立的i ...
- wamp+phpstrom+Xdebuge helper(google)
一.软件安装两个软件的安装和第三个浏览器插件就不再赘述,网上有很多详细的教程,自行百度. 二.配置步骤1.wampwamp的优势在于自带xdebuge的dll文件,所以不需要在官网根据版本下载,具体位 ...
- 三步建立自己域名的主页,Github Pages功能简明手册
[task]把自己的页面上传到git上,用github pages功能托管网页. 准备工作: 1.自己的网页文件 2.有个自己的git账号 3.下载安装git.下载地址https://git-scm. ...
- JDBC之Statement
Statement 目录 Statement Statement Statement概述 要执行的SQL分为两类 查询 增删改 Statement继承体系 SQL注入问题 SQL注入问题解决 获取得到 ...
- linux内核源码编译加制作rpm包
本章主要讲解实际操作步骤,具体理论知识可以自行百度 linux内核官网下载:https://cdn.kernel.org/pub/linux/kernel/ (如图) 根据官网发布的信息分析,目前 ...
- Vite项目打包配置详解
一:vite构建项目 配置base 1.base配置打包公共路径 打开package.json 做项目时可以不去掉 好了,在以上你构建了vite,并配置了最简单的操作后,你准备配置vite.confi ...
- Mac 下的虚拟机Parallels_Desktop_15
Mac 下的虚拟机Parallels_Desktop_15 1,取得 Mac Parallels_Desktop_15.dmg 后挂载,密码:7410 2,点关闭!关闭!关闭!,千万不要点&quo ...
- hadoop克隆三台虚拟机安装JDK和hadoop并配置环境变量
首先将模板虚拟机关机,进行对模板虚拟机的克隆. 选择完整克隆 克隆三台虚拟机. 注意虚拟机的移除与删除 打开hadoop102,修改ip地址与hostname 切换至root用户,或以root用户登录 ...
- ftp服务无法覆盖同名文件
1.linux修改/etc/pure-ftpd/pure-ftpd.conf的AutoRename yes 重启ftp服务 2.windows server修改 选中ftp站点,选择右侧高级设置,选 ...
- redis 数据库在linux下的安装配置与使用
linux安装redis 完整步骤(1)安装: 1.获取redis资源 wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2.解压 t ...