كاميرا مدارية
جزء من قسم الفيزياء وأسلوب اللعب في رحلة 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() يضع الكاميرا بعد تحرّك التمثال، أو اللاعب، خلال الإطار.
التحدي
متوسطدع اللاعب يحرّك الكاميرا حول البرج، مع الحفاظ دائمًا على 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 ووجّهها نحوه.
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق