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

متابعة سلسة

جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 45 من 63.

الكاميرا التي تنسخ موضع اللاعب مع إضافة إزاحة في LateUpdate() تجعل كل اهتزازة للاعب اهتزازةً في المشهد. تُرجع Vector3.SmoothDamp(current, target, ref velocity, smoothTime) موضعًا يتحرك نحو target بالطريقة التي يتحرك بها نابض مخمّد: تتسارع، ثم تتباطأ كلما اقتربت من الهدف، وتصل إليه دون تجاوزه. تتبع هذه الكاميرا اللاعب من ارتفاع 3 وحدات ومن مسافة 6 وحدات خلفه، مع تأخر بسيط:

public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);
public float smoothTime = 0.3f;
Vector3 velocity;

void LateUpdate()
{
    Vector3 target = player.position + offset;
    transform.position = Vector3.SmoothDamp(transform.position, target, ref velocity, smoothTime);
}

يمرّر ref إلى SmoothDamp المتغير نفسه بدلًا من نسخة منه، لكي تتمكن الدالة من تغييره. تحتفظ SmoothDamp بالسرعة الحالية للكاميرا على المحاور الثلاثة كلها في velocity، وتحتاج إليها مجددًا في الإطار التالي، ولهذا فهي حقل. لو أُعلن عنها داخل LateUpdate()، لبدأت من الصفر في كل إطار، ولتحركت الكاميرا ببطء شديد، قاطعةً نحو نصف بالمئة من المسافة في كل إطار. بالنسبة إلى رقم واحد، مثل تقريب الكاميرا، تعمل Mathf.SmoothDamp بالطريقة نفسها مع سرعة من النوع float.

يحدد smoothTime مقدار تأخر الكاميرا: عند ضبطه على 0.3، تقطع الكاميرا نحو 60% من قفزة مفاجئة خلال 0.3 ثانية، وتكاد تصل إلى الهدف بعد ثانية واحدة. تؤدي القيمة الأصغر إلى تتبّع أكثر إحكامًا. تقرأ SmoothDamp قيمة Time.deltaTime بنفسها، لذا لا يُضرب أي شيء في الاستدعاء بها.

challenge icon

التحدي

متوسط

تنظر الكاميرا إلى اللاعب من ارتفاع ثابت. اجعلها تتبعه بسلاسة باستخدام Vector3.SmoothDamp وsmoothTime (0.25)، مع الاقتراب تدريجيًا من هذا الموضع:

  • x: قيمة x للاعب؛
  • z: مسافة back (5) وحدات خلف اللاعب، باتجاه -z؛
  • y: دائمًا height (12)، مهما كان ارتفاع اللاعب نفسه. تجعل مفتاح المسافة اللاعب يقفز، ويجب ألا تهتز الكاميرا.

اضغط على Play، وتحرك واقفز، ثم اضغط على Check.

جرّب بنفسك

using UnityEngine;

public class TopDownCamera : MonoBehaviour
{
    public Transform player;
    public float height = 12f;
    public float back = 5f;
    public float smoothTime = 0.25f;

    void LateUpdate()
    {
        // تحرّك بسلاسة نحو الموضع فوق اللاعب (x)، وعلى بُعد back وحدات خلفه (z)، عند ارتفاع ثابت.
    }
}
quiz iconاختبر نفسك

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

جميع دروس الفيزياء وأسلوب اللعب