שכבות ו-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 הוא אוסף של שכבות, ביט אחד לכל שכבה. מעבירים אותו ל-raycast אחרי maxDistance, והקרן מתעלמת מכל collider בשכבה שאינה כלולה באוסף.
השחקן הזה אמור לקפוץ מהקרקע, לא מראשיהם של אויבים. הרצפות משויכות לשכבת Ground, והסקריפט מקבל שדה LayerMask, שמוצג ב-Inspector כתפריט שבו מסמנים את Ground:
[SerializeField] private LayerMask groundMask;
bool IsGrounded()
{
return Physics.Raycast(transform.position, Vector3.down, 1.1f, groundMask);
}מסכה שכוללת רק את Ground גם מונעת מהבדיקה לזהות את השחקן. קרן מדלגת על ה-collider שבתוכו היא מתחילה, אבל לא על ה-collider-ים האחרים של השחקן, למשל של ילד שלו, ובדיקות החפיפה בשיעור מאוחר יותר אכן מזהות את ה-collider של השחקן עצמו, כך שבדיקה ליד הרגליים ללא מסכה תמיד תחזיר שהשחקן על הקרקע. שים את השחקן ואת ילדיו בשכבת Player, והקפד ש-Player לא ייכלל במסכות שבהן משתמשות הבדיקות. בקוד, LayerMask.GetMask("Ground", "Platform") יוצר מסכה משמות של שכבות, ו-~ לפני מסכה הופך אותה למסכה של כל השכבות שלא נכללו בה.
אתגר
בינוניגרמו לקרן של הסייר לראות מעבר לפנס שלו.
- ב־
LookAhead(), צרוint mask = ~LayerMask.GetMask("Player");: כל שכבה מלבד Player, שבה נמצאים הסייר והפנס שלו. - העבירו את
maskלפונקציית הקרן, אחריrange.
לחצו על "שחק" וסובבו את הסייר באמצעות החצים: ה־Console מציג את השמות Rock ו־Tree. ואז לחצו על "בדיקה".
נסו בעצמכם
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גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוףתרגלו בעצמכם: Unity אונליין