پس زمینه
Pixonic ، تیمی از توسعهدهندگان بازیهای ویدیویی که دفتر مرکزی آن در مسکو است، به دنبال هر فرصتی برای ارتقای برنامههای موبایل خود و دستیابی به مخاطبان گستردهتری از گیمرها میبالد. یکی از شناختهشدهترین عناوین این شرکت War Robots است، یک تجربه 12 نفره Player-Vs-Player (PvP) که در آن بازیکنان در یک میدان نبرد زنده با روباتهای سفارشیسازی شده دوئل میکنند.
War Robots که در سال 2014 منتشر شد، در اصل برای دستگاه های نسل اولیه اندروید با حرکت مبتنی بر تاچ پد و بدون ورودی ماوس طراحی شده بود. تیم Pixonic که خود گیمرهای مشتاق هستند، متوجه شدند که این برنامه برای ارائه یک تجربه کاربری عالی در طیف گستردهتری از دستگاهها، مانند لپتاپ و تبلت، به چند اصلاح نیاز دارد. War Robots قبلاً در هر دستگاه اندرویدی قابل پخش بود زیرا کرومبوکها نسخه کامل چارچوب Android را در یک ظرف اجرا میکردند . Pixonic با ایجاد چند ترفند دیگر در کدنویسی توانست از تمام قابلیتهای ChromeOS استفاده کند.
در اینجا نحوه بهینهسازی رباتهای جنگی توسط تیم Pixonic برای تجربههای بهینه در نمایشگرهای بزرگتر آمده است.
کاری که آنها انجام دادند
برای شروع بهینهسازیها، Pixonic یک تگ فراداده در AndroidManifest.xml اضافه کرد که به سیستم میگوید برای پشتیبانی کامل ChromeOS آماده است و باید شبیهسازی لمسی را غیرفعال کند:
<uses-feature android:name="android.hardware.type.pc" android:required="false" />
Pixonic همچنین minSdk برنامه را روی 24 تنظیم کرد تا موتور بازی Unity بتواند مستقیماً کلیک های ماوس و همه رویدادهای API مربوط به حرکت (نه فقط رویدادهای صفحه لمسی) را دریافت کند.
پشتیبانی از صفحه کلید و ماوس
در بازیهای PvP سوم شخص مانند War Robots، حرکت و هدفگیری با استفاده از صفحهکلید و ماوس، مخصوصاً در دستگاههای با صفحهنمایش بزرگتر، بسیار آسانتر است. بنابراین، گام بعدی بازنویسی کد پشتیبانی از صفحه کلید و ماوس برای حالت نبرد بازی با حفظ کنترل های صفحه لمسی بود.
برای ارائه کنترلهای مناسب در زمان مناسب، تیم 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 آخرین بهینهسازیها را ارائه کرد، بیش از 100000 بازیکن قبلاً War Robots را در ChromeOS بازی کردهاند. از آنجایی که گیم پلی بازی اکنون می تواند از فضای اضافه شده در صفحه نمایش های بزرگتر استفاده کند، نبردهای War Robots حتی فراگیرتر و جذاب تر از قبل هستند. در واقع، جلسات کاربر در کرومبوکها در مقایسه با سایر دستگاههای اندرویدی ۲۵ درصد طولانیتر است. بازخوردهای اولیه فوقالعاده مثبت بوده است، و برخی از بازیکنان حتی متوجه شدهاند که بازی بهینهشده کرومبوک نرمتر از شبیهساز BlueStacks اجرا میشود.
بر اساس موفقیت خود، توسعه دهندگان Pixonic قصد دارند گرافیک War Robots را در تمام دستگاه های اندرویدی به روز کنند تا گیم پلی بازی را حتی به تجربه ای با کیفیت PC نزدیک تر کنند.
برخی از بهترین روشها را برای بهینهسازی برنامههای خود برای ChromeOS بررسی کنید.