Menu
CoddyTech

התופס

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

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

הגבלת מספר לטווח מסוים היא תפקידו של Mathf.Clamp(value, min, max). הפונקציה מחזירה את min כשהערך נמוך מ-min, את max כשהערך גבוה מ-max, ואת הערך עצמו בכל מקרה אחר. המצלמה הזאת עוקבת אחר השחקן במעלה מגדל, אבל הגובה שלה נשאר בין 2 ל-12:

[SerializeField] private Transform player;

void Update()
{
    float y = Mathf.Clamp(player.position.y, 2f, 12f);
    transform.position = new Vector3(transform.position.x, y, transform.position.z);
}

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

challenge icon

אתגר

בינוני

העניקו לתופס, הפס הכחול, תנועה.

  1. ב־Update(), העתיקו את transform.position.x אל float x, ואז הוסיפו או הפחיתו את speed * Time.deltaTime בהתאם לחץ שמוחזק.
  2. השאירו את התופס, שרוחבו 2 יחידות, על הרצפה (x בין -5 ל־5): x = Mathf.Clamp(x, -4f, 4f);.
  3. כתבו את x בחזרה אל transform.position, תוך שמירה על y ו־z.

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

נסו בעצמכם

using UnityEngine;

public class Catcher : MonoBehaviour
{
    [SerializeField] private float speed = 6f;

    void Update()
    {
        // מקשי החצים: הזיזו את התופס לאורך x במהירות של speed יחידות לשנייה.
        // השאירו את התופס כולו על הרצפה (x מ־-5 עד 5, רוחב התופס הוא 2).
    }
}

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

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