מקלדת ועכבר
חלק מהיחידה בונים משחקים אמיתיים במסלול ה-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.
אתגר
בינוניהטיסו את כדור הפורח באמצעות מערכת הקלט. בסקריפט שלו יש את 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 או העכבר
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה בונים משחקים אמיתיים
10פרויקט: משחק פלטפורמה תלת־ממדי
המסלולפלטפורמות נעות2כפתורים ומסכים
כפתורים ו-onClickביטויי למבדהחיבור ב-Inspectorהפעלה וכיבוי של פאנליםפסי בריאותסיכום: חנות שדרוגים