۱. مقدمه

آخرین بهروزرسانی: 2022-10-18
چگونه بازی خود را برای Google Play Games در کامپیوتر آماده میکنید؟
گوگل پلی گیمز (Google Play Games) به راحتی امکان اجرای بازیهای موبایل روی کامپیوترهای ویندوزی را فراهم میکند. این یعنی میتوانید بدون نیاز به تغییر معماری بازی یا طراحی مجدد مدل کسبوکارتان، تعامل بازیکنان و مخاطبان خود را افزایش دهید. هنوز چند تغییر وجود دارد که باید انجام دهید تا بهترین تجربه ممکن را به بازیکنان جدید کامپیوتر شخصی خود ارائه دهید.
آنچه یاد خواهید گرفت
این آزمایشگاه کد، بخشهای پایه چک لیست الزامات برای شروع بازی شما را پوشش میدهد و به شما کمک میکند تا بازی Unity خود را برای Google Play Games روی کامپیوتر آماده کنید. یکپارچهسازیهای عمیقتر، مانند ورود به Play Games و API Play Integrity، پوشش داده نمیشوند.
- نحوه ساخت برای معماری x86 از Unity.
- نحوه آزمایش و استقرار در شبیهساز بازیهای گوگل پلی.
- چگونه رابط کاربری خود را تغییر دهید تا در کامپیوتر عالی به نظر برسد.
- چگونه تشخیص دهیم که آیا بازی را در شبیهساز Google Play Games اجرا میکنیم و آن را با شرایط وفق دهیم.
آنچه نیاز دارید
- نصب Unity 2020 LTS (این codelab با نسخه 2020.3.30f1 ساخته شده است).
- شبیهساز بازیهای گوگل پلی .
۲. آماده شوید
باز کردن یا ایجاد یک پروژه جدید
- با استفاده از میکروگیم پلتفرمر دوبعدی، یک پروژه جدید ایجاد کنید، یا پروژه خودتان را باز کنید.

- از پروژه، File -> Build Settings را انتخاب کنید و بررسی کنید که برای ساخت برای اندروید تنظیم شده باشید.

۳. شبیهساز بازیهای گوگل پلی را آماده کنید
با دانلود شبیهساز شروع کنید.
پس از نصب، باید یک دسکتاپ اندروید را در یک پنجره مشاهده کنید:

این یک محیط اندروید با امکانات کامل و عملکرد بالا و مناسب برای توسعه بازی است. باید در Android Debug Bridge (adb) به عنوان دستگاهی در localhost نمایش داده شود:
❯ adb devices List of devices attached localhost:6520 device
برای شناسایی شبیهساز به نسخه جدیدی از adb نیاز دارید. نسخهای که همراه با اندروید استودیو ارائه میشود کار میکند، اما adb که همراه با یونیتی ارائه میشود ممکن است کار نکند. یک نسخه سازگار با شبیهساز همراه آن است و میتوانید آن را در مسیر C:\Program Files\Google\Play Games Developer Emulator\current\emulator پیدا کنید. برای بهترین تجربه توسعهدهنده، میتوانید اندروید استودیو را نصب کرده و از آن برای مدیریت SDK اندروید خود استفاده کنید.
اگر اتصال شبیهساز از adb قطع شد، آن را از طریق خط فرمان به این صورت دوباره وصل کنید:
adb connect localhost:6520
۴. پیکربندی Unity برای ساخت و استقرار مستقیم در شبیهساز (اختیاری)
ممکن است نسخه adb ارائه شده با Unity با شبیهساز سازگار نباشد. برای اطمینان، File -> Build Settings را انتخاب کنید و کادر Run Device را بررسی کنید تا ببینید آیا در لیست وجود دارد یا خیر.

