תפסו שדרוג
שיעור 15 מתוך 19 בקורס Unity: משחק שובר לבנים של Coddy.
שדרוג מזהה בעצמו את המגע: קוליידר ההדק שלו נוגע בקוליידר של המחבט, ושני הגופים קינמטיים, וזה מספיק כדי להפעיל את OnTriggerEnter. הוא נופל גם מעבר לכדור, ולכן קודם כול בודק את התג.
enum נותן שמות לסוגים, וכל קדם־מופע מגדיר את הסוג שלו ב־Inspector, כך שסקריפט אחד משמש את שניהם:
public enum Kind { Wide, Multiball }
public Kind kind;
if (kind == Kind.Multiball) Debug.Log("Three balls");other.GetComponent<Paddle>() מוצא את סקריפט Paddle על האובייקט שבו נגע השדרוג. כרגע, האפשרות להרחיב רק מציגה הודעה ביומן; בשיעור הבא המחבט יגדל.
אתגר
קשהתפסו שדרוג נופל באמצעות המשטח.
- ב־
PowerUp, הוסיפוpublic enum Kind { Wide, Multiball }ואתpublic Kind kind;(כל קדם־ייצור מגדיר את הסוג שלו). - הוסיפו
OnTriggerEnter(Collider other): חזרו מהפונקציה אלא אם כןother.CompareTag("Paddle"); שדרוג מסוג Wide קורא ל־other.GetComponent<Paddle>().Widen();, ואז ל־Destroy(gameObject); - ב־
Paddle, הוסיפוpublic void Widen()שמתעד ביומן אתWide paddleבינתיים.
לחצו על ״שחק״ ותפסו שדרוג ירוק: הוא נעלם וב־Console מופיע Wide paddle. לאחר מכן לחצו על ״בדיקה״.
נסו בעצמכם
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()
{
float input = 0f;
if (Keyboard.current.leftArrowKey.isPressed || Keyboard.current.aKey.isPressed) input -= 1f;
if (Keyboard.current.rightArrowKey.isPressed || Keyboard.current.dKey.isPressed) input += 1f;
Vector3 target = rb.position + Vector3.right * input * speed * Time.fixedDeltaTime;
float halfWidth = transform.localScale.x / 2f;
target.x = Mathf.Clamp(target.x, -wallX + halfWidth, wallX - halfWidth);
rb.MovePosition(target);
}
}
כל השיעורים ביחידה Unity: משחק שובר לבנים
תרגלו בעצמכם: Unity אונליין