Menu
CoddyTech

القوائم في 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> خاص به، واحتفظ بقائمة من هذه الأصناف.

challenge icon

التحدي

سهل

اعرض حوار ميرا وتوم سطرًا واحدًا في كل مرة.

  1. عرّف فئة [System.Serializable] باسم Line تحتوي على سلسلتين نصيتين عامتين هما speaker وtext، وأضف public List<Line> lines;.
  2. في البداية، اعرض lines[0]: المتحدث في speakerText، ونصه في lineText.
  3. يعرض مفتاح المسافة السطر التالي، حتى 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

تدرّب بنفسك: Playground لـ Unity