متابعة سلسة
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 47 من 71.
الكاميرا التي تنسخ موضع اللاعب مع إضافة إزاحة في 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 بنفسها، لذلك لا يُضرب أي شيء في الاستدعاء بها.
التحدي
متوسطاجعل الكاميرا تتبع اللاعب بسلاسة من ارتفاع ثابت.
- أضف الحقل
Vector3 velocity;. - في
LateUpdate()، أنشئVector3 target = new Vector3(player.position.x, height, player.position.z - back);، حتى لا تغيّر القفزة موضع العرض. - عيّن
transform.position = Vector3.SmoothDamp(transform.position, target, ref velocity, smoothTime);.
اضغط «العب»، وتحرك واقفز: ستتأخر الكاميرا قليلًا، ولن تتمايل أبدًا. ثم اضغط «تحقق».
جرّب بنفسك
using UnityEngine;
public class TopDownCamera : MonoBehaviour
{
public Transform player;
public float height = 12f;
public float back = 5f;
public float smoothTime = 0.25f;
void LateUpdate()
{
// تحرّك بسلاسة نحو الموضع فوق player على المحور (x)، وعلى بُعد back وحدة خلفه على المحور (z)، مع الحفاظ على ارتفاع ثابت.
}
}
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق4الكوروتينات
InvokeInvokeRepeating, CancelInvokeأول Coroutine لكالحلقات داخل الكوروتيناتإيقاف الكوروتيناتمراجعة: العد التنازلي10المشروع: الهروب من الحلبة
الحلبةالصيادونتدرّب بنفسك: Playground لـ Unity