1. مقدمة
تاريخ التعديل الأخير: 18/10/2022
كيف يمكن إعداد لعبتك لبرنامج "ألعاب Google Play على الكمبيوتر"؟
يسهّل تطبيق "ألعاب Google Play" توفير ألعاب الأجهزة الجوّالة على أجهزة كمبيوتر Windows. وهذا يعني أنه يمكنك زيادة تفاعل اللاعبين وجمهورك بدون الحاجة إلى إعادة تصميم لعبتك أو إعادة تصميم نموذج أعمالك. ما زال عليك إجراء بعض التغييرات لتوفير أفضل تجربة ممكنة للّاعبين الجدد على أجهزة الكمبيوتر.
المعلومات التي ستطّلع عليها
يتناول هذا الدرس التطبيقي الأقسام الأساسية من قائمة التحقّق من المتطلبات لإطلاق لعبتك، ومساعدتك في إعداد لعبة Unity الخاصة بك على برنامج "ألعاب Google Play على الكمبيوتر". ولا يشمل هذا القسم المزيد من عمليات الدمج المفصّلة، مثل "تسجيل الدخول إلى ألعاب Play" وواجهة برمجة التطبيقات Play Integrity API.
- كيفية إنشاء بنية x86 من Unity لإنشاء بنية x86
- كيفية اختبار تطبيقك ونشره على محاكي "ألعاب Google Play"
- كيفية تعديل واجهة المستخدم لتبدو رائعة على جهاز كمبيوتر.
- كيفية اكتشاف ما إذا كنت تشغّل لعبتك باستخدام محاكي "ألعاب Google Play" وتعديل لعبتك وفقًا لذلك
المتطلبات
- تثبيت Unity 2020 LTS (تم إنشاء هذا الدرس التطبيقي حول الترميز باستخدام الإصدار 2020.3.30f1)
- محاكي "ألعاب Google Play"
2. الإعداد
فتح مشروع جديد أو إنشاؤه
- أنشِئ مشروعًا جديدًا باستخدام لعبة القفز بين المنصات ثنائية الأبعاد أو افتح مشروعك الخاص.
- من المشروع، حدد ملف -> إصدار الإعدادات والتأكّد من استعدادك لإنشاء إصدار متوافق مع Android.
3- تحضير محاكي "ألعاب Google Play"
ويمكنك البدء من خلال تنزيل المحاكي.
بعد تثبيته، من المفترض أن يظهر لك سطح مكتب Android في نافذة:
إنّها بيئة Android عالية الأداء مليئة بالميزات، ومناسبة لتطوير الألعاب. من المفترض أن يظهر في Android Debug Bridge (adb) كجهاز على المضيف المحلي:
❯ adb devices List of devices attached localhost:6520 device
يجب استخدام إصدار حديث من adb لرصد المحاكي. يعمل الإصدار المزوَّد مع "استوديو Android"، ولكن قد لا يكون بالإمكان استخدام adb كما هو الحال مع Unity. تتوفّر نسخة متوافقة مع المحاكي ويمكنك العثور عليه على الرابط C:\Program Files\Google\Play Games Developer Emulator\current\emulator
. للحصول على أفضل تجربة للمطوّرين، ننصحك بتثبيت استوديو Android واستخدامه لإدارة حزمة تطوير البرامج (SDK) لنظام التشغيل Android.
إذا انقطع اتصال المحاكي بأداة adb، أعِد توصيله من سطر الأوامر على النحو التالي:
adb connect localhost:6520
4. ضبط Unity لإنشاء المحاكي ونشره مباشرةً (اختياري)
قد لا يكون إصدار adb الذي يتم شحنه مع Unity متوافقًا مع المحاكي. للتأكد، انقر على ملف -> أنشئ الإعدادات وتحقَّق من مربع الحوار تشغيل جهاز لمعرفة ما إذا كان مدرجًا أم لا.
بناءً على مشروعك وعملية التصميم ومستوى الراحة، يمكنك اختيار ضبط Unity ليتم نشره في محاكي "ألعاب Google Play" مباشرةً، أو إنشاء حزمة APK ونشرها يدويًا باستخدام adb install
. لنشره يدويًا يتطلب أقل عدد من التغييرات، ولكن قد يؤدي إلى إبطاء دورة التكرار.
ويمكنك النشر إلى المحاكي مباشرةً من خلال هاتين الخطوتين:
- عليك إعداد Unity لاستخدام حزمة تطوير برامج (SDK) أخرى Unity، من المفترض أن تكون الحزمة التي تمّ تثبيتها بواسطة استوديو Android.
- حدِّث إصدار "أدوات الإصدار" لمعالجة خطأ في Unity.
بما أنّ إصدار حزمة تطوير البرامج (SDK) لنظام التشغيل Android الذي تم شحنه من خلال Unity قد لا يرصد المحاكي، يمكنك استخدام "استوديو Android" لتثبيت حزمة تطوير برامج أحدث.
- افتح "استوديو Android" وانقر على تعديل -> التفضيلات -> الأدوات الخارجية.
- أزِل العلامة من المربّع بجانب
Android SDK Tools Installed with Unity
ووفِّر المسار إلى عملية تثبيت "استوديو Android" (عادةًAppData/Local/Android/sdk
). اترك خيار "Android NDK
" وشأنه.
عند إعادة تحميل الأجهزة المتصلة، من المفترض أن تظهر لك Google HPE device (localhost:6520)
في نافذة الإصدار:
بناءً على حالة هذا الخطأ وإصدار Unity، قد تحتاج أيضًا إلى تغيير إصدار أدوات التصميم. لإجراء ذلك، تأكَّد من إنشاء mainTemplate.gradle
وlauncherTemplate.gradle
.
- افتح نافذة إعدادات المشروع للانتقال إلى إعدادات المشغّل وابحث عن قسم "
Publishing Settings
". - مرِّر لأسفل إلى خيارات إنشاء، وحدِّد "نموذج Gradle الرئيسي المخصص". و"نموذج Gradle لمشغّل التطبيقات المخصص"، الذي سينشئ ملفي Gradle ضمن
Assets\Plugins\Android\
.
- استبدِل أي مثيل للسلسلة
**BUILDTOOLS**
بـ30.0.0
. في كلا الملفين، يجب أن يكون قسم التعليمة البرمجية الآن على النحو التالي:
android { compileSdkVersion **APIVERSION** buildToolsVersion '30.0.0'
5- النشر على جهاز Chromebook (اختياري)
يمكنك البدء في تطوير ألعاب متوافقة مع "ألعاب Google Play" بدون الوصول إلى محاكي "ألعاب Google Play" باستخدام جهاز ChromeOS. تحتوي أجهزة Chromebook على لوحات مفاتيح وأجهزة ماوس وشاشات كبيرة ومتوفّرة بأشكال x86، تمامًا مثل برنامج "ألعاب Google Play على الكمبيوتر". سنستخدم المكوّن الإضافي Android Logcat Unity مع جهاز Chromebook.
- افتح "مدير الحزم" وابحث عن
Android Logcat
ضمن "Unity Registry
".
عليك أيضًا ضبط جهاز Chromebook لتطوير Android. ابدأ بتفعيل نظام التشغيل Linux.
- اختَر الإعدادات -> المطوّر -> نظام التشغيل Linux.
بعد ذلك، فعِّل خيار "تصحيح الأخطاء عبر ADB".
- حدد الإعدادات -> المطورون -> بيئة تطوير Linux -> تطوير تطبيقات Android -> فعِّل خيار "تصحيح الأخطاء عبر ADB".
وستحتاج أيضًا إلى الحصول على عنوان IP لجهاز Chromebook. أسهل طريقة للقيام بذلك هي
- انقر على رمز معلومات الشبكة للحصول على عنوان IP لجهاز Chromebook.
- اختَر النافذة -> التحليل -> Android Logcat هو لفتح نافذة Android Logcat.
- افتح قائمة الأجهزة. قد تظهر رسالة
No Device
إذا لم يكن هناك أي اتصال حاليًا.
- انقر على خيارات اتصال أخرى وأدخِل عنوان IP لجهاز Chromebook.
- انقر على ربط. من المفترض أن تظهر لك النافذة تم بنجاح:
يظهر جهاز Chromebook الآن في قائمة "تشغيل الجهاز" من Unity (قد تحتاج إلى إعادة تحميل الشاشة أولاً):
يمكنك الآن نشر الألعاب على جهاز Chromebook وبدء الاختبار والتطوير على أجهزة شبيهة بجهاز الكمبيوتر الشخصي.
6- نشر إصدار تجريبي
تتطلب "ألعاب Google Play" أن تنشر الإصدار x86 من لعبتك، وهذا جزء من طريقة تحقيق لعبتك لمقاييس الأداء على أجهزة الكمبيوتر المكتبية. يمكن لجميع متغيرات الدعم الطويل الأمد (LTS) في Unity إنشاء إصدارات Android متوافقة (x86 وx86-64) (تحمل اسم "نظام التشغيل Chrome")، كما يمكن لإصدار Unity 2018 والإصدارات الأقدم إنشاء إصدارات x86. للاستفادة من هذه البُنى، عليك أولاً التبديل إلى الواجهة الخلفية للنصوص البرمجية بتنسيق IL2CPP، وهي على الأرجح المستخدَمة حاليًا في قناة الإصدار العلني للتوافق مع الإصدار 64.
- حدد ملف -> Build Settings (إعدادات الإصدار) لفتح نافذة Build Settings (إعدادات الإصدار)، ثم النقر على Player Settings (إعدادات المشغّل)
- الانتقال إلى قسم إعدادات أخرى وتبديل
Scripting Backend
إلىIL2CPP
وعليك أيضًا تفعيل التوافق مع الإصدارات x86 أو x86-64. لشحن الطلبات إلى منصة "ألعاب Google Play"، يجب أن يتوافق مع معالج x86 فقط، علمًا أننا ننصح باستخدام x86-64.
كما أنّ إصدار حِزم Unity لمكتبة Frame Pacing غير متوافق مع "ألعاب Google Play"، ويتسبّب في تعطُّل لعبتك عند إطلاقها.
- لإيقاف سرعة الإطار من نافذة إعدادات المشغّل، افتح قسم درجة الدقة والعرض التقديمي وألغِ تحديد وتيرة الإطار المحسّنة.
أنت الآن جاهز للإنشاء!
- افتح نافذة Build Settings (إعدادات الإصدار) مرة أخرى، وانقر على Build and Run (إنشاء وتشغيل). ستظهر لعبتك في نافذة المحاكي.
إذا لم تتمكّن من نشر اللعبة، تحقَّق ممّا إذا كان "جهاز Google HPE (localhost:6520)" يظهر في قائمة "تشغيل الجهاز" الحالية. إذا كانت غير متوفّرة، تأكَّد من أنّ HPE_Dev قيد التشغيل ويمكنك رؤية شاشة Android الرئيسية. إذا استمر عدم ظهور الجهاز في قائمة الأجهزة، شغِّل adb connect localhost:6520
مع تطبيق adb.exe
الدقيق الذي تستخدمه. إذا كنت تستخدم المكوّن الإضافي Android Logcat Unity، اختَر الأدوات -> افتح Terminal لفتح وحدة طرفية في الدليل باستخدام adb.exe
Unity نفسه.
فتح المحطة الطرفية" بارزة" style="width: 624.00px" src="img/9101ce3c95fb1aa2.png" . size="(max-width: 840px) 100vw, 856px">
7. تعديل لعبتك لتناسب الكمبيوتر الشخصي
حاوِل إجراء أي تغييرات على لعبتك متى أمكن وفقًا لمقاييس غير مرتبطة بالنظام الأساسي أو إلى توفُّر ميزات معيّنة. على سبيل المثال، يمكن للّاعب على Android توصيل ماوس ولوحة مفاتيح أو توصيل شاشة، وبالتالي فإنّ تغيير مخطط التحكّم أو عناصر HUD كاستجابة لإعدادات جهازك يتيح لك الاستفادة من عمل برنامج "ألعاب Google Play على الكمبيوتر" على جميع الأنظمة الأساسية المتوافقة.
إذا كان من المنطقي تغيير المنطق استنادًا إلى ما إذا كان اللاعب ضِمن "ألعاب Google Play" أو 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
}
تتميّز أجهزة الكمبيوتر الشخصي بشاشة أكبر من شاشة هاتف Android العادي. عندما يكون ذلك ممكنًا، نوصي ألا تشغل HUD أكثر من 20% من الشاشة. بما أنّ العديد من ألعاب الأجهزة الجوّالة تستخدم الخيار "مقياس مع حجم الشاشة"، سيؤدي تغيير هذا الوضع إلى "الحجم الفعلي الثابت". أو "حجم وحدة بكسل ثابت" يمكن أن تكون خطوة أولى جيدة نحو تحقيق هذا الهدف.
قد تحتاج أيضًا إلى ضبط إعدادات الجودة ديناميكيًا باستخدام الأمر QualitySettings.SetQualityLevel
في وقت التشغيل إذا اكتشفت أنّ جهازك قيد التشغيل في تطبيق "ألعاب Google Play". يستخدم محاكي "ألعاب Google Play" محرِّك ANGLE لإصدار أوامر DoubleClick أو Vulkan الأصلية من إصدار OpenGL Unity، لذا بإمكانك على الأرجح تحقيق دقة رسومات أعلى من تلك التي كانت متاحة في إصدارات لعبتك على الأجهزة الجوّالة.
8. معالجة الإدخال
يجب أن يكون شحن الألعاب في "ألعاب Google Play" يعتمد على إدخال الماوس ولوحة المفاتيح. ستحتاج إلى التخطيط لكيفية التفاعل مع لعبتك باستخدام الماوس ولوحة المفاتيح، لذا خصِّص بعض الوقت الآن للحصول على حزمة الوحدة الموحّدة Input SDK. إذا لم تر عملية تنزيل في تلك الصفحة، فتأكد من تسجيل الدخول باستخدام حساب في مجموعة play-mp-libs.
لأغراض الاختبار، تنشئ العديد من الألعاب عناصر تحكم أساسية بالماوس ولوحة المفاتيح من أجل تطويرها في المحرّر. وعندما يكون ذلك ممكنًا، قد تحتاج إلى تفعيل هذه الميزات عند استخدام جهاز ChromeOS أو في محاكي "ألعاب Google Play".
يحوِّل تطبيق "ألعاب Google Play" ونظام التشغيل ChromeOS تلقائيًا إدخالات الماوس إلى لمسة محاكاة. في حال استخدام Input.GetTouch
وInput.touchCount
، ستستمر لعبتك في العمل على النحو المتوقّع. إذا كنت تعتمد على الإدخال باللمس المتعدد، مثل عناصر التحكّم بالإبهام المزدوج أو التصغير أو التكبير بإصبعين، عليك ضبط الإجراء على الضغطات على المفاتيح. يجب أيضًا ربط الإجراءات داخل اللعبة بالضغط على المفاتيح، مثل الضغط على i لفتح المستودع، ومفتاح Escape لإغلاق مربّعات الحوار، ومفتاح Enter لإرسال رسائل داخل اللعبة.
في هذه اللعبة المصغّرة ثنائية الأبعاد، تستخدم الأسهم للتحرّك ومسافة للقفز. إذا كنت تستخدم لعبتك الخاصة، تأكَّد من أنّه لديك روابط المفاتيح المفضّلة لديك لتنفيذ الخطوة التالية.
9. دمج حزمة تطوير البرامج (SDK) للإدخال
الآن بعد إعداد عناصر التحكّم في الماوس ولوحة المفاتيح، عليك إضافة دعم حزمة تطوير البرامج (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
بقائمة الإجراءات التي تستخدمها في لعبتك. بالنسبة إلى لعبة القفز بين المنصّات الثنائية الأبعاد، تكون الإجراءات Left وRight وJump:
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
لفتح العنصر المركّب داخل اللعبة.
- انقر على عناصر التحكّم للاطّلاع على عناصر التحكُّم التي تم ضبطها.
10. إزالة طرق العرض المضمّنة على الويب
لمنح اللاعبين تجربة رائعة، يجب إزالة طرق عرض الويب المضمّنة. من الشائع استخدام طرق عرض الويب المضمّنة لعرض عناصر مثل سياسة الخصوصية أو بنود الخدمة. على الرغم من أنّ هذه الألعاب متاحة في "ألعاب Google Play"، إلا أنّها تظهر في مساحة تخزين مضمَّنة لجهاز جوّال. المتصفح بدلاً من متصفح سطح المكتب المفضل لدى اللاعب، وقد تتسبب في بعض الالتباس لدى مشغلات الكمبيوتر الشخصي. وبالتالي في Unity، إذا كنت تستخدم أي إضافات لعرض متصفّح مضمّن، عليك الرجوع إلى Application.OpenURL(url)
.
11. الأذونات والميزات
هناك عدد من ميزات Android وأذوناته غير المتوافقة مع "ألعاب Google Play". بشكل عام، يجب ألّا يعرض إصدار الكمبيوتر الشخصي الخاص بك مربع حوار الأذونات مطلقًا. بعد الانتهاء من إعداد تصميمك، من الجيد إجراء عملية تثبيت جديدة معتادة وتدوين أي مربّعات حوار تريد إضافتها إلى قائمة المهام. قائمة لإرسال لعبتك.
بعض ألعاب Unity تطلب الأذونات باستخدام واجهة برمجة التطبيقات Android.Permission. ويجب لف هذه العناصر في عمليات تحقق if (GoogleDeviceUtilities.IsGooglePlayGames)
والانتقال مباشرةً إلى منطق تعذُّر الإجراء، إن أمكن.
12. تحسينات سطح المكتب
هناك بعض الاختلافات بين تطبيق "ألعاب Google Play" وهاتف Android عادي، لذا ننصحك بإعداد لعبتك وفقًا لذلك.
يُرجى التبديل إلى تقنية DXT لضغط البنية. ويتم فك ترميز تنسيقات زخرفة Android الشائعة في الذاكرة في وقت التشغيل، مثل ETC إذا تعذّر نقلها إلى وحدة معالجة الرسومات الخاصة بالمشغّل مباشرةً. تمنحك خدمة ASTC أفضل توافق ممكن مع سطح المكتب، على الرغم من أنّك تحتاج إلى استخدام أداة تحليل وحدة معالجة الرسومات على جهاز سطح المكتب للتحقّق من السلوك المتوقّع للعبتك.
نظرًا لأنك تعمل على وحدة معالجة رسومات سطح المكتب الآن، فقد تحتاج أيضًا إلى زيادة جودة الرسومات. يمكنك تعديلها مباشرةً من خلال إعدادات المشروع ضمن الجودة.
13. تهانينا
لديك كل العناصر اللازمة لبدء العمل على لعبتك في "ألعاب Google Play". يمكنك بدء اختبار لعبتك وتكرارها. تذكَّر أنّه على الرغم من أنّه بإمكانك الاحتفاظ بقاعدة الرموز الخاصة بك، عليك تعديل لعبتك لتبدو وكأنّها لعبة كمبيوتر أصلية.
الخطوات التالية
هناك المزيد من الإجراءات التي يجب اتّخاذها لشحن لعبة إلى "ألعاب Google Play":
- راجِع مقالة Quickstart للاطّلاع على أحدث المعلومات.
- يمكنك الترقية إلى الإصدار 2 من ميزة "تسجيل الدخول إلى خدمات ألعاب Play" لتسجيل دخول اللاعب تلقائيًا عند تشغيل اللعبة والمساعدة في تلبية متطلبات استمرار التشغيل.
- نفِّذ واجهة برمجة التطبيقات Play Integrity API لضمان أمان تجربتك على الكمبيوتر مثل جهازك الجوّال.
أخيرًا، إنّ الكثير من العمل الذي أنجزته حتى الآن لدعم "ألعاب Google Play" يساعدك أيضًا في طرح تطبيقك على ChromeOS، وننصحك بتوفير إمكانية التوافق مع هذه المنصة إلى جانب أجهزة الكمبيوتر الشخصي.