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

استشراف الحركة

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

تُظهر الكاميرا الموجّهة نحو هدف متحرك جزءًا مما قطعه بقدر ما تُظهر وجهته. وجّهها إلى نقطة أمامه بدلًا من ذلك: موضع الهدف زائد سرعته مضروبة في مدة الاستباق بالثواني. تدور هذه الكاميرا المثبّتة على حامل بجانب مضمار سباق لتتبع السيارة، وتوجّه نظرها إلى نقطة أمامها بنصف ثانية:

public Rigidbody car;
public float lead = 0.5f;

void LateUpdate()
{
    Vector3 aim = car.position + car.linearVelocity * lead;
    transform.LookAt(aim);
}

عند سرعة 20 وحدة في الثانية، تكون نقطة التصويب على بُعد 10 وحدات أمام السيارة، وعند سرعة 4 وحدات في الثانية تكون على بُعد وحدتين، أما السيارة المتوقفة فتُوجَّه الكاميرا إليها مباشرةً. تمثل السرعة حركة السيارة الفعلية، لذا تكون النقطة في المكان الصحيح عند الانزلاق أو الرجوع إلى الخلف. أما transform.forward فلن يصلح لذلك: إذ يشير اتجاه السيارة إلى الأمام بعيدًا عن وجهتها عند الرجوع إلى الخلف، كما يدور اتجاه الكرة المتدحرجة معها.

يمكن لكاميرا التتبع أن تستبق الهدف أيضًا: إذ تؤطر نقطة أمام هدفها بدلًا من الهدف نفسه. عندما يمكن أن تنتقل هذه النقطة إلى الجانب الآخر، كما يحدث عند استدارة اللاعب، غيّر مقدار الاستباق قليلًا في كل إطار، وإلا فسيقفر المشهد بأكمله دفعة واحدة.

challenge icon

التحدي

متوسط

يتبع هذا المنظور الجانبي العداء على محور x (تُحرّكه الأسهم إلى اليسار واليمين). اجعل الكاميرا تُظهر مساحة أكبر في الاتجاه الذي يتجه إليه العداء:

  • تتمركز الكاميرا على بُعد ahead (3) وحدات أمام العداء على محور x، في الجهة التي تحرّك العداء نحوها آخر مرة. وقبل أن يتحرك العداء لأول مرة، تكون الكاميرا متمركزة عليه.
  • عندما يغيّر العداء اتجاهه، ينتقل التقدّم إلى الجهة الأخرى بسرعة shiftSpeed (4) وحدات في الثانية بدلًا من القفز إليها.
  • عندما يتوقف العداء، تحافظ الكاميرا على تقدّمها.
  • يبقى موضع الكاميرا على المحورين y وz كما هو.

اضغط Play، واركض في كلا الاتجاهين، ثم اضغط Check.

جرّب بنفسك

using UnityEngine;

public class LookAheadCamera : MonoBehaviour
{
    public Transform player;
    public float ahead = 3f;
    public float shiftSpeed = 4f;

    void LateUpdate()
    {
        // اجعل الكاميرا تتقدم على اللاعب بمقدار ahead من الوحدات في اتجاه حركته الأخيرة، مع انتقال انسيابي بسرعة shiftSpeed.
        transform.position = new Vector3(player.position.x, transform.position.y, transform.position.z);
    }
}
quiz iconاختبر نفسك

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

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