הזירה
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 56 מתוך 63.
בפרק הזה נבנה את Arena Escape. מתחמקים מציידים בזירה מוקפת חומות, בזמן שגלים של ציידים שוטפים פנימה; שלוש פגיעות מסיימות את הריצה, ולאחר שהגל האחרון יוצא, נפתח מעבר יציאה. המשחק מורכב מחמישה סקריפטים, שכבר נמצאים בפרויקט מההתחלה: Player, Hunter, Spawner, Health ו-Exit. ארבעת האחרונים ריקים כרגע, ובכל שיעור ממלאים אחד מהם.
השחקן נע באמצעות כוחות במקום לקבוע מהירות, כך שההדיפה של צייד מתווספת לתנועה שלו במקום להתאפס. דחיפה לבדה הייתה מאיצה אותו לנצח, ולכן linearDamping מפחית חלק ממהירותו בכל צעד: דחיפה קבועה מתייצבת במהירות מרבית שקרובה לתאוצה חלקי הבלימה. רחפת המזחלת הזאת דוחפת קדימה כל עוד מקש הרווח לחוץ:
[SerializeField] private float accel = 12f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
rb.linearDamping = 2f;
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.Space))
{
rb.AddForce(transform.forward * accel, ForceMode.Acceleration);
}
}עם תאוצה של 12 ובלימה של 2, המהירות המרבית של המזחלת מתייצבת בסביבות 6 יחידות לשנייה, וכשמרפים ממקש הרווח, הבלימה עוצרת אותה במקום לתת לה להמשיך לגלוש לנצח. ForceMode.Acceleration מתעלם מהמסה, כך שמזחלת כבדה מאיצה בדיוק כמו מזחלת קלה. לקוליידר של המזחלת יש PhysicsMaterial נטול חיכוך: אילו היה נוסף חיכוך מהרצפה על גבי הבלימה, המהירות המרבית שלה הייתה נמוכה יותר.
אתגר
בינוניהתחילו את Arena Escape עם השחקן. ה-Inspector נותן לסקריפט Player את accel (18) ואת topSpeed (6). המסה של השחקן היא 2, ויש לו חומר ללא חיכוך. ארבעת הסקריפטים האחרים יישארו ריקים בינתיים.
- ב-
Start, הגדירו אתlinearDampingשל ה-Rigidbody לערךaccel / topSpeed, כך שהמהירות של השחקן תתייצב בערך עלtopSpeed. - בכל צעד פיזיקה, דחפו את השחקן באמצעות מקשי החצים, שמאלה וימינה לאורך ציר x ולמעלה ולמטה לאורך ציר z, באמצעות
ForceMode.Accelerationותאוצה שלaccel. - נרמלו את כיוון מקשי החצים, כך שתנועה באלכסון לא תהיה מהירה יותר מתנועה בקו ישר.
לחצו על Play והחליקו ברחבי הזירה, ואז לחצו על Check.
נסו בעצמכם
using UnityEngine;
public class Player : MonoBehaviour
{
[SerializeField] private float accel = 18f;
[SerializeField] private float topSpeed = 6f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// קבע את השיכוך, ואז הזז את השחקן באמצעות מקשי החצים
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה פיזיקה ומשחקיות
1גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוף