Menu
CoddyTech

המשטח

שיעור 1 מתוך 19 בקורס Unity: משחק שובר לבנים של Coddy.

בקורס הזה בונים את Brick Breaker בתלת־ממד, משחק שכולל מחבט, כדור קופץ, קיר של לבנים, חיים, שלבים ותוספי כוח. הכול נע במישור x ו-y בגובה z 0. הסקריפטים Paddle, Ball, Brick, GameManager ו-PowerUp הם לעת עתה שלדים. הכפתור "שחק" מפעיל את המשחק; הכפתור "בדיקה" בודק את הקוד.

למחבט יש Rigidbody קינמטי, שמזיזים באמצעות rb.MovePosition בתוך FixedUpdate(), כך שמנוע הפיזיקה מזהה את תנועתו. גוף קינמטי עובר דרך הקירות, ולכן הסקריפט משאיר אותו בתוכם. הגבלת מרכז המחבט לקיר תשאיר חצי ממנו בתוכו: הגבול הוא מיקום הקיר פחות חצי מרוחב המחבט. כשהקירות נמצאים ב-‎-6 וב-6 והמחבט ברוחב 2:

float half = 2f / 2f;
target.x = Mathf.Clamp(target.x, -6f + half, 6f - half);
rb.MovePosition(target);

המרכז נשאר בין ‎-5 ל-5, ולכן קצות המחבט נעצרים בדיוק בקירות. קריאת הרוחב מתוך transform.localScale.x בכל צעד שומרת על הגבול הנכון גם אם המחבט גדל.

challenge icon

אתגר

קל

הזיזו את המחבט בין הקירות.

  1. ב־FixedUpdate() של Paddle, קבעו את float input לערך ‎-1 כשהחץ שמאלה או A מוחזקים, לערך 1 כשהחץ ימינה או D מוחזקים, ולאחרת ל־0.
  2. חשבו את Vector3 target = rb.position + Vector3.right * input * speed * Time.fixedDeltaTime;
  3. בעזרת float half = transform.localScale.x / 2f;, הגבילו את target.x לטווח שבין -wallX + half ל־wallX - half, ואז הפעילו את rb.MovePosition(target);

לחצו על "שחק" והחליקו עד לשני הקירות: המחבט נעצר בכל אחד מהם. לאחר מכן לחצו על "בדיקה".

נסו בעצמכם

using UnityEngine;
using UnityEngine.InputSystem;

public class Paddle : MonoBehaviour
{
    public float speed = 14f;
    public float wallX = 8f;   // הצדדים הפנימיים של הקירות הצדדיים נמצאים ב־-wallX וב־wallX

    Rigidbody rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // זוזו באמצעות מקשי החיצים או A ו־D, והישארו בין הקירות.
    }
}

כל השיעורים ביחידה Unity: משחק שובר לבנים

תרגלו בעצמכם: Unity אונליין