שיגור
שיעור 2 מתוך 16 בקורס משחק Unity: שובר לבנים של Coddy.
הכדור ממתין על המחבט עד שהשחקן משגר אותו. עד אז, הסקריפט מציב אותו מעל המחבט בכל פריים, כך שהוא נע לכל מקום שאליו המחבט נע, ו-bool זוכר אם הוא שוגר. השיגור מגדיר פעם אחת את linearVelocity של ה-Rigidbody. כוח הכבידה של ה-Rigidbody של הכדור כבוי, ולכן מרגע זה הוא עף בקו ישר במהירות הזאת עד שהוא פוגע במשהו.
מצוף דיג פועל באותו אופן: הוא תלוי מתחת לקצה החכה עד להטלה.
bool cast;
void Update()
{
if (cast) return;
transform.position = rodTip.position + Vector3.down * 1.5f;
if (Keyboard.current.spaceKey.wasPressedThisFrame)
{
cast = true;
rb.linearVelocity = new Vector3(4f, 3f, 0f);
}
}wasPressedThisFrame הוא true רק בפריים שבו המקש נלחץ, ולכן קוראים אותו ב-Update(), שרץ פעם אחת בכל פריים. המצוף עף במהירות שאורכה (4, 3, 0), כלומר 5 יחידות בשנייה. כדי לשגר במהירות מדויקת לכל כיוון, יוצרים וקטור כיוון שאורכו יחידה אחת בעזרת .normalized, ואז מכפילים אותו במהירות.
אתגר
קלב־Ball:
- הוסף
bool launched. - כתוב
public void Launch(Vector3 direction): הוא מגדיר אתlaunchedל־true ואתlinearVelocityשל ה־Rigidbody לכיוון שאורכו יחידה אחת, כפולspeed. - הוסף
Update(). כל עוד הכדור לא שוגר, הוא מציב את הכדור 0.5 יחידות מעל מיקום המחבט, וכשלוחצים על Space הוא קורא ל־Launch(new Vector3(0.3f, 1f, 0f)).
הכדור עדיין לא קופץ, ולכן הוא נעצר במקום בקיר הראשון שבו הוא פוגע: השיעור הבא יתקן את זה.
לחץ על Play, הזז את המחבט, שגר את הכדור ואז לחץ על Check.
נסו בעצמכם
using UnityEngine;
using UnityEngine.InputSystem;
public class Ball : MonoBehaviour
{
public Transform paddle;
public float speed = 9f;
Rigidbody rb;
void Awake()
{
rb = GetComponent<Rigidbody>();
}
// השלב הבא: הכדור נשאר על המחבט עד שלחיצה על Space משגרת אותו.
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.