Unity Game Engine: جعل الكائن يتحرك باستخدام C++ Script
والآن بعد أن عرفت ما هي الأجسام الصلبة وكيفية إرفاقها ،
دعنا نمضي قدمًا ونضعها في الاستخدام الفعلي.
واحدة من أفضل الطرق ، التي يمكننا التفكير فيها ، لشرح عمل Rigidbodies
هي جعل اللاعب يتحرك باستخدام مفاتيح الأسهم.
للقيام بذلك ، افتح نص الحركة الذي صنعناه سابقًا.
في حالة حذفه أو إذا كنت تعمل في مشروع جديد نظيف ، ما عليك سوى
إنشاء برنامج نصي جديد وتسميته حركة .
فتحه في IDE الخاص بك، وسترى ما هو مألوف Start() و
Update() الأساليب التي شرحناها سابقا.
الآن ، دعنا نلقي نظرة على كل سطر من التعليمات البرمجية بالتفصيل ونحاول فهم ما يحدث هنا.
لا تقلق إذا لم تتمكن من فهم كل ذلك مرة واحدة ، فسوف تتعلم بينما نتقدم إلى الأمام.
الكود :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Movement : MonoBehaviour {
public RigidBody2D starBody,
public float speed;
void start()
{
// use this function to initialize
// anything
}
// Update is called once per frame
void update()
{
starBody.velocity() = new Vector2(Input.GetAxisRaw("Horizontal")*speed, Input.GetAxisRaw("Vertical")*2);
}
}
حسنا دعنا نشرح ماهي فائدة هذه الاسطر البرمجية :
Line → public Rigidbody2D starBody :
يعلن ببساطة عن مثيل لـ Rigidbody2D ، اسمه starBody .
- ( او اسم الكائن الذي اخترت وضعه في لعبتك ) -
قم بتدوين public معدِّل الوصول ، وسنأتي إليه قريبًا.
Line → public float speed :
التصريح البسيط لقيمة النقطة العائمة المسماة speed .
مرة أخرى ، قم بتدوين أداة public تعديل الوصول المستخدمة هنا.
Line → void Start () :
لاحظ أن هذه الطريقة فارغة تمامًا.
لم نقم حتى بتعيين أي قيمة لـ speed و starBody .
كنت تتوقع الحصول على NullReferenceExceptions أو
UnassignedReferenceException تم إلقاؤها في كل مكان وفوضى عامة ،
إذا لم نعط هذه المتغيرات شيئًا للعمل معها ، أليس كذلك؟
ومع ذلك ، تظل هذه الطريقة فارغة بشكل غامض.
Line → ([Inside Update method] starBody.velocity = new Vector2(Input.GetAxisRaw ...):
هذا هو المكان الرئيسي العمل يجري حول شخصية اللعبة دعونا نشرح سطر واحد :
الكلمات starBody.velocity = تعني ،
نحن نخصص سرعة للجسم الصلب المشار إليه حاليًا
starBody، بينما new Vector2(...)يعني ذلك أن سرعة الجسم الصلب
تُعرَّف على أنها a Vector2 ، حيث تكون معلمات الإدخال هي
السرعة على طول المحور X والمحور Y على التوالي.
الآن، لسحر الفعلي في هذه المدونة:
Input.GetAxisRaw("Horizontal") و
Input.GetAxisRaw("Vertical") ما هي هذه الأشياء؟
حسنًا ، يتم توفير فئة الإدخال مع MonoDevelop للتعامل مع المدخلات.
لديها تعريفات لما كنت استدعاء محاور الإدخال يعرف بأنه أفقي و عمودي .
ما يحدث في الأساس على أن اللعبة هو يكتشف المدخلات المقابلة لـ
أفقي و عمودي محاور المدخلات، ووضع لهم -1، 0 أو 1 اعتمادا على زر تضغط.
لذلك ، عندما تضغط على مفتاح السهم الأيمن ، فهذا يعني أنك تقوم بتعيين قيمة المحور الأفقي إلى 1.
بمجرد أن تترك مفتاح السهم هذا ،
فإن القيمة الموجودة على هذا المحور تقفز مرة أخرى إلى 0.
الآن ، في لغة اللعبة ، هذا يعني ببساطة ،
حرك الحرف بمقدار وحدة واحدة أفقيًا لكل إطار عند الضغط على مفتاح السهم الأيمن.
إن إبقائها عند 1 يعني أن الجسم سوف يتحرك ببطء .
ومن ثم نضرب هذه القيمة مع تعويم السرعة ، وبذلك نقول ،
حرك الحرف بمقدار ضعف السرعة ، وبما أننا نعلم أن أي شيء مضروبًا في 1 هو نفس القيمة ،
فإننا نقول فعليًا تحريك الحرف أفقيًا بهذه السرعة عند الضغط على أزرار المحور .
ملاحظة:
افتراضيا، أزرار محور على لوحة المفاتيح القياسية هي أعلى و أسفل السهام،
وكذلك W و S للمحور الرأسي، و اليسار و اليمين السهام، وكذلك A و D للمحور الأفقي.
للمضي قدمًا ، ما يحدث في هذا السطر هو في الأساس الجملة التالية:
امنح هذا الجسم الصلب سرعة في عالم اللعبة ، حيث تكون السرعة الأفقية
(المحور الأفقي * السرعة) والسرعة الرأسية (المحور الرأسي * السرعة)
الآن ، للانتهاء ، احفظ هذا البرنامج النصي والعودة إلى Unity .
لإرفاق البرنامج النصي بكائن ، ما عليك سوى سحبه وإفلاته فوق هذا الكائن ،
أو الانتقال إلى Add Component → Scripts .
ومن ثم نضرب هذه القيمة مع تعويم السرعة ، وبذلك نقول ،
حرك الحرف بمقدار ضعف السرعة ، وبما أننا نعلم أن أي شيء مضروبًا في 1 هو نفس القيمة ،
فإننا نقول فعليًا تحريك الحرف أفقيًا بهذه السرعة عند الضغط على أزرار المحور .
الآن ، تذكر كيف طلبنا منك تدوين public مُعدِّلات الوصول عندما كنا نكتب نصوصنا؟
ألق نظرة على مكون البرنامج النصي.
ستلاحظ أنه جنبًا إلى جنب مع البرنامج النصي ،
قامت Unity تلقائيًا بإنشاء حقلين لإدخال كل من Rigidbody2D وتعويم السرعة.
هذا هو سحر Unity.
Valuesو class الحالات أعلن علنا يمكن أن ينظر في محرر حيث يمكنك
إجراء تعديلات دون ان يكون لدينا باستمرار للنظر في التعليمات البرمجية الخاصة بك في كل وقت.
لتعيين Rigidbody2D للحقل الأول ، انقر فوق الدائرة الصغيرة التي بها نقطة بجوار الحقل مباشرةً.
سيؤدي هذا إلى فتح قائمة بالأجسام الصلبة المتاحة في المشهد والتي يمكنك استخدامها.
في الوقت الحالي ، نظرًا لأن لدينا جسم صلب واحد فقط في المشهد بأكمله ،
انقر فوق الذي يظهر في القائمة.
ما الذي أنجزته للتو من خلال القيام بذلك؟
تذكر كيف لم نقم بإسناد أي شيء إلى starBody المتغير
عندما كنا نكتب البرنامج النصي؟ هذا هو المكان الذي نخصصه فيه.
يمكننا تعيين المكونات والقيم بواجهة مستخدم بسيطة بدلاً من الاضطرار إلى كتابتها في الكود.
بعد ذلك ، قم بتعيين قيمة السرعة في الحقل التالي
لا تضعه عالياً للغاية وإلا فقد تطير شخصيتك قبل أن تتمكن من معرفة إلى أين ذهب.
هذه مشكلة لأن الكاميرا الخاصة بنا ثابتة ، لذا فإن إعادة وضعها للعرض
سيصبح مهمة أسهل بكثير من القيام بها.
نقترح ضبط السرعة حول 5.
هذا ما يجب أن يبدو عليه مكون البرنامج النصي الخاص بك بمجرد الانتهاء:
انقر الآن على زر التشغيل ودعنا نرى ما سيحدث.
إذا سارت الأمور على ما يرام ، ستلاحظ أنه يمكنك الآن تحريك شخصيتك
باستخدام مفاتيح الأسهم. رائع!