HTML5游戏开发过程中的二三事

最近跟的一款项目是HTML5手游,在这个项目中遇到并解决了诸多问题,也学习到了很多项目开发过程中需要注意的事情。这个项目自立项到现在已经过了5个多月,如今项目研发已经过了早期的忙乱阶段,于是借此机会梳理下思绪,为了能够更好的完成以后的工作。如果能给想进入HTML5这个领域的新团队一些参考,那也是一件极好的事情。

这款项目是我们团队接到的第一款HTML5类型的游戏合约,在此前团队一致在致力于传统回合制手游研发。因此团队可以说在这个领域几乎是从零开始(当然一开始的时候我们不这么觉得),所以在研发进行到中期的时候遇到了很多影响效率的问题。

其中影响最大的问题之一就是——界面适配

HTML5手游这个品类说白了就是把页游装进一个壳里,本质上他还是一个页游,拥有很多页游的特性。它是在页游框架的基础上,将UE对移动设备做了优化。因此该类游戏在后期将会根据渠道需求发行多个版本,包括直接在网页运行(电脑网页和手机网页)、在手机端运行、在平板电脑设备上运行。这样就会带来一个严重的问题——兼容性问题。由于HTML5跨平台的特性,很容易产生兼容问题。最明显的一个就是界面适配问题,最基本的要做到UI在不同长宽比的屏幕下均能完全展示,在这个基础上再考虑对主流长宽比的屏幕进行特殊处理,优化用户体验。

一、适配方案

界面适配的方案一:约束比例缩放(主流方案)

方案描述:该是保持界面中元素的相对位置不变,在不同长宽比的屏幕中进行整体缩放。

这种方案会将界面分为上中下3个区域,将中间的主要区域视作一个窗口根据屏幕比例进行缩放。在缩放的过程中保证窗口长宽比不变,保持长或者宽任意一个维度占满屏幕就可,不强求整体铺满屏幕。

方案优势:处理简单,且最终效果还可以。可以保证UI在不同长宽比的屏幕下均能完全展示,并且UI布局不变。
最终效果如图:


图中黑色部分为空白区域,虽然对界面的美观有一定影响,但是影响不大。如果把中间的区域设计为窗口的样式,会使界面看起来更自然。

界面适配方案二:全屏铺满

方案描述:该方案同样要将界面分为上中下3个区域,只是对中间那块主要区域采用了不同的处理方式。这种方案会要求中间区域底板铺满屏幕,所有处于该底板上的元素坐标需要根据界面的长宽比进行计算,并且界面中的列表,底框等元素的大小也要根据屏幕的长宽比进行计算。

方案优势:该方案可以解决方案一种空白区域的问题,在移动设备上显示更加美观。

该方案的最终效果如图:


这个方案实现较方案一来说更加复杂,并且最终效果不好把控。容易造成不同比例屏幕下UI出现重叠,超出边界等问题。如果处理不好,最终效果反而不如方案一。

从目前市面上的HTML5游戏来看,基本采用方案一就可满足当前用户需求。采用方案二会增加项目研发时长,并且增加人力成本。

二、元素布局方式

我们这个项目使用的是白鹭引擎,在该引擎的UI编辑器中有个约束坐标的功能。使用该功能,可以将元素的坐标相对屏幕四边或者中心进行约束,确保缩放后界面布局随之改变。建议界面中的元素更多的采用约束的形式,而不是绝对坐标。

白鹭引擎中的约束功能:


为什么建议使用约束的形式呢?这是因为约束的方案更有利于保证界面中元素的边距,居中,四边对齐等布局。这样当用户在两个相似界面之间切换时,相同的元素位置也相同。不会出现切换时由于相同元素坐标的微小差异造成的晃动感。并且该方案更方便约定团队成员在拼界面时的规范,只需要约定相同元素的边距,元素互相之间的间距等。再者,如果采用界面适配方案一时使用约束功能的话,后期若要改为方案二,也会更加方便一些。

三、UI标准

规定UI标准对于保证UI的最终效果十分重要。在项目开始之初,就需要设计好界面中的通用控件的样式和规格,包括通用按钮、列表、标签等。并且不同功能标签的字体大小、色值、样式(加粗、描边)等也要有统一的标准。除了以上这些控件的规格和样式,还需要规定游戏中各种弹窗的样式和规格,否则必然会出现弹框大小参差不齐,影响UI美观。

UI就是游戏的脸面,是给用户留下第一印象最直观的内容。因此UI中的各个细节必须保证统一美观,这样才能给用户留下好印象。


别再用Visual Studio写Unity了!

用VSCODE吧!CODE大法好!本来是用code写前端页面,今天为了启用调试,上官网溜达了一圈,发现这货也能写unity3d,回来试了10分钟,当即决定弃用Visual Studio,哈哈哈。 先说设置启用 unity中编辑器设为vscode:image.png vscode中安装两个插件:image.png 使用: 安装完上面的debugger插件后,在debug那里设置unitydeb...

Unity进阶技巧 - RectTransform详解

前言 最近要做UI,有时候需要在代码中调整改变UI控件的属性,比如位置、大小等,然而在NGUI里面,控制UI控件的位置等属性的是RectTransform这个组件,这个组件继承自Transform组件,却增加许多自己的特性,在不了解这些特性的情况下鲁莽的去使用它,会导致出现很多匪夷所思的问题,而且使用起来也不够得心应手,于是决定研究一下RectTransform到底是如何工作的 你将学得到什...

HTML5游戏开发过程中的二三事

最近跟的一款项目是手游,在这个项目中遇到并解决了诸多问题,也学习到了很多项目开发过程中需要注意的事情。这个项目自立项到现在已经过了个多月,如今项目研发已经过了早期的忙乱阶段,于是借此机会梳理下思绪,为了能够更好的完成以后的工作。如果能给想进入这个领域的新团

一段TCP socket和WebSocket互相交互的调试代码

一段TCP socket和WebSocket互相交互的调试代码

十年web前端开发实战经验,写给那些转行做前端的你

在这几年间里,随着W3C标准的不断更新以及node.js的兴起,基于node.js一系列的工具和诸多前端框架都参差不齐的浮出水面。