Menu
CoddyTech

הזירה

חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 59 מתוך 71.

בפרק הזה נבנה את 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 נטול חיכוך: עם חיכוך מהרצפה נוסף על הריסון, המהירות המרבית שלה הייתה נמוכה יותר.

challenge icon

אתגר

בינוני

התחל את Arena Escape: השחקן מחליק בעזרת כוחות.

  1. ב־Start(), אחרי שורת GetComponent, הגדר rb.linearDamping = accel / topSpeed;, כך שהמהירות תתייצב בקרבת topSpeed.
  2. ב־FixedUpdate(), בנה את new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")).
  3. העבר את normalized שלו כפול accel אל rb.AddForce עם ForceMode.Acceleration.

לחץ על "שחק" והחלק ברחבי הזירה. לאחר מכן לחץ על "בדיקה".

נסו בעצמכם

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()
    {
        // הגדר את השיכוך, ואז הנע את השחקן באמצעות מקשי החצים
    }
}

כל השיעורים ביחידה פיזיקה ומשחקיות

תרגלו בעצמכם: Unity אונליין