游戏微端的多渠道思路和简易的自动化打包工具

简介:



页游微端的几个问题及解答

为什么要开发游戏微游?

众所周知,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%28VS.80%29.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 中

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


本文转自赵青青博客园博客,原文链接:http://www.cnblogs.com/zhaoqingqing/p/5774509.html,如需转载请自行联系原作者

相关文章
|
1月前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
3月前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
86 3
|
1月前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
188 17
Selenium:强大的 Web 自动化测试工具
|
1月前
|
运维 Kubernetes Devops
自动化运维:从脚本到工具的演进之旅
在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文将探索自动化运维的发展脉络,从基础的Shell脚本编写到复杂的自动化工具应用,揭示这一技术变革如何重塑IT运维领域。我们将通过实际案例,展示自动化运维在简化工作流程、提高响应速度和降低人为错误中的重要作用。无论你是初学者还是资深专家,这篇文章都将为你提供宝贵的洞见和实用的技巧。
|
2月前
|
机器学习/深度学习 人工智能 运维
自动化运维之路:从脚本到工具的演进
在IT运维领域,效率和准确性是衡量工作成效的关键指标。随着技术的发展,自动化运维逐渐成为提升这两个指标的重要手段。本文将带领读者了解自动化运维的演变历程,从最初的简单脚本编写到现今复杂的自动化工具应用,展示如何通过技术提升运维效率。文章不仅介绍理论和实践案例,还提供了代码示例,帮助读者理解自动化运维的实际应用场景。
|
2月前
|
JavaScript 前端开发 开发者
探索 DrissionPage: 强大的Python网页自动化工具
DrissionPage 是一个基于 Python 的网页自动化工具,结合了浏览器自动化的便利性和 requests 库的高效率。它提供三种页面对象:ChromiumPage、WebPage 和 SessionPage,分别适用于不同的使用场景,帮助开发者高效完成网页自动化任务。
242 4
|
2月前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
2月前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
78 4
|
2月前
|
运维 监控 数据安全/隐私保护
自动化运维工具的设计与实现
【10月更文挑战第34天】在现代IT基础设施管理中,自动化运维工具扮演着至关重要的角色。它们不仅提高了运维效率,还确保了服务的连续性和稳定性。本文将深入探讨如何设计并实现一个自动化运维工具,从需求分析到功能实现,再到最终的测试与部署。我们将通过一个简单的代码示例来展示如何自动执行常见的运维任务,如日志清理和性能监控。文章旨在为读者提供一套完整的方法论,以便他们能够构建自己的自动化运维解决方案。
|
3月前
|
JavaScript 前端开发 搜索推荐
Gulp:构建自动化与任务管理的强大工具
【10月更文挑战第13天】Gulp:构建自动化与任务管理的强大工具
102 0