Menu
CoddyTech

מקלדת ועכבר

חלק מהיחידה בונים משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 44 מתוך 56.

מערכת הקלט מעניקה לכל התקן אובייקט. Keyboard.current היא המקלדת, וכל מקש בה הוא פקד בעל שם: spaceKey, aKey, upArrowKey, או Keyboard.current[Key.Space] כדי לגשת לכל מקש לפי ערך ה-Key שלו. Mouse.current הוא העכבר, עם leftButton, rightButton ו-position. הערך isPressed של פקד הוא true בכל פריים שבו הוא מוחזק לחוץ, כפי שהיה עם Input.GetKey. הצוללת הזו צוללת ועולה לפני המים באמצעות מקשי החצים ומאירה בפנס החיפוש שלה כל עוד לחצן העכבר מוחזק לחוץ:

using UnityEngine;
using UnityEngine.InputSystem;

public class Submarine : MonoBehaviour
{
    public float diveSpeed = 2f;
    public Light searchlight;

    void Update()
    {
        Keyboard keyboard = Keyboard.current;
        if (keyboard == null) return;   // לא מחוברת מקלדת

        if (keyboard.downArrowKey.isPressed)
            transform.position += Vector3.down * diveSpeed * Time.deltaTime;
        if (keyboard.upArrowKey.isPressed)
            transform.position += Vector3.up * diveSpeed * Time.deltaTime;

        searchlight.enabled = Mouse.current != null && Mouse.current.leftButton.isPressed;
    }
}

current הוא ההתקן שבו נעשה שימוש לאחרונה, והוא null כשאין התקן כזה: ייתכן שבטלפון או בקונסולה אין מקלדת, ובדיקות ה-null מונעות מהסקריפט להיכשל שם. למקלדת אין צירים, לכן חץ למטה ו-S הם שני מקשים נפרדים: צוללת שאמורה לצלול גם בלחיצה על S בודקת keyboard.downArrowKey.isPressed || keyboard.sKey.isPressed. Mouse.current.position.ReadValue() מחזיר את מיקום המצביע כ-Vector2 בפיקסלים על המסך, מפינת שמאל למטה, כמו Input.mousePosition.

challenge icon

אתגר

בינוני

הטיסו את כדור הפורח באמצעות מערכת הקלט. בסקריפט שלו יש את drift (2), את rise (3), את sink (1), את groundY (2) ואת flame, להבת המבער שמתחת לכדור הפורח.

  • כל עוד מקש החץ ימינה או D לחוץ, הכדור הפורח נע ימינה (לאורך +x) בקצב של drift יחידות לשנייה; כל עוד מקש החץ שמאלה או A לחוץ, הוא נע שמאלה.
  • המבער דולק כל עוד מקש הרווח או לחצן העכבר השמאלי לחוץ. הציגו את flame רק כשהוא דולק.
  • כשהמבער דולק, הכדור הפורח עולה בקצב של rise יחידות לשנייה. כשהוא כבוי, הוא יורד בקצב של sink יחידות לשנייה, ולעולם לא מתחת ל-groundY.

השתמשו ב-Keyboard.current וב-Mouse.current. הפרויקט הזה מוגדר כמו פרויקט חדש של Unity 6 (Active Input Handling: Input System Package), ולכן המחלקה Input זורקת כאן InvalidOperationException. לחצו על Play והטיסו, ואז לחצו על Check.

נסו בעצמכם

using UnityEngine;
using UnityEngine.InputSystem;

public class Balloon : MonoBehaviour
{
    public float drift = 2f;
    public float rise = 3f;
    public float sink = 1f;
    public float groundY = 2f;
    public GameObject flame;

    void Update()
    {
        // רחפו באמצעות מקשי החצים או A ו-D, והפעילו את הלהבה באמצעות Space או העכבר
    }
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה בונים משחקים אמיתיים