游戲微端的多渠道思路和簡易的自動化打包工具


頁游微端的幾個問題及解答

為什么要開發游戲微游?

眾所周知,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. 微端登錄器 ——> 登錄渠道——>回調游戲服務器 ——>啟動並進入游戲
  2. 游戲內充值——> 跳到渠道的充值接口——>回調游戲服務器——>向游戲發放道具

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

安裝器打包思路

  1. 合並安裝器+配置文件
  2. vs打包配置(xml)
  3. 配置信息寫在代碼中,打包時替換代碼文件或動態生成代碼文件

思路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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM