פעולות קלט
חלק מהיחידה בניית משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 47 מתוך 60.
בדיקת מקשים בזה אחר זה קושרת סקריפט למקלדת. פעולה נותנת שם למה שהשחקן עושה במקום זאת, והפרויקט מגדיר אילו מקשים, מוטות וכפתורים מפעילים אותה. פרויקט 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.
אתגר
בינוניהוליכו את המודד ושתלו דגלים באמצעות הפעולות של הפרויקט.
- ב־
Start(), הגדירו אתmoveAction, אתjumpActionואתattackActionבאמצעותInputSystem.actions.FindAction("Move"),"Jump"ו־"Attack". - ב־
Update(), הוליכו את המודד באמצעותmoveAction.ReadValue<Vector2>()כפולspeed, כאשר ערך ה־y שלו נע לאורך ציר ה־z. - קראו ל־
Plant()כאשרjumpAction.WasPressedThisFrame()מתקיים, ול־PullUp()בלחיצה על Attack.
לחצו על "שחק", שתלו שלושה דגלים ולחצו כדי לעקור אחד מהם. לאחר מכן לחצו על "בדיקה".
נסו בעצמכם
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 InputAction moveAction;
private InputAction jumpAction;
private InputAction attackAction;
private List<GameObject> planted = new List<GameObject>();
void Start()
{
// מצא את הפעולות Move, Jump ו-Attack
}
void Update()
{
// נוע באמצעות Move, הפעל Plant() בלחיצה על Jump, והפעל PullUp() בלחיצה על Attack
}
void Plant()
{
if (flags == 0) return;
Vector3 spot = new Vector3(transform.position.x, 0.75f, transform.position.z);
planted.Add(Instantiate(flagPrefab, spot, Quaternion.identity));
flags--;
Debug.Log("Flags left: " + flags);
}
void PullUp()
{
if (planted.Count == 0) return;
GameObject last = planted[planted.Count - 1];
planted.RemoveAt(planted.Count - 1);
Destroy(last);
flags++;
Debug.Log("Flags left: " + flags);
}
}
כל השיעורים ביחידה בניית משחקים אמיתיים
10פרויקט: משחק פלטפורמה תלת־ממדי
המסלולפלטפורמות נעות2כפתורים ומסכים
כפתורים ו-onClickביטויי למבדהחיבור ב-Inspectorהפעלה וכיבוי של פאנליםפסי בריאותסיכום: חנות שדרוגיםתרגלו בעצמכם: Unity אונליין