كاميرا مدارية
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 48 من 71.
للدوران حول نقطة، احتفظ بزاوية، ودوّر إزاحة ثابتة بها، ثم أضف الناتج إلى النقطة. يؤدي ضرب متجه في دوران إلى تدويره: 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 مجددًا نحو التمثال من كل موضع جديد.
ترفع زاوية ثانية الكاميرا: يدير Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance) اتجاه الخلف إلى الأعلى بمقدار pitch (فالدوران الموجب حول x يميل (0, 0, -1) إلى الأعلى)، ثم يديره حول المحور بمقدار yaw، لذا تبقى الكاميرا على بُعد distance من الهدف عند أي زاوية.
تُخزَّن الزاوية في حقل خاص بك، كما في زوايا أويلر: يمكنها تجاوز 360 أو الانخفاض عن 0 من دون قفزة، ويمكنك تقييدها أو تغييرها من لوحة المفاتيح. يؤدي تنفيذ ذلك في LateUpdate() إلى وضع الكاميرا بعد تحريك التمثال أو اللاعب خلال الإطار.
التحدي
متوسطاجعل اللاعب يحرّك الكاميرا حول البرج.
- في
Update()، يغيّر السهمان الأيمن والأيسرyawبمقدارturnSpeed، ويغيّر السهمان العلوي والسفليpitchبمقدارtiltSpeed، مضروبًا فيTime.deltaTime. - ثم أبقِ
pitch = Mathf.Clamp(pitch, 10f, 60f);. - في
LateUpdate()، اضبطtransform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance);، ثمtransform.LookAt(target);.
اضغط على «العب» وحلّق حول البرج. ثم اضغط على «تحقق».
جرّب بنفسك
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 للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق4الكوروتينات
InvokeInvokeRepeating, CancelInvokeأول Coroutine لكالحلقات داخل الكوروتيناتإيقاف الكوروتيناتمراجعة: العد التنازلي10المشروع: الهروب من الحلبة
الحلبةالصيادونتدرّب بنفسك: Playground لـ Unity