事先說明:
此篇文章重在介紹:"操前準備",實際操作會在下篇介紹.
裡面用的遊戲開發引擎是unity,使用騰訊雲遊戲對戰引擎,接入得是騰訊雲中得日志服務CLS.
此操作得用處:
遊戲聯機對戰引擎 MGOBE 的采集的實時伺服器日志将上報到 日志服務 CLS,開發者可登入 日志服務控制台 檢視。
那麼我們首先該怎麼使用呢?如果你隻是想嘗試一下産品的話,那麼你可以登陸 這個網址 中檢視免費的使用.如果覺得合适,你就可以付費使用.
登陸這個網址之後會見到如下界面:
如果你想要去看其他的産品,點選對應的按鈕即可,那麼這裡,我來示範一下如何接入騰訊雲遊戲對戰引擎 MGOBE,并擷取裡面的日志消息.
首先我們點選騰訊雲遊戲對戰引擎 MGOBE的按鈕
進到介紹:如何使用實時伺服器日志,那麼在使用之前,得有兩個必要條件,首先是要有一個遊戲在騰訊雲中正在跑,還有一個必要條件就是你已經有了一個實力得伺服器,如果你沒有,那也不用擔心,騰訊雲會給你一個可以使用得示例伺服器,也可以拿來測試一下.
那麼首先,我們先開通并建立一個遊戲服務:
在騰訊雲的官網上直接搜尋:"對戰引擎",第一個就是,點選立即使用就可以來到控制台,如果你是第一次使用,那麼它會提示你一些需要勾選一些條款.勾選之後,你就可以建立一個自己的遊戲了
那麼選擇你要做的遊戲,每一種遊戲提供的服務是不一樣的.我這裡選擇的是unity類型的遊戲,建好了之後,會看到具體的資訊:
最重要的就是前3個資訊,一定要儲存好,不能洩露,如果洩露了,别人會根據你的這個資訊來使用你的流量.當我做完這個功能,我就會删除這個遊戲,大家也不用記錄.
裡面的計費方式:
遊戲聯機對戰引擎 MGOBE 于2019年8月12日正式開啟公測,使用者在此期間可免費使用。免費期限截止于2019年12月31日,從2020年1月1日開始正式計費。
遊戲聯機對戰引擎 MGOBE 按遊戲 DAU 以及流量用量計費,日結後付費。
您可以在遊戲聯機對戰引擎 MGOBE 的控制台内使用雲開發 TCB 服務,TCB 的計費與 MGOBE 互相獨立。
DAU 定價
付費類型 | DAU 範圍 | 單價(元/DAU/日) |
---|---|---|
國内站價格 | ||
DAU ≤ 500 | ||
500 < DAU ≤ 8000 | 0.0031 | |
8000 < DAU ≤ 2W | 0.0027 | |
2W < DAU ≤ 5W | 0.0025 | |
5W < DAU ≤ 10W | 0.0024 | |
DAU > 10W | 聯系商務報價 |
注意:
- 玩家初始化成功即算作 DAU,DAU 按照一個遊戲一天内的 player ID 去重計算(player ID 是遊戲内使用者的唯一辨別符,一個遊戲内的一個使用者對應一個 player ID)。
- DAU 計費模式為從免費額度開始,享受累進階梯價,即每段 DAU 使用一個單價,每個階梯内的用量與該階梯的單價相乘,累加後得出總價。
流量定價
免費流量(活動期間)
遊戲聯機對戰引擎 MGOBE 活動期間(從即日起至2021年12月31日)向您贈送部分流量,贈送規則如下:
- 每個遊戲贈送流量額度為1GB/天,贈送流量僅可用于遊戲聯機對戰引擎。當天産生的贈送額度當天有效。
- 若當天流量消耗超過贈送額度,超額部分需要按流量定價标準按量付費。
流量定價标準
付費類型 | 單價(元/GB) |
---|---|
國内站價格 | 0.8 |
注意:
上述所有“流量”均表示出流量;入流量不産生流量費用。
費用示例
某遊戲一天的 DAU 資料為2560,産生2GB流量。
贈送流量額度:1GB
該遊戲當天的費用分為兩部分:
- DAU 費用:500 × 0 + (2560 - 500) × 0.0031 = 6.386元
- 流量費用:(2GB - 1GB) × 0.8 = 0.8元
該遊戲當天産生的總費用為:6.386 + 0.8 = 7.186元
當然,如果你是一個測試的使用者,那麼這些免費額度足夠你來測試了.
那麼我們再來做第二個必要條件:實時伺服器,也許,你沒有這樣的伺服器,那你也不用擔心,因為騰訊雲中提供了一個完整的架構,你隻需要下載下傳并且在裡面修改即可.
下載下傳位址
其實這個伺服器的功能并不是要和CLS對接産生日志,其實它是一個遊戲伺服器的一個"擴充",比如遊戲服務端拓展邏輯,如儲存玩家資料,遊戲狀态同步等.
那麼下載下傳下來之後檢視裡面的檔案:
需要我們自己動手修改的,大部分都在index檔案中.我們先嘗試着打開這個檔案來檢視裡面的代碼:
import { mgobexsInterface } from './mgobexsInterface';
const gameServer: mgobexsInterface.GameServer.IGameServer = {
mode: 'sync',
onInitGameData: function (): mgobexsInterface.GameData {
return {};
},
onRecvFromClient: function onRecvFromClient({ actionData, gameData, SDK, room, exports }: mgobexsInterface.ActionArgs<mgobexsInterface.UserDefinedData>) {
gameData.pos = Math.floor(Math.random() * 2000);
SDK.logger.debug('onRecvFromClient', gameData, actionData);
setTimeout(() => {
SDK.sendData({ playerIdList: [], data: { data: gameData, ts: new Date().toISOString() } }, { timeout: 2000, maxTry: 3 });
SDK.exitAction();
}, gameData.pos);
},
onJoinRoom: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onJoinRoom',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onCreateRoom: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onCreateRoom',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onLeaveRoom: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onLeaveRoom',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onRemovePlayer: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onRemovePlayer',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onDestroyRoom: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onDestroyRoom',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onChangeRoom: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onChangeRoom',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onChangeCustomPlayerStatus: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onChangeCustomPlayerStatus',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onChangePlayerNetworkState: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onChangePlayerNetworkState',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onStartFrameSync: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onStartFrameSync',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onStopFrameSync: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onStopFrameSync',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onChangeRoomPlayerProfile: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onChangeRoomPlayerProfile',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
};
// 伺服器初始化時調用
function onInitGameServer(tcb: any) {
// 如需要,可以在此初始化 TCB
const tcbApp = tcb.init({
secretId: "請填寫騰訊雲API密鑰ID",
secretKey: "請填寫騰訊雲API密鑰KEY",
env: "請填寫雲開發環境ID",
serviceUrl: 'http://tcb-admin.tencentyun.com/admin',
timeout: 5000,
});
// ...
}
export const mgobexsCode: mgobexsInterface.mgobexsCode = {
logLevel: 'error+',
logLevelSDK: 'error+',
gameInfo: {
gameId: "請填寫遊戲ID",
serverKey: "請填寫後端密鑰",
},
onInitGameServer,
gameServer
}
複制
那麼會看到裡面有房間相關的,玩家狀态相關的,還有一些幀同步相關的.當然,裡面還有一些需要你填寫你的,那麼我們先把這個填好,然後再次壓縮成zip檔案.
部署實時伺服器
登入 遊戲聯機對戰引擎控制台,單擊左側菜單【自定義服務邏輯】>【實時伺服器】。
單擊【建立服務】,進入建立服務界面。
裡面有幾個選項需要說明的是:
- 選擇是否打通 VPC 網絡。打通騰訊雲的 VPC 網絡,可以通路您 VPC 下的資料庫和存儲,開通後不可變更。
- 若您選擇打通 VPC ,而 VPC 下拉菜單為空,則您需要先去 私有網絡 建立一個 VPC;建議您在上海地區建立 VPC,如在其他地區建立,則需通過 對等連接配接 實作 VPC 跨地域通信(上海和其他地區),并為對等連接配接付費。
設定執行個體數量範圍,最大值為20。預設為自動調節,即在設定的執行個體範圍内自動調節,不會超出該設定範圍。
然後,點選部署,即可完成,那麼到這裡,我們的一個基本介紹與操前準備就完成了
繼續往下做,那麼要把index.js檔案中的需要填好的資訊填好,比如:
添加描述
gameid和serverKey,這兩個字段都可以在你的遊戲對戰引擎控制台找到它,複制過去就可以了.
那麼接下來要填寫的是:
添加描述
那麼這幾個需要填寫,首先前兩個都好說:
點選雲API擷取連接配接“https://console.cloud.tencent.com/cam/capi”,登入騰訊雲賬号,顯示如下:
添加描述
擷取密鑰
然後最後一個env代表的是雲開發環境ID,那麼這個就需要到另外一個地方來擷取了.
https://console.cloud.tencent.com/tcb/env/index?rid=4,建立一個
添加描述
然後點選下一步
添加描述
然後你就會獲得一個雲開發環境ID,當然這個也是先用後付費.
把修改好的檔案儲存,并再次将它打包成zip格式.
添加描述
然後回到日志部署的控制台,然後将此zip包上傳就好.
修改好之後點選部署,稍微等待一下即可
添加描述
添加描述
那麼這個時候就已經部署好了,你隻需要運作你的遊戲,然後就會在cls中看到日志.具體的日志就是index.js中的那些方法中所需要生成的日志.
然後運作你的遊戲
添加描述
如果你沒有現成的遊戲,你同樣可以在騰訊雲上找到一個完整的例子,這裡給騰訊雲點個贊,因為他們的努力,給我們省了不僅僅是一點的事.
那麼具體的方法詳見我的另外一個系列的文章:
https://cloud.tencent.com/developer/article/1809023,這是系列的第一篇,有需要的可以翻翻看.
等待大概30s-1分鐘之後,會有日志資訊:
添加描述
看,是不是超級自動化.這也和cls的介紹中說的一樣,隻需要點幾下滑鼠,即可完成部署.
enjoy it !