الطبقات وLayerMask
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 38 من 71.
يوجد كل GameObject على طبقة واحدة، تُحدَّد من قائمة Layer أعلى Inspector. لدى Unity 32 طبقة: بعضها مدمج (0 Default، و2 Ignore Raycast، و4 Water، و5 UI)، ويمكنك تسمية طبقاتك الخاصة في Tags and Layers، بدءًا من User Layer 3. إن LayerMask مجموعة من الطبقات، بت واحد لكل طبقة. مرّر واحدة إلى اختبار الأشعة بعد maxDistance، وسيتجاهل الشعاع كل مصادم على طبقة خارج المجموعة.
ينبغي لهذا اللاعب أن يقفز من الأرض، لا من فوق رؤوس الأعداء. ضع الأرضيات على طبقة Ground، وأضف إلى السكربت حقلًا من نوع LayerMask، يعرضه Inspector على شكل قائمة يمكنك فيها تحديد Ground:
[SerializeField] private LayerMask groundMask;
bool IsGrounded()
{
return Physics.Raycast(transform.position, Vector3.down, 1.1f, groundMask);
}كما تمنع قناع Ground وحدها الاختبار من العثور على اللاعب. يتجاوز الشعاع المصادم الذي يبدأ من داخله، لكنه لا يتجاوز مصادمات اللاعب الأخرى، مثل مصادم أحد العناصر التابعة له، كما أن اختبارات التداخل في درس لاحق ستعثر على مصادم اللاعب نفسه؛ لذلك، فإن إجراء اختبار عند القدمين من دون قناع سيعطي دائمًا نتيجة تفيد بأن اللاعب على الأرض. ضع اللاعب وعناصره التابعة على طبقة Player، وأبقِ Player خارج الأقنعة التي تستخدمها اختباراته. في الشيفرة، تنشئ LayerMask.GetMask("Ground", "Platform") قناعًا من أسماء الطبقات، وتُحوّل ~ الموضوعة قبل القناع القناعَ ليشمل كل طبقة لم تكن ضمنه.
التحدي
متوسطاجعل شعاع الكشّاف يتجاوز فانوسه.
- في
LookAhead()، أنشئint mask = ~LayerMask.GetMask("Player");: كل الطبقات باستثناء Player، حيث يوجد الكشّاف وفانوسه. - مرّر
maskإلى اختبار الشعاع، بعدrange.
اضغط على «العب» وأدر الكشّاف باستخدام الأسهم: ستعرض وحدة التحكم اسمي الصخرة والشجرة. ثم اضغط على «تحقق».
جرّب بنفسك
using UnityEngine;
public class Spotter : MonoBehaviour
{
public float range = 10f;
private string last = "";
void Update()
{
string seen = LookAhead();
if (seen != last)
{
Debug.Log("Ahead: " + seen);
last = seen;
}
}
// اسم أول شيء أمامك ضمن النطاق، أو "nothing".
public string LookAhead()
{
if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, range))
{
return hit.collider.name;
}
return "nothing";
}
}
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق4الكوروتينات
InvokeInvokeRepeating, CancelInvokeأول Coroutine لكالحلقات داخل الكوروتيناتإيقاف الكوروتيناتمراجعة: العد التنازلي10المشروع: الهروب من الحلبة
الحلبةالصيادونتدرّب بنفسك: Playground لـ Unity