背景
Pixonic 是一家总部位于莫斯科的视频游戏开发团队,致力于抓住每一个机会来升级其移动应用,并触达更广泛的游戏玩家受众。该公司最著名的游戏之一是 War Robots,这是一款 12 人玩家对战 (PvP) 体验,玩家在实时战场上操作并驾驶定制机器人进行对决。
《War Robots》于 2014 年发布,最初是为 Android 早期设备设计的,采用基于触摸板的移动方式,没有鼠标输入。Pixonic 团队本身也是狂热的游戏玩家,他们认识到该应用需要一些修改才能在更广泛的设备(如笔记本电脑和平板电脑)上提供出色的用户体验。《War Robots》已经可以在任何 Android 设备上玩,因为 Chromebooks 在容器中运行完整版 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 键盘,游戏会适应桌面模式。左下角的移动摇杆会消失,所有可用操作(如武器排序、能力和菜单)都会标有键盘快捷键。

笔记本电脑模式下的《War Robots》。
如果未检测到键盘,移动摇杆会出现在左下角,键盘快捷键则隐藏在右下角菜单按钮上。

平板电脑/移动玩法模式下的《War Robots》。
接下来,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>

以窗口模式启动的《War Robots》。
这些优化还确保了游戏不会暂停,并且战斗 HUD 会随着玩家放大和缩小游戏窗口而相应地缩放。
成果
得益于大量 在线资源,Pixonic 的五人开发团队仅用了两周时间就完成了整个过程。
自 Pixonic 推出最新优化以来,已有超过 10 万玩家在 ChromeOS 上玩过《War Robots》。由于游戏玩法现在可以利用大屏幕的额外空间,因此《War Robots》的战斗比以前更具沉浸感和吸引力。事实上,Chromebook 上的用户会话时间比其他 Android 设备长 25%。早期反馈非常积极,一些玩家甚至指出,经过 Chromebook 优化的游戏运行起来比 BlueStacks 模拟器更流畅。
基于他们的成功,Pixonic 的开发者计划更新《War Robots》在所有 Android 设备上的图形,使游戏玩法更接近 PC 质量体验。
查看一些 优化您的应用以适应 ChromeOS 的最佳实践。