نقل البيانات إلى الإصدار التجريبي من حزمة تطوير البرامج (SDK) للإدخال 1.0.0

يوضّح هذا الدليل كيفية نقل بيانات لعبة Unity لاستخدام أحدث إصدار من حزمة SDK لنظام "إدخال البيانات". تتضمّن حزمة SDK التجريبية 1.0.0 تحسينات كبيرة مقارنةً بالإصدار التمهيدي السابق 0.0.4. يجب نقل البيانات من الإصدارات السابقة من التطبيق في أقرب وقت ممكن. ستستمر حزمة SDK 0.0.4 في العمل حتى آذار (مارس) 2023.

تعديل المراجع

تلقّت الصفوف البادئة Play لتجنُّب تعارضات الأسماء مع Unity. عندما تظهر لك رسالة خطأ مشابهة لما يلي:

الخطأ CS0246: تعذّر العثور على اسم النوع أو النطاق "InputMappingProvider" (هل تفتقد إلى توجيه استخدام أو مرجع تجميع؟)

يجب إضافة البادئة Play إلى اسم الصف. على سبيل المثال، InputMappingProvider يصبح PlayInputMappingProvider.

تعديل كل InputAction

يتم الآن إنشاء InputAction من خلال طلب PlayInputAction.Create بدلاً من إنشاء struct جديد باستخدام حقول مُسمّاة.

حدِّد موقع أي رمز يستدعي new InputAction:

var driveAction = new InputAction
{
    ActionLabel = "Drive",
    UniqueId = (int)InputEventIds.DRIVE,
    InputControls = new InputControls
    {
        AndroidKeycodes = new[] { AndroidKeyCode.KEYCODE_SPACE }
    }
};

واستبدِلها بمكالمة إلى PlayInputAction.Create:

var driveAction = PlayInputAction.Create(
    "Drive",
    (int)InputEventIds.DRIVE,
    PlayInputControls.Create(
        new[] { AndroidKeyCode.KEYCODE_SPACE },
        null
    )
);

تعديل كل InputGroup

كما هو الحال مع "InputAction"، أصبح لدى "InputGroup" الآن مكالمة PlayInputGroup.Create بدلاً من أن يطلب منك ملء struct يدويًا.

وهذا يعني أنه عليك تحديد موقع أي مكالمات مع "new InputGroup":

var gameInputGroup = new InputGroup
{
    GroupLabel = "Game controls",
    InputActions = new List<InputAction>
    {
        driveAction,
        turboAction,
        openGarageAction,
        openStoreAction
    }
};

واستبدِله بمكالمة إلى PlayInputGroup.Create:

var gameInputGroup = PlayInputGroup.Create(
    "Game controls",
    new List<PlayInputAction>
    {
        driveAction,
        turboAction,
        openGarageAction,
        openStoreAction
    }
);

تحديث EnterMap

يستخدم InputMap PlayInputMap.Create أيضًا بدلاً من إنشاء struct جديدة.

تحديد موقع أي مكالمات مع "new InputMap":

return new InputMap
{
    InputGroups = new List<InputGroup>
    {
        gameInputGroup,
        menuInputGroup
    },
    MouseSettings = new MouseSettings
    {
        AllowMouseSensitivityAdjustment = false,
        InvertMouseMovement = false
    }
};

واستبدِله بدعوة إلى PlayInputMap.Create:

return PlayInputMap.Create(
    new List<PlayInputGroup>
    {
        gameInputGroup,
        menuInputGroup
    },
    PlayMouseSettings.Create(false, false)
);

إعادة تسمية طرق PlayInputMappingClient

بالنسبة إلى PlayInputMappingClient، تمت إعادة تسمية RegisterInputMappingProvider إلى SetInputMappingProvider.

لتحديد موقع أي مكالمات إلى RegisterInputMappingProvider:

Input.GetInputMappingClient().RegisterInputMappingProvider(_inputMappingProvider);

واستبدِلها بدعوة إلى SetInputMappingProvider:

PlayInputMappingClient inputMappingClient =
    Google.Play.InputMapping.PlayInput.GetInputMappingClient();
inputMappingClient.SetInputMappingProvider(_inputMapProvider);

تمت أيضًا إعادة تسمية UnregisterInputMappingProvider ليصبح ClearInputMappingProvider ولم يعُد يتطلّب استخدام InputMappingProvider المسجّل سابقًا كمَعلمة.

تحديد موقع أي مكالمات مع "UnregisterInputMappingProvider":

Input.GetInputMappingClient().UnregisterInputMappingProvider(_inputMapProvider);

واستبدِلها بـ ClearInputMappingProvider:

PlayInput.GetInputMappingClient().ClearInputMappingProvider();