بسته به پروژه، فرآیند ساخت و سطح راحتی شما، میتوانید Unity را طوری پیکربندی کنید که مستقیماً در شبیهساز بازیهای Google Play مستقر شود، یا یک APK بسازید و آن را به صورت دستی با adb install مستقر کنید. استقرار دستی آن به کمترین تغییرات نیاز دارد، اما ممکن است چرخه تکرار شما را کند کند.
با این دو مرحله مستقیماً روی شبیهساز مستقر کنید:
- یونیتی را طوری پیکربندی کنید که از یک Unity SDK دیگر استفاده کند، در حالت ایدهآل، همانی که توسط اندروید استودیو نصب شده است.
- برای رفع یک اشکال در Unity، نسخه Build Tools را بهروزرسانی کنید.
از آنجا که نسخه Android SDK که با Unity عرضه شده است احتمالاً شبیهساز را شناسایی نمیکند، شما از Android Studio برای نصب یک SDK جدیدتر استفاده میکنید.
- اندروید استودیو را باز کنید و Edit -> Preferences -> External Tools را انتخاب کنید.
- تیک
Android SDK Tools Installed with Unityرا بردارید و مسیر نصب اندروید استودیو (معمولاًAppData/Local/Android/sdk) را وارد کنید. گزینهیAndroid NDKرا دستنخورده باقی بگذارید.

وقتی دستگاههای متصل را رفرش میکنید، باید Google HPE device (localhost:6520) در پنجره ساخت ببینید:

بسته به وضعیت این اشکال و نسخه Unity شما، ممکن است لازم باشد نسخه ابزار ساخت خود را نیز تغییر دهید. برای انجام این کار، بررسی کنید که mainTemplate.gradle و launcherTemplate.gradle را تولید میکنید.
- پنجره تنظیمات پروژه را باز کنید و به تنظیمات پخشکننده بروید و بخش
Publishing Settingsپیدا کنید. - به پایین اسکرول کنید تا به گزینههای Build برسید و گزینههای «Custom Main Gradle Template» و «Custom Launcher Gradle Template» را تیک بزنید، که هر دو فایل Gradle را در مسیر
Assets\Plugins\Android\ایجاد میکند.

