לעמוד על הקרקע
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 11 מתוך 71.
לכל מגע יש נורמל: כיוון שאורכו 1, מאונך למשטח שנגעת בו ומצביע ממנו אל עבר האובייקט שלך. collision.GetContact(0) היא נקודת המגע הראשונה, וה-normal שלה מציין באיזה צד נגעת. בעמידה על קרקע שטוחה הוא (0, 1, 0); מול קיר שמימינך הוא (-1, 0, 0); ובחבטת הראש בתקרה הוא (0, -1, 0).
הארגז הזה מבחין בין נחיתות לבין חבטות מהצד:
void OnCollisionEnter(Collision collision)
{
Vector3 normal = collision.GetContact(0).normal;
if (normal.y > 0.5f)
{
Debug.Log("Landed on " + collision.gameObject.name);
}
else
{
Debug.Log("Bumped the side of " + collision.gameObject.name);
}
}הבדיקה היא normal.y > 0.5f ולא בדיוק 1, כדי שגם מדרונות ייחשבו לקרקע: ערך y הוא 0.5 במדרון של 60 מעלות, תלול יותר מכל מדרון שאנשים עולים בו בהליכה. שתי הודעות נוספות עוזרות בכל דבר שנמשך: OnCollisionStay מופעלת בכל צעד פיזיקה כל עוד המגע נמשך, ו-OnCollisionExit מופעלת פעם אחת כשהוא מסתיים. ביציאה אין נקודות מגע, כי שום דבר כבר לא נוגע, לכן אל תקרא ל-GetContact שם.
אתגר
קלאפשר לשחקן לקפוץ רק כשהוא עומד על משהו.
- הוסף
private bool grounded;. בתוךOnCollisionStay, הגדר אותו ל-true כאשרcollision.GetContact(0).normal.y > 0.5f; בתוךOnCollisionExit, הגדר אותו ל-false. - בתוך
FixedUpdate(), קפוץ רק אםif (jumpPressed && grounded), והגדרjumpPressed = false;אחרי ה-ifהזה, כדי שלחיצה באוויר תתבטל.
לחץ על "שחק" ונסה לקפוץ פעמיים: הלחיצה השנייה לא תעשה דבר. ואז לחץ על "בדיקה".
נסו בעצמכם
using UnityEngine;
public class Hopper : MonoBehaviour
{
public float speed = 4f;
public float jump = 6f;
private Rigidbody rb;
private bool jumpPressed;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
jumpPressed = true;
}
}
void FixedUpdate()
{
float h = Input.GetAxisRaw("Horizontal");
rb.linearVelocity = new Vector3(h * speed, rb.linearVelocity.y, 0);
if (jumpPressed)
{
rb.AddForce(Vector3.up * jump, ForceMode.Impulse);
jumpPressed = false;
}
}
}
כל השיעורים ביחידה פיזיקה ומשחקיות
1גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוףתרגלו בעצמכם: Unity אונליין