Menu
CoddyTech
flag Ar iconالعربيةdown icon

Vector3 بنية Struct

جزء من قسم أساسيات البرمجة النصية في Unity في رحلة Unity على Coddy. الدرس 22 من 67.

Vector3 هو struct، وهو نوع لم تتناوله رحلة C#. الـ struct قيمة، مثل int: إسنادها ينسخها بالكامل. بعد Vector3 b = a; b.x = 9;، لا تتغير a.x، لأن b نسخة منفصلة. (أما class فتعمل بطريقة مختلفة: يمكن لمتغيرين الإشارة إلى كائن واحد مشترك.)

transform.position خاصية، وقراءتها تمنحك نسخة من الموضع. لذا فإن transform.position.x = 0; سيغيّر نسخة يتم التخلص منها فورًا، ويرفض C# ترجمة ذلك: error CS1612: Cannot modify the return value of 'Transform.position' because it is not a variable. الحل هو نسخ الموضع، وتغيير النسخة، ثم إسنادها مجددًا. يعود هذا العداء إلى المسار الأوسط عند الضغط على Space:

if (Input.GetKeyDown(KeyCode.Space))
{
    Vector3 p = transform.position;   // انسخ
    p.x = 0;                          // عدّل النسخة
    transform.position = p;           // أعد إسنادها
}

إذا حذفت السطر الأخير، فسيُترجم الكود، لكن لن يتحرك شيء: الذي تغيّر هو النسخة فقط. تعمل transform.localScale وخصائص Vector3 الأخرى بالطريقة نفسها.

challenge icon

التحدي

سهل

تهبط الزلاجة بمعدل fall وحدة في الثانية، وتحركها الأسهم على طول المحور x. من المفترض أن يُبقيها سطران على الأرض (ألا تقل y عن 0.5) وبين الجدارين (من -4 إلى 4 على المحور x)، لكن البرنامج النصي لا يُترجم.

اضغط على Play لرؤية الأخطاء. أصلح السطرين بالعمل على نسخة من الموضع، مع الإبقاء على ما يفعلانه، ثم اضغط على Check.

جرّب بنفسك

using UnityEngine;

public class Sled : MonoBehaviour
{
    public float speed = 4f;
    public float fall = 3f;

    void Update()
    {
        float h = Input.GetAxisRaw("Horizontal");
        transform.position += new Vector3(h * speed, -fall, 0) * Time.deltaTime;

        // أبقِ الزلاجة على الأرض وبين الجدران.
        transform.position.y = Mathf.Max(transform.position.y, 0.5f);
        transform.position.x = Mathf.Clamp(transform.position.x, -4f, 4f);
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس أساسيات البرمجة النصية في Unity