背景
总部位于莫斯科的视频游戏开发团队 Pixonic 以追求每一次提升其移动应用并覆盖更广泛游戏玩家的机会为荣。该公司最知名的作品之一是 战争机器人,这是一款 12 人参与的玩家对战 (PvP) 体验,玩家在实时战场上操控和对战定制机器人。
战争机器人于 2014 年发布,最初是为 Android 早期采用触控板移动且无鼠标输入的设备设计的。Pixonic 团队本身就是狂热的玩家,他们意识到该应用需要进行一些修改才能在更广泛的设备(如笔记本电脑和平板电脑)上提供出色的用户体验。由于 Chromebook 在容器内运行 Android 框架的完整版本,战争机器人已可以在任何 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 的五名开发人员两周时间。
自从 Pixonic 推出最新优化以来,已有超过 100,000 名玩家在 ChromeOS 上玩过 War Robots。由于游戏现在可以利用大屏幕上的额外空间,因此 War Robots 战斗比以往更加沉浸和引人入胜。事实上,与其他 Android 设备相比,Chromebook 上的用户会话时间延长了 25%。早期反馈非常积极,一些玩家甚至注意到经过 Chromebook 优化的游戏运行比 BlueStacks 的模拟器更流畅。
基于他们的成功,Pixonic 的开发人员计划更新所有 Android 设备上的 War Robots 图形,使游戏体验更接近 PC 级别的体验。
查看一些关于优化您的应用以适应 ChromeOS的最佳实践。