1. مقدمه
آخرین به روز رسانی: 2022-10-18
چگونه بازی خود را برای بازی های گوگل پلی در رایانه شخصی آماده می کنید؟
بازیهای Google Play، آوردن بازی تلفن همراه خود را به رایانههای شخصی ویندوز آسان میکند. این بدان معناست که شما می توانید تعامل بازیکن و مخاطبان خود را بدون نیاز به معماری مجدد بازی یا طراحی مجدد مدل کسب و کار خود افزایش دهید. هنوز چند تغییر وجود دارد که باید انجام دهید تا بهترین تجربه ممکن را برای پخش کننده های رایانه شخصی جدید خود ایجاد کنید.
چیزی که یاد خواهید گرفت
این کد لبه بخشهای اصلی چکلیست مورد نیاز را پوشش میدهد تا بازی شما را از کار بیاندازد و به شما کمک کند بازی Unity خود را برای بازیهای Google Play روی رایانه شخصی آماده کنید. ادغامهای عمیقتر، مانند Play Games Sign-On، و Play Integrity API، پوشش داده نمیشوند.
- چگونه برای معماری x86 از Unity بسازیم.
- نحوه آزمایش و استقرار در شبیه ساز Google Play Games.
- چگونه رابط کاربری خود را تغییر دهید تا در رایانه شخصی عالی به نظر برسد.
- چگونه تشخیص دهیم که آیا در شبیهساز بازیهای Google Play در حال اجرا هستید یا خیر، و بازی خود را مطابق با آن تطبیق دهید.
آنچه شما نیاز دارید
- نصب Unity 2020 LTS (این کد لبه با 2020.3.30f1 ساخته شده است).
- شبیه ساز بازی های Google Play .
2. راه اندازی شوید
یک پروژه جدید باز کنید یا ایجاد کنید
- با استفاده از 2D Platformer Microgame یک پروژه جدید ایجاد کنید یا پروژه خود را باز کنید.
- از پروژه، File -> Build Settings را انتخاب کنید و بررسی کنید که برای اندروید تنظیم شده اید.
3. شبیه ساز Google Play Games را آماده کنید
با دانلود شبیه ساز شروع کنید.
پس از نصب آن، باید دسکتاپ اندروید را در یک پنجره ببینید:
این یک محیط اندرویدی با عملکرد بالا با امکانات کامل و مناسب برای ساخت بازی است. باید در 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
پیدا کنید. برای بهترین تجربه توسعه دهنده، ممکن است بخواهید Android Studio را نصب کرده و از آن برای مدیریت SDK Android خود استفاده کنید.
اگر شبیه ساز از adb قطع شد، آن را دوباره از خط فرمان مانند زیر وصل کنید:
adb connect localhost:6520
4. یونیتی را برای ساخت و استقرار مستقیم به شبیه ساز پیکربندی کنید (اختیاری)
نسخه adb ارسال شده با Unity ممکن است با شبیه ساز سازگار نباشد. برای اطمینان، گزینه File -> Build Settings را انتخاب کنید و کادر محاوره Run Device را بررسی کنید تا ببینید آیا لیست شده است یا خیر.
بسته به پروژه، فرآیند ساخت و سطح راحتی، میتوانید Unity را برای استقرار مستقیم در شبیهساز بازیهای Google Play پیکربندی کنید یا یک APK بسازید و آن را به صورت دستی با adb install
اجرا کنید. برای استقرار آن به صورت دستی به کمترین تغییرات نیاز دارد، اما ممکن است چرخه تکرار شما را کند کند.
با این دو مرحله مستقیماً در شبیه ساز مستقر شوید:
- یونیتی را برای استفاده از Unity SDK دیگر، که در حالت ایدهآل توسط Android Studio نصب شده است، پیکربندی کنید.
- نسخه Build Tools را برای حل یک باگ در Unity به روز کنید.
از آنجایی که نسخه Android SDK که با Unity ارسال می شود احتمالا شبیه ساز را شناسایی نمی کند، شما از Android Studio برای نصب یک SDK جدیدتر استفاده می کنید.
- Android Studio را باز کنید و Edit -> Preferences -> External Tools را انتخاب کنید.
- علامت
Android SDK Tools Installed with Unity
را بردارید و مسیر نصب Android Studio خود را (معمولاً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'
5. استقرار در Chromebook (اختیاری)
میتوانید بدون دسترسی به شبیهساز بازیهای Google Play با استفاده از دستگاه ChromeOS شروع به توسعه بازیها برای بازیهای Google Play کنید. مانند بازیهای Google Play در رایانه شخصی، کرومبوکها دارای صفحهکلید و موس هستند، صفحهنمایش بزرگ دارند و در پیکربندیهای x86 در دسترس هستند. ما از افزونه Android Logcat Unity با Chromebook استفاده خواهیم کرد..
- Package Manager را باز کنید و
Android Logcat
درUnity Registry
جستجو کنید.
همچنین باید Chromebook خود را برای توسعه Android پیکربندی کنید . با فعال کردن لینوکس شروع کنید.
- Settings -> Developer -> Linux را انتخاب کنید.
سپس اشکال زدایی ADB را فعال کنید.
- تنظیمات -> توسعه دهندگان -> محیط توسعه لینوکس -> توسعه برنامه های اندروید -> فعال کردن اشکال زدایی ADB را انتخاب کنید.
همچنین باید آدرس IP Chromebook خود را دریافت کنید. ساده ترین راه برای انجام این کار این است که
- برای دریافت آدرس IP Chromebook خود، روی نماد اطلاعات شبکه کلیک کنید.
- Window -> Analysis -> Android Logcat را انتخاب کنید تا پنجره Android Logcat باز شود.
- لیست دستگاه را باز کنید اگر در حال حاضر چیزی متصل نباشد، ممکن است
No Device
خوانده شود.
- گزینه های دیگر اتصال را کلیک کنید و آدرس IP Chromebook خود را وارد کنید.
- روی اتصال کلیک کنید. شما باید یک پنجره موفقیت را ببینید:
Chromebook شما اکنون در لیست Run Device Unity ظاهر میشود (ممکن است ابتدا مجبور شوید صفحه را بازخوانی کنید):
اکنون میتوانید بازیها را در Chromebook خود مستقر کنید و آزمایش و توسعه را روی سختافزاری شبیه رایانه شخصی آغاز کنید.
6. ساخت آزمایشی را اجرا کنید
بازیهای Google Play مستلزم استقرار نسخه x86 بازی خود است که بخشی از نحوه دستیابی به معیارهای عملکرد آن در رایانههای رومیزی است. همه انواع LTS Unity میتوانند بیلدهای Android سازگار با x86 و x86-64 (با برچسب «سیستمعامل Chrome») تولید کنند و نسخه یونیتی 2018 و نسخههای قبلی میتواند بیلدهای x86 تولید کند. برای باز کردن قفل این معماریها، ابتدا باید به باطن اسکریپت نویسی IL2CPP بروید، که احتمالاً قبلاً در حال تولید برای پشتیبانی از arm64 هستید.
- File -> Build Settings را انتخاب کنید تا پنجره Build Settings باز شود و سپس روی Player Settings کلیک کنید.
- به بخش تنظیمات دیگر بروید و
Scripting Backend
خود را بهIL2CPP
تغییر دهید.
همچنین باید پشتیبانی x86 یا x86-64 را فعال کنید. برای ارسال در پلتفرم بازیهای Google Play، فقط باید x86 را پشتیبانی کنید، اگرچه ما x86-64 را توصیه میکنیم.
نسخه بستههای Unity کتابخانه Frame Pacing نیز با بازیهای Google Play ناسازگار است و باعث میشود بازی شما در هنگام راهاندازی از کار بیفتد.
- برای غیرفعال کردن Frame Pacing از پنجره تنظیمات پخش کننده ، بخش Resolution and Presentation را باز کنید و علامت Optimized Frame Pacing را بردارید.
شما اکنون آماده ساختن هستید!
- دوباره پنجره Build Settings را باز کنید و روی Build And Run کلیک کنید. بازی شما در پنجره شبیه ساز ظاهر می شود.
اگر نمیتوانید بازی خود را اجرا کنید، بررسی کنید که آیا «دستگاه Google HPE (localhost:6520)» در فهرست «دستگاه اجرا» شما نشان داده میشود یا خیر. اگر وجود ندارد، مطمئن شوید که HPE_Dev در حال اجرا است و میتوانید صفحه اصلی Android را ببینید. اگر هنوز در لیست دستگاه شما ظاهر نمی شود، adb connect localhost:6520
را با adb.exe
دقیقی که استفاده می کنید اجرا کنید. اگر از افزونه Android Logcat Unity استفاده میکنید، Tools -> Open Terminal را انتخاب کنید تا یک ترمینال به دایرکتوری با همان adb.exe
که Unity استفاده میکند باز شود.
باز کردن ترمینال" highlighted" style="width: 624.00px" src="img/9101ce3c95fb1aa2.png" srcset="img/9101ce3c95fb1aa2_36.png 36w, img/9101ce3a2c c95fb1aa2_72.png 72w, img/9101ce3c95fb1aa2_96. png 96w, img/9101ce3c95fb1aa2_480.png 480w, img/9101ce3c95fb1aa2_720.png 720w, img/9101ce3c95fb1aa2_856.png 1aa2_856.png 1aa2_856.png 1aa2_856.png 1aa2_850000000 png 960w, img/9101ce3c95fb1aa2_1440.png 1440w, img/9101ce3c95fb1aa2_1920.png 1920w, img/9101ce3c95fb1aa2_288. 2880w" sizes="(max-width: 840px) 100vw, 856px">
7. بازی خود را برای رایانه شخصی تطبیق دهید
در صورت امکان، سعی کنید هر تغییری را بر اساس معیارهای پلتفرم آگنوستیک یا وجود ویژگی های خاص در بازی خود ایجاد کنید. برای مثال، یک پخش کننده در Android میتواند ماوس و صفحهکلید را وصل کند یا یک مانیتور را وصل کند، بنابراین تغییر طرح کنترل یا عناصر 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 درصد از صفحه را اشغال نکند. از آنجایی که بسیاری از بازیهای موبایل از «Scale With Screen Size» استفاده میکنند، تغییر آن به «اندازه فیزیکی ثابت» یا «اندازه پیکسل ثابت» میتواند اولین قدم خوبی برای دستیابی به این هدف باشد.
همچنین ممکن است بخواهید با استفاده از فرمان QualitySettings.SetQualityLevel
در زمان اجرا تنظیمات کیفیت را به صورت پویا تنظیم کنید، اگر متوجه شدید که در بازی های Google Play در حال اجرا هستید. شبیهساز Google Play Games از ANGLE برای صدور دستورات DirectX یا Vulkan بومی از OpenGL Unity استفاده میکند، بنابراین احتمالاً میتوانید به وفاداری گرافیکی بالاتری نسبت به نسخههای بازیهای موبایل خود دست پیدا کنید.
8. مدیریت ورودی
بازیهای ارسالشده در «بازیهای Google Play» باید براساس ورودی ماوس و صفحهکلید ساخته شوند. باید برنامهریزی کنید که چگونه با ماوس و صفحهکلید با بازیتان تعامل داشته باشید، بنابراین هماکنون وقت بگذارید و بسته unity SDK را به دست آورید. اگر دانلودی در آن صفحه نمیبینید، مطمئن شوید که با یک حساب کاربری در گروه play-mp-libs وارد شدهاید.
برای اهداف آزمایشی، بسیاری از بازیها کنترلهای اصلی ماوس و صفحه کلید را برای توسعه در ویرایشگر میسازند. در صورت امکان، ممکن است بخواهید زمانی که در دستگاه ChromeOS یا شبیهساز بازیهای Google Play اجرا میکنید، این موارد را فعال کنید.
به طور پیشفرض، بازیهای Google Play و ChromeOS ورودی ماوس را به یک لمس شبیهسازی شده تبدیل میکنند. اگر Input.GetTouch
و Input.touchCount
استفاده می کنید، بازی شما همانطور که انتظار می رود به کار خود ادامه می دهد. اگر به ورودی چند لمسی تکیه میکنید، مانند کنترلهای دوگانه انگشت شست یا فشار دادن برای بزرگنمایی، باید عملکرد را با فشار دادن کلید ترسیم کنید. همچنین باید اقدامات درون بازی را به فشارهای کلیدی نگاشت کنید، مانند فشار دادن i برای باز کردن موجودی، Escape برای بستن کادرهای گفتگو و enter برای ارسال پیامهای درون بازی.
Microgame 2D Platformer از فلش ها برای حرکت و از فضا برای پرش استفاده می کند. اگر از بازی خود استفاده میکنید، مطمئن شوید که کلیدهای کلیدی دلخواه خود را برای مرحله بعدی دارید.
9. یکپارچه سازی 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
با لیستی از اقداماتی که در بازی خود استفاده می کنید پر کنید. برای Microgame 2D Platformer، اقدامات به صورت چپ، راست و پرش هستند:
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 } };
- تمام گروه های ورودی که ایجاد کرده اید را به نقشه ورودی اضافه کنید. عبارت بازگشتی را در
OnProvideInputMap
تغییر دهید تا بخواند:
return new InputMap { InputGroups = new List<InputGroup> { movementInputGroup }, MouseSettings = new MouseSettings { InvertMouseMovement = false, AllowMouseSensitivityAdjustment = false } };
- در نهایت، اسکریپتی که ایجاد کرده اید را به بازی خود اضافه کنید:
- وقتی دوباره بازی خود را اجرا کردید،
Shift+Tab
فشار دهید تا همپوشانی درون بازی باز شود.
- برای مشاهده کنترل هایی که پیکربندی کرده اید روی Controls کلیک کنید.
10. نماهای وب تعبیه شده را حذف کنید
برای ارائه تجربه عالی به بازیکنان خود، باید نماهای وب تعبیه شده را حذف کنید. استفاده از نماهای وب جاسازی شده برای نمایش مواردی مانند خط مشی رازداری یا شرایط خدمات معمول است. اگرچه اینها در بازیهای Google Play کار میکنند، اما در مرورگر «موبایل» تعبیهشده به جای مرورگر دسکتاپ ترجیحی بازیکن نشان داده میشوند و ممکن است باعث سردرگمی بازیکنان رایانه شخصی شوند. بنابراین در یونیتی، اگر از هر پسوندی برای نمایش یک مرورگر تعبیه شده استفاده می کنید، به Application.OpenURL(url)
برگردید.
11. مجوزها و ویژگی ها
تعدادی از ویژگیها و مجوزهای اندروید وجود دارد که در بازیهای Google Play پشتیبانی نمیشوند. یک قانون کلی این است که ساخت کامپیوتر شما هرگز نباید یک گفتگوی مجوزها ظاهر شود . یک کار خوب، اکنون که بیلد خود را آماده کرده اید، این است که یک نصب معمولی جدید انجام دهید و هر دیالوگ را که می بینید بنویسید تا برای ارسال بازی خود به لیست "todo" خود اضافه کنید.
برخی از بازیهای Unity با استفاده از Android.Permission API درخواست مجوز میکنند . if (GoogleDeviceUtilities.IsGooglePlayGames)
باید آنها را در آن بپیچید و در صورت وجود مستقیماً به منطق شکست خود بروید.
12. بهینه سازی دسکتاپ
بازیهای Google Play در مقایسه با یک گوشی اندرویدی معمولی چند تفاوت دارند و ممکن است بخواهید بازی خود را بر اساس آن پیکربندی کنید.
برای فشرده سازی بافت، به DXT بروید. فرمتهای متداول بافت اندروید مانند ETC در زمان اجرا در حافظه رمزگشایی میشوند، اگر نتوانند مستقیماً به پردازنده گرافیکی پخشکننده منتقل شوند. ASTC بهترین سازگاری دسکتاپ را در اختیار شما قرار می دهد، اگرچه برای تأیید رفتار مورد انتظار برای بازی خود باید از یک ابزار پروفایل GPU دسکتاپ استفاده کنید.
از آنجایی که اکنون روی یک GPU دسکتاپ کار می کنید، ممکن است بخواهید کیفیت گرافیک خود را نیز افزایش دهید. می توانید آن را مستقیماً در تنظیمات پروژه خود در قسمت Quality تنظیم کنید
13. تبریک می گویم
شما همه چیز را برای شروع کار روی بازی خود برای بازی های Google Play آماده کرده اید. می توانید آزمایش و تکرار بازی خود را شروع کنید. به یاد داشته باشید که حتی اگر می توانید همان پایه کد خود را حفظ کنید، می خواهید بازی خود را طوری تطبیق دهید که شبیه یک بازی رایانه شخصی بومی باشد.
بعدش چی؟
برای ارسال یک بازی در Google Play Games کارهای بیشتری باید انجام شود:
- برای آخرین اطلاعات، Quickstart را مرور کنید.
- به خدمات بازیهای Play ارتقا دهید نسخه 2 وارد شوید تا بهطور خودکار یک بازیکن در هنگام راهاندازی وارد سیستم شوید و به برآورده کردن الزامات تداوم کمک کنید.
- Play Integrity API را اجرا کنید تا مطمئن شوید تجربه رایانه شخصی شما به اندازه تلفن همراه شما ایمن است.
در نهایت، بسیاری از کارهایی که تا به حال برای پشتیبانی از بازیهای Google Play انجام دادهاید، به شما کمک میکند تا در ChromeOS نیز ارسال کنید، و باید به پشتیبانی از آن پلتفرم همراه با رایانه شخصی فکر کنید.