פעולות קלט
חלק מהיחידה בונים משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 46 מתוך 56.
בדיקת המקשים אחד-אחד קושרת סקריפט למקלדת. במקום זאת, פעולה מציינת מה השחקן עושה, והפרויקט מפרט אילו מקשים, מוטות וכפתורים מפעילים אותה. פרויקט Unity 6 חדש מגיע עם קבוצה של פעולות כאלה (הנכס InputSystem_Actions, שמוגדר כפעולות של הפרויקט כולו), ולמפת Player שלו יש את Move (WASD, מקשי החצים והמוט השמאלי של בקר משחק), Look (העכבר או המוט הימני), Attack (לחצן העכבר השמאלי ו-Enter), Interact (E, לחיצה ממושכת), Crouch (C), Jump (מקש הרווח והכפתור הדרומי בבקר המשחק), Previous ו-Next (1 ו-2) ו-Sprint (מקש Shift שמאלי). הן מופעלות כברירת מחדל, ו-InputSystem.actions.FindAction("Jump") מוצא פעולה לפי שם. מנוף טפרים זה, שמוצג ממבט צד, נע בצירים x ו-y ותופס בלחיצה על Jump:
using UnityEngine;
using UnityEngine.InputSystem;
public class ClawCrane : MonoBehaviour
{
public float speed = 3f;
private InputAction moveAction;
private InputAction jumpAction;
void Start()
{
moveAction = InputSystem.actions.FindAction("Move");
jumpAction = InputSystem.actions.FindAction("Jump");
}
void Update()
{
Vector2 input = moveAction.ReadValue<Vector2>();
transform.position += new Vector3(input.x, input.y, 0f) * speed * Time.deltaTime;
if (jumpAction.WasPressedThisFrame())
Debug.Log("Grab!");
}
}הפעולות מאותרות פעם אחת, ב-Start, ונשמרות בשדות מסוג InputAction. Move מחזירה Vector2: x הוא ימינה ושמאלה, y הוא למעלה ולמטה במקשים, והערך מנורמל, כך שלחיצה על W ו-D יחד מחזירה (0.71, 0.71) במקום (1, 1). המנוף מוצג ממבט צד, ולכן הוא משתמש ב-y הזה עבור הגובה; משחק שנראה ממבט מלמעלה היה משתמש בו עבור z. פעולות כפתור מתנהגות כמו מקשים: WasPressedThisFrame(), WasReleasedThisFrame() ו-IsPressed(). שתי טעויות גורמות לשגיאה: שם שגוי גורם ל-FindAction להחזיר null (חריגת NullReferenceException בקריאה הראשונה), ו-ReadValue<Vector3>() על Move גורמת לחריגת InvalidOperationException ברגע שמקש נלחץ, כי Move מחזירה Vector2.
אתגר
בינוניהמודד ממפה שדה שלג, במבט מלמעלה, ונושא flags (3) כדי לנעוץ בדרך. בסקריפט יש speed (4), flags, flagPrefab ורשימה בשם planted. השתמשו בפעולות של הפרויקט:
- Move מזיזה את המודד על פני השלג במהירות של
speedיחידות לשנייה: ימינה ושמאלה לאורך ציר x, ולמעלה ולמטה לאורך ציר z. - כל לחיצה על Jump נועצת דגל: עותק של
flagPrefabבמיקום x ו-z של המודד, בגובה y 0.75, ומוסיפה אותו אלplanted. הפעולה צורכת אחד מתוךflagsומתעדת כמה נותרו, למשלFlags left: 2. כשלא נותרו דגלים, Jump לא נועצת דבר. - כל לחיצה על Attack (לחיצה שמאלית) שולפת את הדגל שננעץ אחרון: הוא מושמד ומוסר מהרשימה, הערך של
flagsעולה באחד, ואותה שורה מתועדת.
לחצו על Play, נִעצו שלושה דגלים ושלפו אחד, ואז לחצו על Check.
נסו בעצמכם
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class Surveyor : MonoBehaviour
{
public float speed = 4f;
public int flags = 3;
public GameObject flagPrefab;
private List<GameObject> planted = new List<GameObject>();
void Start()
{
// מצא את הפעולות Move, Jump ו-Attack
}
void Update()
{
// לך באמצעות Move, שתול דגל בלחיצה על Jump, ושלוף דגל בלחיצה על Attack
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה בונים משחקים אמיתיים
10פרויקט: משחק פלטפורמה תלת־ממדי
המסלולפלטפורמות נעות2כפתורים ומסכים
כפתורים ו-onClickביטויי למבדהחיבור ב-Inspectorהפעלה וכיבוי של פאנליםפסי בריאותסיכום: חנות שדרוגים