- هر نمونه از رشته
**BUILDTOOLS**را با30.0.0جایگزین کنید. در هر دو فایل، بخش کد اکنون باید به صورت زیر باشد:
android {
compileSdkVersion **APIVERSION**
buildToolsVersion '30.0.0'
۵. نصب روی کرومبوک (اختیاری)
شما میتوانید بدون دسترسی به شبیهساز بازیهای گوگل پلی و با استفاده از یک دستگاه ChromeOS، شروع به توسعه بازی برای بازیهای گوگل پلی کنید. کرومبوکها دقیقاً مانند بازیهای گوگل پلی روی کامپیوتر، دارای صفحهکلید و ماوس هستند، صفحه نمایش بزرگی دارند و در پیکربندیهای x86 موجود هستند. ما از افزونه Android Logcat Unity با کرومبوک استفاده خواهیم کرد.
- مدیریت بستهها (Package Manager) را باز کنید و در بخش
Unity RegistryعبارتAndroid Logcatرا جستجو کنید.

همچنین باید کرومبوک خود را برای توسعه اندروید پیکربندی کنید . با فعال کردن لینوکس شروع کنید.
- تنظیمات -> توسعهدهنده -> لینوکس را انتخاب کنید.

سپس اشکال زدایی ADB را فعال کنید.
- تنظیمات -> توسعهدهندگان -> محیط توسعه لینوکس -> توسعه برنامههای اندروید -> فعال کردن اشکالزدایی ADB را انتخاب کنید.

همچنین باید آدرس IP کرومبوک خود را دریافت کنید. سادهترین راه برای انجام این کار این است که
- برای دریافت آدرس IP کرومبوک خود، روی آیکون اطلاعات شبکه کلیک کنید.


- برای باز کردن پنجرهی Android Logcat، مسیر Window -> Analysis -> Android Logcat را انتخاب کنید.

- لیست دستگاهها را باز کنید. اگر در حال حاضر چیزی متصل نباشد، ممکن است عبارت
No Deviceنمایش داده شود.

- روی گزینههای اتصال دیگر کلیک کنید و آدرس IP کرومبوک خود را وارد کنید.

- روی اتصال کلیک کنید. باید پنجره موفقیتآمیز بودن اتصال را ببینید:

اکنون کرومبوک شما در لیست دستگاههای اجرا شونده در یونیتی ظاهر میشود (ممکن است ابتدا لازم باشد صفحه را رفرش کنید):

اکنون میتوانید بازیها را روی کرومبوک خود نصب کنید و آزمایش و توسعه را روی سختافزاری شبیه به کامپیوتر شخصی آغاز کنید.
۶. یک نسخه آزمایشی ایجاد کنید
گوگل پلی گیمز از شما میخواهد که یک نسخه x86 از بازی خود را نصب کنید، که بخشی از چگونگی رسیدن به معیارهای عملکرد آن در رایانههای رومیزی است. همه نسخههای LTS یونیتی میتوانند بیلدهای اندروید سازگار با x86 و x86-64 (با برچسب "Chrome OS") تولید کنند، و نسخه یونیتی 2018 و قبل از آن میتوانند بیلدهای x86 تولید کنند. برای باز کردن قفل این معماریها، ابتدا باید به بکاند اسکریپتنویسی IL2CPP بروید، که احتمالاً قبلاً در محیط تولید برای پشتیبانی از arm64 انجام دادهاید.
- برای باز کردن پنجرهی تنظیمات ساخت، مسیر File -> Build Settings را انتخاب کنید و سپس روی Player Settings کلیک کنید.

- به بخش تنظیمات دیگر بروید و
Scripting Backendخود را بهIL2CPPتغییر دهید.

همچنین باید پشتیبانی از x86 یا x86-64 را فعال کنید. برای انتشار در پلتفرم بازیهای گوگل پلی، فقط باید از x86 پشتیبانی کنید، اگرچه ما x86-64 را توصیه میکنیم.

نسخه کتابخانه Frame Pacing در بستههای Unity نیز با Google Play Games سازگار نیست و باعث میشود بازی شما هنگام اجرا از کار بیفتد.
- برای غیرفعال کردن Frame Pacing (گامبندی فریم) از پنجرهی تنظیمات پخشکننده، بخش Resolution and Presentation (وضوح و ارائه) را باز کنید و تیک Optimized Frame Pacing (گامبندی فریم بهینهشده) را بردارید.

حالا آمادهی ساخت هستید!
- دوباره پنجره Build Settings را باز کنید و روی Build And Run کلیک کنید. بازی شما در پنجره شبیهساز ظاهر میشود.

اگر نمیتوانید بازی خود را نصب کنید، بررسی کنید که آیا «دستگاه Google HPE (localhost:6520)» در لیست «دستگاه اجرا» شما نمایش داده میشود یا خیر. اگر این گزینه وجود ندارد، مطمئن شوید که HPE_Dev در حال اجرا است و میتوانید صفحه اصلی اندروید را ببینید. اگر هنوز در لیست دستگاههای شما نمایش داده نمیشود، adb connect localhost:6520 را با adb.exe دقیقی که استفاده میکنید اجرا کنید. اگر از افزونه Android Logcat Unity استفاده میکنید، Tools -> Open Terminal را انتخاب کنید تا یک ترمینال به دایرکتوری با همان adb.exe که Unity از آن استفاده میکند، باز شود.
ترمینال را باز کنید" هایلایت شده" style="width: 624.00px" src="img/9101ce3c95fb1aa2.png" srcset="img/9101ce3c95fb1aa2_36.png 36w, img/9101ce3c95fb1aa2_48.png 48w, img/9101ce3c95fb1aa2_72.png 72w, img/9101ce3c95fb1aa2_96.png 96w, img/9101ce3c95fb1aa2_480.png 480w, img/9101ce3c95fb1aa2_720.png 720w, img/9101ce3c95fb1aa2_856.png 856w, img/9101ce3c95fb1aa2_960.png 960w، img/9101ce3c95fb1aa2_1440.png 1440w، img/9101ce3c95fb1aa2_1920.png 1920w، img/9101ce3c95fb1aa2_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px">
۷. بازی خود را برای کامپیوتر شخصی تطبیق دهید
در صورت امکان، سعی کنید تغییراتی را در بازی خود بر اساس معیارهای مستقل از پلتفرم یا وجود ویژگیهای خاص ایجاد کنید. به عنوان مثال، یک بازیکن در اندروید میتواند ماوس و کیبورد را وصل کند یا یک مانیتور را وصل کند، بنابراین تغییر طرح کنترل یا عناصر HUD در واکنش به پیکربندی دستگاه شما به شما امکان میدهد از بازیهای Google Play روی رایانه شخصی در تمام پلتفرمهای پشتیبانی شده خود استفاده کنید.
اگر منطقی باشد که منطق را بر اساس اینکه آیا بازیکن در Google Play Games یا ChromeOS است یا خیر، تغییر دهید، این اسکریپت با بررسی ویژگی سیستم HPE_EXPERIENCE به شما کمک میکند تا آن را تشخیص دهید:
using UnityEngine;
public class GoogleDeviceUtilities
{
#if UNITY_ANDROID && !UNITY_EDITOR
private static AndroidJavaObject PackageManager
{
get
{
var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var currentActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
return currentActivity.Call<AndroidJavaObject>("getPackageManager");
}
}
public static bool IsChromeOS => PackageManager.Call<bool>("hasSystemFeature", "org.chromium.arc");
public static bool IsGooglePlayGames =>
PackageManager.Call<bool>("hasSystemFeature", "com.google.android.play.feature.HPE_EXPERIENCE");
public static bool HasKeyboard
{
get
{
var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var currentActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
var resources = currentActivity.Call<AndroidJavaObject>("getResources");
var configuration = resources.Call<AndroidJavaObject>("getConfiguration");
var keyboard = configuration.Get<int>("keyboard");
return keyboard == 2; // Configuration.KEYBOARD_QWERTY
}
}
#else
public static bool IsChromeOS => false;
public static bool IsGooglePlayGames => false;
public static bool HasKeyboard => true;
#endif
}
رایانههای شخصی نمایشگر بزرگتری نسبت به گوشیهای اندرویدی معمولی دارند. در صورت امکان، توصیه میکنیم HUD شما بیش از 20٪ از صفحه نمایش را اشغال نکند. از آنجایی که بسیاری از بازیهای موبایل از «مقیاسبندی با اندازه صفحه» استفاده میکنند، تغییر این گزینه به «اندازه فیزیکی ثابت» یا «اندازه پیکسل ثابت» میتواند اولین قدم خوب برای دستیابی به این هدف باشد.

همچنین اگر تشخیص دادید که در حال اجرا در Google Play Games هستید، میتوانید تنظیمات کیفیت را با استفاده از دستور QualitySettings.SetQualityLevel در زمان اجرا، به صورت پویا تنظیم کنید. شبیهساز Google Play Games از ANGLE برای صدور دستورات DirectX یا Vulkan بومی از OpenGL Unity استفاده میکند، بنابراین احتمالاً میتوانید به وفاداری گرافیکی بالاتری نسبت به آنچه در ساخت بازیهای موبایل شما موجود بود، دست یابید.
۸. مدیریت ورودیها
بازیهایی که در گوگل پلی منتشر میشوند، باید بر اساس ورودی ماوس و کیبورد ساخته شوند. شما باید نحوه تعامل با بازی خود را با ماوس و کیبورد برنامهریزی کنید، بنابراین همین حالا برای تهیه پکیج Input SDK unity وقت بگذارید. اگر در آن صفحه فایل دانلودی نمیبینید، مطمئن شوید که با یک حساب کاربری در گروه play-mp-libs وارد سیستم شدهاید.
برای اهداف آزمایشی، بسیاری از بازیها کنترلهای اولیه ماوس و صفحهکلید را برای توسعه در ویرایشگر ایجاد میکنند. در صورت امکان، میتوانید این موارد را هنگام اجرا بر روی دستگاه ChromeOS یا در شبیهساز بازیهای Google Play فعال کنید.
به طور پیشفرض، بازیهای گوگل پلی و ChromeOS ورودی ماوس را به یک لمس شبیهسازی شده تبدیل میکنند. اگر از Input.GetTouch و Input.touchCount استفاده کنید، بازی شما طبق انتظار به کار خود ادامه میدهد. اگر به ورودی چند لمسی، مانند کنترلهای دوگانه انگشت شست یا زوم کردن با دو انگشت اشاره، متکی هستید، باید این عمل را به فشار کلیدها نگاشت کنید. همچنین باید اقدامات درون بازی را به فشار کلیدها نگاشت کنید، مانند فشار دادن i برای باز کردن موجودی، escape برای بستن کادرهای گفتگو و enter برای ارسال پیامهای درون بازی.
میکروگیم پلتفرمر دوبعدی از فلش برای حرکت و از اسپیس برای پرش استفاده میکند. اگر از بازی خودتان استفاده میکنید، مطمئن شوید که کلیدهای اتصال مورد نظر خود را برای مرحله بعدی دارید.
۹. ادغام SDK ورودی
حالا که کنترلهای ماوس و کیبورد خود را تنظیم کردهاید، باید پشتیبانی از Input SDK را اضافه کنید. این به بازیکنان کمک میکند تا ورودیهای رایانه شما را با یک پنجرهی پاپاور مفید پیدا کنند:
- پس از وارد کردن SDK به پروژه خود، فایلی با نام
InputMappingProviderBehaviour.csایجاد کنید و این محتویات را به آن اضافه کنید:
using System.Collections.Generic;
using Google.Play.InputMapping;
using UnityEngine;
using Input = Google.Play.InputMapping.Input;
public class InputMappingProviderBehaviour : MonoBehaviour
{
private void Start()
{
Input.GetInputMappingClient().RegisterInputMappingProvider(new MyInputMappingProvider());
}
private class MyInputMappingProvider : InputMappingProvider
{
public InputMap OnProvideInputMap()
{
return new InputMap
{
InputGroups = new List<InputGroup> { },
MouseSettings = new MouseSettings
{
InvertMouseMovement = false,
AllowMouseSensitivityAdjustment = false
}
};
}
}
private enum ActionIds
{
}
}
- حالا
ActionIdsبا لیست اکشنهایی که در بازی خود استفاده میکنید، پر کنید. برای میکروگیم پلتفرمر دوبعدی، اکشنها چپ، راست و پرش هستند:
private enum ActionIds
{
Left,
Right,
Jump
}
- در
OnProvideInputMap، برای هر اکشن یکInputActionایجاد کنید. برای این کار به نام اکشن، ورودی و سپس دکمههای ماوس یا کدهای کلیدی که به آن متصل میشوند، نیاز دارید. برای بازی نمونه:
var leftAction = new InputAction
{
ActionLabel = "Walk Left",
UniqueId = (int)ActionIds.Left,
InputControls = new InputControls
{
AndroidKeycodes = new[]
{
AndroidKeyCode.KEYCODE_DPAD_LEFT
}
}
};
var rightAction = new InputAction
{
ActionLabel = "Walk Right",
UniqueId = (int)ActionIds.Right,
InputControls = new InputControls
{
AndroidKeycodes = new[]
{
AndroidKeyCode.KEYCODE_DPAD_RIGHT
}
}
};
var jumpAction = new InputAction
{
ActionLabel = "Jump",
UniqueId = (int)ActionIds.Jump,
InputControls = new InputControls
{
AndroidKeycodes = new[]
{
AndroidKeyCode.KEYCODE_SPACE
}
}
};
- سپس، این اقدامات ورودی را در گروهها قرار دهید.
برای میکروگیم ما فقط یک گروه داریم، اما شما میتوانید هر تعداد که نیاز دارید ایجاد کنید تا به بازیکنانتان کمک کنید اقدامات مورد نیاز خود را پیدا کنند. این را به OnProvideInputMap اضافه کنید:
var movementInputGroup = new InputGroup
{
GroupLabel = "Movement",
InputActions = new List<InputAction>
{
leftAction, rightAction, jumpAction
}
};
- تمام گروههای ورودی که ایجاد کردهاید را به نقشه ورودی اضافه کنید. عبارت return در
OnProvideInputMapرا به صورت زیر تغییر دهید:
return new InputMap
{
InputGroups = new List<InputGroup> { movementInputGroup },
MouseSettings = new MouseSettings
{
InvertMouseMovement = false,
AllowMouseSensitivityAdjustment = false
}
};
- در نهایت، اسکریپتی که ایجاد کردهاید را به بازی خود اضافه کنید:

- وقتی دوباره بازی خود را مستقر کردید،
Shift+Tabرا فشار دهید تا صفحه پوششی درون بازی باز شود.

- برای مشاهده کنترلهایی که پیکربندی کردهاید، روی کنترلها کلیک کنید.

۱۰. حذف نماهای وب جاسازیشده
برای اینکه به بازیکنان خود تجربهای عالی بدهید، باید نماهای وب تعبیهشده را حذف کنید. استفاده از نماهای وب تعبیهشده برای نمایش مواردی مانند سیاست حفظ حریم خصوصی یا شرایط خدمات شما رایج است. اگرچه این موارد در بازیهای Google Play کار میکنند، اما در یک مرورگر "موبایل" تعبیهشده نمایش داده میشوند، نه در مرورگر دسکتاپ مورد نظر بازیکن، و ممکن است باعث سردرگمی بازیکنان کامپیوتر شخصی شوند. بنابراین در Unity، اگر از هرگونه افزونهای برای نمایش یک مرورگر تعبیهشده استفاده میکنید، به Application.OpenURL(url) مراجعه کنید.
۱۱. مجوزها و ویژگیها
تعدادی از ویژگیها و مجوزهای اندروید در بازیهای گوگل پلی پشتیبانی نمیشوند. یک قانون کلی این است که نسخه کامپیوتری شما هرگز نباید پنجرهای با عنوان «مجوزها» نمایش دهد . حالا که نسخه خود را آماده کردهاید، یک کار خوب این است که یک مرحله نصب جدید معمولی را طی کنید و هر پنجرهای را که میبینید یادداشت کنید تا به لیست «کارهایتان» برای ارسال بازی اضافه کنید.
برخی از بازیهای Unity با استفاده از API مربوط به Android.Permission درخواست مجوز میکنند . شما باید این موارد را در بررسیهای if (GoogleDeviceUtilities.IsGooglePlayGames) قرار دهید و در صورت لزوم مستقیماً به منطق خطا بروید.
۱۲. بهینهسازی دسکتاپ
گوگل پلی گیمز در مقایسه با یک گوشی اندرویدی معمولی چند تفاوت دارد و شاید بخواهید بازی خود را بر اساس آن پیکربندی کنید.
برای فشردهسازی بافت به DXT بروید. فرمتهای بافت رایج اندروید مانند ETC اگر نتوانند مستقیماً به پردازنده گرافیکی بازیکن منتقل شوند، در زمان اجرا در حافظه رمزگشایی میشوند. ASTC بهترین سازگاری را برای دسکتاپ به شما ارائه میدهد، اگرچه برای تأیید رفتار مورد انتظار برای بازی خود باید از یک ابزار پروفایلینگ پردازنده گرافیکی دسکتاپ استفاده کنید.

از آنجایی که اکنون روی یک پردازنده گرافیکی دسکتاپ کار میکنید، ممکن است بخواهید کیفیت گرافیک خود را نیز افزایش دهید. میتوانید آن را مستقیماً در تنظیمات پروژه خود در قسمت کیفیت تنظیم کنید.

۱۳. تبریک
شما همه چیز را برای شروع کار روی بازی خود برای Google Play Games آماده دارید. میتوانید شروع به آزمایش و تکرار روی بازی خود کنید. به یاد داشته باشید که حتی اگر میتوانید پایه کد خود را حفظ کنید، باید بازی خود را طوری تطبیق دهید که مانند یک بازی PC بومی به نظر برسد.
بعدش چی؟
برای انتشار یک بازی در گوگل پلی گیمز، کارهای بیشتری باید انجام شود:
- برای آخرین اطلاعات، Quickstart را مرور کنید.
- برای ورود خودکار بازیکن در هنگام اجرا و کمک به برآورده کردن الزامات تداوم ، به ورود به سیستم نسخه ۲ سرویسهای بازیهای Play ارتقا دهید.
- API Play Integrity را پیادهسازی کنید تا مطمئن شوید تجربه کامپیوتر شما به اندازه موبایلتان امن است.
در نهایت، بخش زیادی از کاری که تا به این لحظه برای پشتیبانی از بازیهای گوگل پلی انجام دادهاید، به شما کمک میکند تا بازی خود را روی سیستم عامل کروم نیز عرضه کنید و باید پشتیبانی از این پلتفرم را در کنار کامپیوتر شخصی در نظر بگیرید.