頁游微端的幾個問題及解答
為什么要開發游戲微游?
眾所周知,Google大佬的Chrome瀏覽器在2015年時停止支持NPAPI,unity3d引擎的web player也是NPAPI的范疇,而我司的3D網頁游戲正是使用unity3d引擎的web player,所以在Chrome 45及之后版本將打開我們的游戲。
微端版是導出windows平台而不是web player?
正是如此,下載微端玩的正是導出game.exe+game_Data而不是webplayer.unity3d+html,簡單點來說: 通過下載微端玩游戲其實是客戶端游戲(端游),而通過網頁入口玩游戲還是unity web player.
為什么微端不是內嵌網頁而是客戶端游戲?
這個問題問的好!
假如是內嵌網頁,那么玩家的還是要已安裝unity web player才能進入游戲(網頁插件類似flash)
客戶端游戲無需安裝web player插件,且端游可以利用更多系統性能,比如多線程,保存資源到本地等
為什么要做多平台/渠道打包功能?
我司U3D開發的大型3DMMORPG網頁游戲,先后在騰訊,49游上線,近期內將和更多渠道和平台聯運,包括多玩(yy),37玩,愛樂玩等。
微端登錄和充值的流程
- 微端登錄器 ——> 登錄渠道——>回調游戲服務器 ——>啟動並進入游戲
- 游戲內充值——> 跳到渠道的充值接口——>回調游戲服務器——>向游戲發放道具
1. 代理商和策划提出的需求
- 騰訊的游戲版本是1.1
- 多玩的版本是1.2
- 49游的版本是1.3
所以游戲資源需要進行分渠道管理,代碼也進行分支版本管理。
2. 不同渠道/平台的微端有什么區別?
- 騰訊渠道:ab資源+代碼,微端登錄頁QQ空間,支付是跳轉到廣點通
- 49游渠道:ab資源+代碼,微端登錄頁平台分配的游戲入口,支付是跳轉到49游充值
- 多玩渠道:ab資源+代碼,微端登錄頁yy登錄,支付是跳轉到yy游戲充值中心
- 愛 樂 玩 :ab資源+代碼,微端登錄頁平台分配的游戲入口,支付是跳轉到愛樂玩充值
3. 多平台要做的事
從上述2中可以看出,不同的渠道對應不同的微端以應付差異化,目前來說資源路徑,代碼,登錄,充值鏈接等一些配置信息上的差異,當然每個渠道微端的外觀也可能有差異
微端的技術分析請閱讀:[http://www.cnblogs.com/zhaoqingqing/p/5671398.html](http://www.cnblogs.com/zhaoqingqing/p/5671398.html)
多渠道思路分析
思路1.單母包+安裝器+配置表
微端只打包一次,安裝器打包多次,每個平台/渠道有自己的專屬配置文件
如何識別微端的渠道?
微端啟動時讀取目錄中的配置文件識別當前平台,並將參數傳遞給游戲客戶端
如何發布不同渠道的微端?
-
A渠道 = 母包 + A渠道配置文件 + A渠道安裝器
-
B渠道 = 母包 + B渠道配置文件 + B渠道安裝器
-
N渠道 = 母包 + N渠道配置文件 + N渠道安裝器
微端母包有那些文件?
- fileupdate : 檢查更新程序
- launcher: 游戲登錄器/啟動器
- uninst : 卸載程序
- unity pc game : unity 導出的windows程序,包含游戲的初始資源及配置文件
更多微端的技術分析請閱讀:http://www.cnblogs.com/zhaoqingqing/p/5671398.html
思路2.打多次包 宏定義
把渠道的配置信息寫在代碼中,通過宏定義區分不同的渠道,但需要打包多次
string loginURL = "";
#if you49
loginURL = http://ylxxz.49you.com/client_login.html
#elif ewan21
loginURL = http://www.2lewan.com/client/ylxxz
#elif duowan
loginURL = http://www.duowan.com/ylxxz
#endif
如何識別微端的渠道?
答:微端啟動時,通過代碼中的宏定義識別識別當前平台,並將參數傳遞給游戲客戶端
如何發布不同渠道的微端?
- A渠道 = 打包A渠道包
- A渠道 = 打包B渠道包
- N渠道 = 打包N渠道包
我的解決方案
經過思考后我使用思路1母包+配置表 (注意點:針對不同的渠道,安裝器需要重新打包)
實現步驟
自己編寫簡易的多渠道打包工具,打包工具主要功能及界面如下
- 主界面:自動編譯母包+安裝器
- 渠道選擇:從列表選擇渠道,程序自動驗證渠道配置信息並提供預覽
- 打包結果:記錄並顯示打包結果
項目設定
打包工具結合項目的配置信息,進行多渠道打包,項目工程目錄如下
-
微端母包 源代碼
-
微端安裝器 源代碼
-
各個平台/渠道 配置文件 /channel_configs 里面的文件如下
- 49you.json
- 2lewan.json
- duowan.json
- 37wan.json
-
打包后的渠道文件存放位置 /channel_packages
- /49you
- /2lewan
- /duowan
- /37wan
安裝器打包思路
- 合並安裝器+配置文件
- vs打包配置(xml)
- 配置信息寫在代碼中,打包時替換代碼文件或動態生成代碼文件
思路1. 安裝器和config合並
通過ilmerge合並文件
只能合並.net assemblies ,不能合並txt等非.net類型文件
http://www.microsoft.com/en-us/download/details.aspx?id=17630
https://ilmergegui.codeplex.com/
通過配置文件創建純資源dll
https://msdn.microsoft.com/zh-cn/library/24b2tcy0(VS.80).aspx?f=255&MSPPError=-2147217396
此方法覺得本末倒置了,所以決定使用msbuild來打包不同的安裝器
思路2. msbuild
在 Visual Studio 中構建應用程序的三種方式: https://msdn.microsoft.com/zh-cn/library/cyz1h6zd.aspx
msbuild 參考: https://msdn.microsoft.com/zh-cn/library/dd393574.aspx
msbuild + xml (project.csproj)
msbuild 打包
條件編譯符號(預編譯宏)
項目解決方案:WinForm.sln,主要代碼如下:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
string channel = "default";
#if GooglePlay
channel="google play";
#elif Samsung
channel="sam sung store";
#elif AppStore
channel="app store";
#endif
this.textBox1.Text = channel;
}
}
假設當前要打包 googleplay渠道
msbuild /m WinForm.sln /t:Rebuild /p:Configuration=Debug /p:DefineConstants="GooglePlay"
假設當前要打包 AppStore渠道
msbuild /m WinForm.sln /t:Rebuild /p:Configuration=Debug /p:DefineConstants="AppStore"
/p:DefineConstants="AppStore"
指定宏
proj配置文件分析
*.proj (.net項目文件),本質上是一個xml文件,在build時根據這里面的參數進行build
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG;AppStore</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
msbuild 文檔資料
MSBuild 命令行參考 https://technet.microsoft.com/zh-cn/library/ms164311(v=vs.85).aspx
msbuild-msdn : https://msdn.microsoft.com/zh-cn/library/dd393574.aspx
可能遇到的問題
msbuild 不是內部或外部命令?
起因:家里的機器上同時安裝VS2013 ,VS15(2016) 莫名出現msbuild不是內部或外部命令
解決辦法:
C:\Program Files (x86)\MSBuild\12.0\Bin\
添加到環境變量的 path 中
如果是vs2017 pro,我的msbuild路徑在這兒:C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe
devenv 不是內部或外部命令?
解決辦法:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ 添加到環境變量的path中
示例打包腳本
打包單個項目和打包多個項目的示例腳本
https://github.com/zhaoqingqing/blog_samplecode/blob/master/build-tools/build_donet_signle_csproj.bat
https://github.com/zhaoqingqing/blog_samplecode/blob/master/build-tools/build_donet_muilt_csproj.bat
msbuild打包腳本可參考
https://github.com/zhaoqingqing/blog_samplecode/blob/master/build-tools/msbuild-sample.cmd