Menu
CoddyTech

הרץ

חלק מהיחידה יסודות הסקריפטים ב-Unity במסלול ה-Unity של Coddy. שיעור 75 מתוך 85.

בפרק הזה נבנה משחק קטן, Dodge the Blocks. מכוונים רץ לאורך נתיב בזמן שקוביות נופלות מהשמיים, ונגיעה אחת מסיימת את הריצה. כל המשחק נמצא בסקריפט אחד, Runner, שמקבל תכונה חדשה בכל שיעור: היגוי, קוביות נופלות, ניקוי שלהן, פגיעה וניקוד.

התכונה הראשונה היא היגוי שנשאר בתוך הנתיב, בעזרת Mathf.Clamp(value, min, max) מתוך Catch the Star: היא מחזירה את min כשהערך נמוך מהטווח, את max כשהוא גבוה ממנו, ואת הערך עצמו אחרת. חשוב היכן מציבים את פעולת ההגבלה. מד הטעינה הזה מתמלא כל עוד מקש הרווח לחוץ, מתרוקן כשהוא אינו לחוץ, ולעולם אינו יוצא מהטווח 0 עד 10:

[SerializeField] private float charge = 0f;

void Update()
{
    if (Input.GetKey(KeyCode.Space))
    {
        charge += 4f * Time.deltaTime;
    }
    else
    {
        charge -= 2f * Time.deltaTime;
    }
    charge = Mathf.Clamp(charge, 0f, 10f);
    transform.localScale = new Vector3(0.5f, charge, 0.5f);
}

פעולת ההגבלה מגיעה אחרי השינוי. אם מגבילים קודם, הערך עלול לסיים את הפריים צעד אחד מעבר לגבול, והסרגל יצויר על סמך הערך הזה. גם Mathf.Clamp מחזירה מספר חדש במקום לשנות את המשתנה שמעבירים לה, ולכן צריך להשיב את התוצאה למשתנה.

challenge icon

אתגר

בינוני

התחילו את Dodge the Blocks: כוונו את הרץ לאורך הנתיב שלו.

  1. בתוך Update(), העתיקו את transform.position אל Vector3 p, והוסיפו את Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime אל p.x. הציר הגולמי מזיז במהירות מלאה מיד.
  2. הגדירו p.x = Mathf.Clamp(p.x, -laneEdge, laneEdge);, ואז transform.position = p;.

לחצו על „שחק”, לחצו על המשחק ורוצו לשני הקצוות: הרץ נעצר בקצוות. לאחר מכן לחצו על „בדיקה”.

נסו בעצמכם

using UnityEngine;

public class Runner : MonoBehaviour
{
    [SerializeField] private float speed = 6f;
    [SerializeField] private float laneEdge = 4f;

    void Update()
    {
        // הזז לאורך x בעזרת מקשי החצים, ואז השאר את x בתוך הנתיב
    }
}

כל השיעורים ביחידה יסודות הסקריפטים ב-Unity

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