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

Update وLateUpdate

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

في كل إطار، تستدعي Unity الدالة Update() في كل نص برمجي، ولا تستدعي LateUpdate() في كل نص برمجي إلا بعد أن تنتهي جميعها. ليس لك أن تحدد أي كائن تُنفَّذ عليه Update() أولًا.

هذا مهم لكل ما يتبع شيئًا آخر. قد تعمل كاميرا تنسخ موضع اللاعب في Update() قبل أن تنقل دالة Update() الخاصة باللاعب موضعه، فتنسخ موضع اللاعب قبل إطار: تتأخر الكاميرا خطوة، وقد يتغير حدوث ذلك عند إضافة كائنات أو إعادة تحميل المشهد. أما في LateUpdate()، فيحدث النسخ دائمًا بعد تحرك اللاعب:

public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);

void LateUpdate()
{
    transform.position = player.position + offset;
}

القاعدة: حرّك الأشياء في Update()، وضع الشيفرة التي تتفاعل مع المواضع النهائية للأشياء، مثل الكاميرات والتسميات والتصويب، في LateUpdate(). تُنفَّذ كلتاهما مرة واحدة في كل إطار، وتعني Time.deltaTime الشيء نفسه في كلتيهما.

challenge icon

التحدي

متوسط

يشغّل كلٌّ من اللاعب وبطاقة اسمه النص البرمجي Mover. في Player، تكون target فارغة، لذا تحرّك الأسهم اللاعب. وفي NameTag، تكون target هي اللاعب، لذا تستقرّ البطاقة على ارتفاع offset فوقه.

اضغط على Play واستمر في الضغط على أحد الأسهم: ستتأخر البطاقة عن اللاعب. هنا تُنفَّذ Update() الخاصة بالبطاقة أولًا، وتنسخ موضع اللاعب قبل إطار واحد. أصلح ذلك بحيث تكون البطاقة فوق اللاعب تمامًا في كل إطار، وأبقِ حركة الأسهم في Update(). ثم اضغط على Check.

جرّب بنفسك

using UnityEngine;

public class Mover : MonoBehaviour
{
    public Transform target;
    public Vector3 offset;
    public float speed = 4f;

    void Update()
    {
        if (target != null)
        {
            transform.position = target.position + offset;
        }
        else
        {
            if (Input.GetKey(KeyCode.RightArrow))
            {
                transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
            }
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
            }
        }
    }
}
quiz iconاختبر نفسك

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

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