مصادمات المحفزات
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 15 من 71.
لم يعد المصادم الذي تم تحديد خيار Is Trigger فيه صلبًا: فالأجسام الصلبة تمر عبره مباشرةً، وتُبلغ Unity عن التداخل بدلًا من ذلك، وذلك باستدعاء OnTriggerEnter في نصوص كلا الجسمين. خطوط النهاية والعناصر القابلة للالتقاط ومناطق الخطر هي مُشغِّلات. في الشيفرة، يُمثّل مربع الاختيار خاصية المصادم isTrigger.
تُحوِّل منطقة الإنذار في هذا القبو المصادم الخاص بها إلى مُشغِّل عند بدء اللعبة، وهذا يعادل تحديد مربع الاختيار، وتُطلق الإنذار عندما يدخل أحد الحراس:
void Start()
{
GetComponent<Collider>().isTrigger = true;
}
void OnTriggerEnter(Collider other)
{
Debug.Log("Alarm!");
}تتبع المُشغِّلات القاعدة نفسها التي تتبعها التصادمات: لا تتحقق Unity من زوج إلا إذا كان لدى أحد الجسمين على الأقل مكوّن Rigidbody. ولا يُبلّغ جسمان لا يملك أيٌّ منهما هذا المكوّن عن بعضهما أبدًا، سواء كانا مُشغِّلين أم لا. يقوم نص برمجي بدورية الحراس، لذا يملك كل حارس مكوّن Rigidbody حركيًا (إضافة مكوّن، Rigidbody، مع تحديد Is Kinematic): لا تؤثر فيه الجاذبية ولا الاصطدامات، لكنه يظل يُحسب مكوّن Rigidbody. من دون مكوّنات Rigidbody لدى الحراس، سيمر الحارس عبر المنطقة وستظل وحدة التحكم فارغة. ومن دون isTrigger، تكون المنطقة صندوقًا صلبًا، والجسم الحركي لا يلامس أبدًا مصادمًا لا يملك مكوّن Rigidbody، لذا لن يُسجَّل أي شيء مرة أخرى. يكفي وجود مكوّن Rigidbody واحد في الزوج، على أيٍّ من الجسمين. يتناول الدرس التالي other، أي المصادم الذي دخل المنطقة.
التحدي
سهلحلّق بالطائرة المسيّرة عبر الحلقات، ودع كل حلقة تُبلّغ عنها.
- في
Start()ضمنDrone.cs، عيّنbody = gameObject.AddComponent<Rigidbody>();وbody.isKinematic = true;، لكي تحلّق على مستوى ثابت. - في
Start()ضمنRing.cs، عيّنGetComponent<Collider>().isTrigger = true;.
اضغط «العب»: ستحلّق الطائرة المسيّرة عبر الحلقات، وستعرض وحدة التحكم Ring1 passed وRing2 passed وRing3 passed. ثم اضغط «تحقق».
جرّب بنفسك
using UnityEngine;
public class Ring : MonoBehaviour
{
void Start()
{
// اجعل مصادم هذه الحلقة مُحفِّزًا
}
void OnTriggerEnter(Collider other)
{
Debug.Log(name + " passed");
}
}
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق4الكوروتينات
InvokeInvokeRepeating, CancelInvokeأول Coroutine لكالحلقات داخل الكوروتيناتإيقاف الكوروتيناتمراجعة: العد التنازلي10المشروع: الهروب من الحلبة
الحلبةالصيادونتدرّب بنفسك: Playground لـ Unity