القوائم في Inspector
جزء من قسم هندسة الألعاب في Unity في رحلة Unity على Coddy. الدرس 19 من 64.
قائمة من عناصر [System.Serializable] هي جدول تملؤه في نافذة Inspector. يسلك هذا الحارس مسارًا يمر بمحطات، وينتظر عند كل محطة طالما أن العنصر الخاص بها يحدد ما يلي:
[System.Serializable]
public class Stop
{
public Transform point;
public float wait = 1f;
}
public class Patrol : MonoBehaviour
{
public float speed = 3f;
public List<Stop> stops;
private int current;
private float waited;
void Update()
{
Stop stop = stops[current];
transform.position = Vector3.MoveTowards(transform.position, stop.point.position, speed * Time.deltaTime);
if (transform.position != stop.point.position) return;
waited += Time.deltaTime;
if (waited >= stop.wait)
{
waited = 0f;
current = (current + 1) % stops.Count;
}
}
}تعرض نافذة Inspector Stops مع عدد عناصرها وقائمة قابلة للطي لكل عنصر: Element 0 وElement 1 وهكذا، ويحتوي كل منها على Point وWait. يضيف زر + عنصرًا، ويحذف زر الناقص العنصر المحدد، ويسمح المقبض الموجود على يسار الصف بسحبه إلى موضع جديد في المسار. يقرأ الكود القائمة كالمعتاد: عناصر stops.Count، وstops[current].point، ويعيد (current + 1) % stops.Count الترتيب إلى المحطة الأولى بعد الأخيرة. يمكن لمصمم المستوى أن يحدد لحارسٍ ثلاث محطات، ولآخر عشر محطات، دون تعديل البرنامج النصي.
تُعرض المصفوفة public Stop[] stops; بالطريقة نفسها. ينسخ زر + في Unity العنصر الأخير، لذا تبدأ المحطة الجديدة بالنقطة ومدة الانتظار نفسيهما للمحطة التي فوقها. لا يعرض Unity قائمة متداخلة ولا يحفظها، مثل List<List<Stop>>، ولا يعرض Dictionary ولا يحفظه. بدلًا من ذلك، لفّ القائمة الداخلية داخل صنف [Serializable]، مثل Route يحتوي على List<Stop> خاص به، واحتفظ بقائمة من هذه الأصناف.
التحدي
سهلاعرض حوار ميرا وتوم سطرًا واحدًا في كل مرة.
- عرّف فئة
[System.Serializable]باسمLineتحتوي على سلسلتين نصيتين عامتين هماspeakerوtext، وأضفpublic List<Line> lines;. - في البداية، اعرض
lines[0]: المتحدث فيspeakerText، ونصه فيlineText. - يعرض مفتاح المسافة السطر التالي، حتى
lines.Count. بعد السطر الأخير، أخفِboxوسجّلDialogue over؛ بعد ذلك، لن يفعل مفتاح المسافة شيئًا.
اضغط على «العب» واقرأ باستخدام مفتاح المسافة. ثم اضغط على «تحقق».
جرّب بنفسك
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;
public class Dialogue : MonoBehaviour
{
public GameObject box;
public TMP_Text speakerText;
public TMP_Text lineText;
void Start()
{
// أظهر السطر الأول
}
void Update()
{
// Space: السطر التالي، أو نهاية المحادثة
}
}
جميع دروس هندسة الألعاب في Unity
1المكوّنات، لا التسلسلات الهرمية
مكوّنات صغيرةنص برمجي أساسي للعدومكوّنات مجرّدةالمكوّنات تعمل معًامراجعة: برج معياريمراجعة: مدفع مزدوج4البيانات المُسلسلة
الأصناف القابلة للتسلسلالقوائم في Inspectorالتعدادات في Inspectorمراجعة: جدول الغنائممراجعة: اختيار الغنائم عشوائيًا2الواجهات في Unity
IDamageableالواجهات وTryGetComponentGetComponentsمراجعة: مفتاح التفاعلمراجعة: أقرب عنصر ضمن النطاقتدرّب بنفسك: Playground لـ Unity