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

كاميرا مدارية

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

للدوران حول نقطة، احتفظ بزاوية، وأدر إزاحة ثابتة بها، ثم أضف الناتج إلى النقطة. حاصل ضرب الدوران في المتجه هو ما ينفّذ الدوران: Quaternion.Euler(0, angle, 0) * offset يدير الإزاحة حول المحور y، بينما يبقى طولها وارتفاعها كما هما. تدور هذه الكاميرا حول تمثال بمعدل 20 درجة في الثانية، وعلى ارتفاع 3 وحدات وبُعد 6 وحدات دائمًا:

public Transform statue;
public float speed = 20f;
float angle;

void LateUpdate()
{
    angle += speed * Time.deltaTime;
    Vector3 offset = new Vector3(0, 3, -6);
    transform.position = statue.position + Quaternion.Euler(0, angle, 0) * offset;
    transform.LookAt(statue);
}

عند الزاوية 0 تكون الإزاحة (0, 3, -6)، لذا تكون الكاميرا خلف التمثال. وعند 90 تصبح (-6, 3, 0)، على جانب التمثال السالب على محور x، وعند 180 تصبح (0, 3, 6)، أمامه. تحريك الكاميرا لا يوجّهها، لذا يوجّهها LookAt مجددًا نحو التمثال من كل موضع جديد.

تُخزَّن الزاوية في حقل خاص بك، كما في زوايا أويلر: يمكنها أن تتجاوز 360 أو تنخفض إلى أقل من 0 دون قفزة، ويمكنك تقييدها أو تغييرها من لوحة المفاتيح. إن تنفيذ ذلك في LateUpdate() يضع الكاميرا بعد تحرّك التمثال، أو اللاعب، خلال الإطار.

challenge icon

التحدي

متوسط

دع اللاعب يحرّك الكاميرا حول البرج، مع الحفاظ دائمًا على distance (8) وحدات من موضع البرج، والنظر إليه دائمًا. يحتفظ البرنامج بزاويتين في yaw وpitch:

  • yaw هي مقدار دوران الكاميرا حول البرج. يزيد السهم الأيمن هذه الزاوية ويقللها السهم الأيسر، بمعدل turnSpeed (90) درجة في الثانية. عند yaw 0 تكون الكاميرا على جانب -z من البرج؛ وعند yaw 90 تكون على جانب -x.
  • pitch هي عدد الدرجات التي ترتفع بها الكاميرا فوق مستوى البرج، عند النظر من جهة البرج. يزيد السهم لأعلى هذه الزاوية ويقللها السهم لأسفل، بمعدل tiltSpeed (45) درجة في الثانية، وتبقى بين 10 و60.

تبدأ عند yaw 0 وpitch 30، ما يجعلها على ارتفاع 4 وحدات فوق موضع البرج، وعلى بُعد 6.93 وحدات خلفه. اضغط Play، وحلّق حوله، ثم اضغط Check.

جرّب بنفسك

using UnityEngine;

public class OrbitCamera : MonoBehaviour
{
    public Transform target;
    public float distance = 8f;
    public float turnSpeed = 90f;
    public float tiltSpeed = 45f;
    public float yaw = 0f;
    public float pitch = 30f;

    void Update()
    {
        // تغيّر مفاتيح الأسهم yaw وpitch.
    }

    void LateUpdate()
    {
        // ضع الكاميرا حول target ووجّهها نحوه.
    }
}
quiz iconاختبر نفسك

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

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