背景
Pixonic 是一个总部位于莫斯科的视频游戏开发团队,其以抓住每一个机会升级自己的移动应用并覆盖更广泛的玩家群体为荣。该公司最著名的游戏之一是《War Robots》,这是一款 12 人的玩家对战 (PVP) 游戏,玩家可以在即时战场上操作定制的机器人进行决斗。
《War Robots》于 2014 年发布,最初是专为 Android 的早期设备设计的,通过触控板操控游戏角色,用不到鼠标。Pixonic 团队成员都是狂热的游戏玩家。他们认识到,这款应用需要进行一些调整,才能在更多类型的设备(如笔记本电脑和平板电脑)上提供出色的用户体验。《War Robots》已可在任何 Android 设备上畅玩 因为 Chromebook 可以运行完整版 Android 框架 容器内通过再稍作调整,Pixonic ChromeOS 的优势全部功能。
下面将介绍 Pixonic 团队如何优化《War Robots》,让用户在大屏幕上获享最佳使用体验。
策略
为启动优化,Pixonic 在 AndroidManifest.xml,告知系统已准备好全面支持 ChromeOS 并且需要停用触摸模拟:
<uses-feature android:name="android.hardware.type.pc" android:required="false" />
Pixonic 还将该应用的 minSdk 设置为 24,以便 Unity 游戏引擎可以直接接收鼠标点击事件以及所有与移动相关的 API 事件(而不仅仅接收触控板事件)。
键盘和鼠标支持
在《War Robots》等第三人称 PvP 游戏中,使用键盘和鼠标可以更轻松地行进和瞄准(特别是在大屏设备上)。因此,下一步是重写支持游戏战斗模式的键盘和鼠标的代码,同时保留触摸屏控件。
为了在合适的时间提供正确的控件,Pixonic 团队编写了新的代码来检查用户当前的游戏模式:
@Override
public void onConfigurationChanged(Configuration newConfig) {
boolean hasQwertyKeyboard = newConfig.keyboard == Configuration.KEYBOARD_QWERTY && newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO;
try {
UnityPlayer.UnitySendMessage("Receiver", "ConfigChange", new JSONObject().put("keyboard", hasQwertyKeyboard).toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
如果检测到 QWERTY 键盘,游戏将适应桌面设备模式。左下角的移动操纵杆会消失,并且所有可用的操作(例如按照武器、技能与菜单排序)均通过键盘快捷键进行标记。
如果未检测到键盘,移动操纵杆将显示在左下角,而键盘快捷键会隐藏在右下角的菜单按钮上。
接下来,Pixonic 希望确保光标在玩家使用鼠标旋转镜头时保持隐藏状态。通过以 Android 7.0(API 级别 24)或更高版本作为目标平台,该团队可以设置任何指针图标。在本例中,该团队使用透明位图使光标在游戏过程中不可见:
public boolean setPointerVisibility(boolean visible) {
View = activity.findViewById(android.R.id.content);
view.setPointerIcon(PointerIcon.getSystemIcon(activity, visible ? PointerIcon.TYPE_DEFAULT : PointerIcon.TYPE_NULL));
}
这可确保当所有其他窗口关闭且正处于战斗过程中时,光标会停用且不可见。如果出现弹出式窗口(如暂停菜单),Pixonic 会让光标可见,并显示其默认图标。
调整游戏教程和机制
为提供更好的用户体验,Pixonic 还编写了新的代码,以根据用户当前的设备模式显示不同的游戏教程。如果玩家在战斗期间在平板电脑游戏模式与笔记本电脑游戏模式之间切换,而尚未看到不同模式的教程,系统会在游戏恢复运行之前显示教程。
当玩家处于笔记本电脑模式时,Pixonic 还会停用触摸屏镜头控件(因为玩家会使用鼠标控制镜头),但所有游戏按钮都可以正常使用。该团队使用 Input.touchCount
属性(在 Unity 脚本中)来区分触摸移动与鼠标移动:
if(Input.touchCount > 0) {
// this is screen touch event
} else {
// this is mouse (touchpad) event
}
多窗口支持
最后,Pixonic 希望确保游戏启动后在全屏模式下不会锁定。在 ChromeOS 中启用窗口化游戏内容后, 用户可以在玩游戏的同时观看自己喜爱的直播者 同时阅读有关这个星球上的新功能 游戏的网站,或在 被动模式。
为此,Pixonic 将 UnityPlayerActivity
标记为可调整大小:
<activity android:name="com.unity3d.player.UnityPlayerActivity" ....
android:resizeableActivity="true">
考虑到游戏界面只有在特定尺寸范围内看起来可以播放,该团队设置了支持的最小窗口大小:
<activity … >
<layout android:gravity="center" android:minHeight="800dp" android:minWidth="1200dp" />
</activity>
为了实现最佳的沉浸式游戏体验,Pixonic 使用元标记将全屏模式设置为默认模式,并且用户可以根据需要设置为横屏模式。
<application>
<meta-data android:name="WindowManagerPreference:FreeformWindowSize" android:value="maximize" />
<meta-data android:name="WindowManagerPreference:FreeformWindowOrientation" android:value="landscape" />
….
</application>
这些优化还能确保游戏不会暂停,且战斗平视显示 (HUD) 随着玩家扩大和缩小游戏窗口而相应地扩缩。
结果
得益于庞大的在线资源库,Pixonic 的五人开发团队仅花费两周时间就完成了整个开发流程。
自从发布以来,已有超过 10 万玩家在 ChromeOS 上玩《War Robots》 Pixonic 推出了最新的优化功能。由于游戏现在可以充分利用大屏幕的更大空间,因此相较之前,《War Robots》的战斗更逼真,参与感也更强。事实上,与其他 Android 设备相比,Chromebook 上的用户会话时长提升了 25%。早期反馈非常好,一些玩家甚至表示,相较于 BlueStack 的模拟器,针对 Chromebook 进行优化的游戏运行更为顺畅。
基于自身的成功经验,Pixonic 开发者计划在所有 Android 设备上更新《War Robots》中的图形,以使移动设备游戏体验更加接近 PC 级游戏体验。
查看针对 ChromeOS 优化应用的一些最佳做法。