🟢 1. NOWY PROJEKT
🎮 W tej lekcji uczestnicy nauczą się budować profesjonalne mapy do gry 2D z wykorzystaniem systemu TileMap w silniku Unity.
🟢 1. NOWY PROJEKT
- Unity Hub → New Project
- Wybierz: 2D Core
- Create
🟢 2. SCENA
- File → New Scene → 2D Core
- CTRL + S → Main
🟢 3. IMPORT GRAFIK
- gracz.png
- ziemia.png
- przeszkoda.png
🟢 4. USTAWIENIA SPRITE
Każdy PNG:
Texture Type = Sprite (2D and UI) Sprite Mode = Single Pixels Per Unit = 100 Mesh Type = Full Rect
Kliknij: Apply
🟢 5. ZIEMIA
- Position: 0, -3, 0
- Scale: 10, 1, 1
- Dodaj: BoxCollider2D
🟢 6. PRZESZKODA
- Position: 3, -2, 0
- Dodaj: BoxCollider2D
🟢 7. GRACZ
- Position: 0, 0, 0
- Dodaj: Rigidbody2D
- Dodaj: BoxCollider2D
Ustaw Rigidbody2D:
Gravity Scale = 2 Freeze Rotation Z = ON
🟢 8. SKRYPT RUCHU
Assets → Create → C# Script → PlayerMove
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
public float speed = 5f;
public float jumpForce = 7f;
Rigidbody2D rb;
bool isGrounded;
void Start()
{
rb = GetComponent();
}
void Update()
{
float x = Input.GetAxisRaw("Horizontal");
rb.velocity = new Vector2(x * speed, rb.velocity.y);
if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
{
rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
isGrounded = false;
}
}
void OnCollisionEnter2D(Collision2D collision)
{
isGrounded = true;
}
}
🟢 9. PODŁĄCZENIE SKRYPTU
- Przeciągnij PlayerMove → Player
🟢 10. FINALNE KONTROLE
Ground: BoxCollider2D
Player: Rigidbody2D + BoxCollider2D
Obstacle: BoxCollider2D
🟢 11. TEST
- Play
- Sprawdź ruch
- Sprawdź skok
- Sprawdź kolizję z przeszkodą
🎮 Efekt końcowy: gracz porusza się, skacze i poprawnie przeskakuje przeszkody.
🎮 Szczegółowa lekcja: Zbieranie punktów i monet w Unity 2D
W tej lekcji uczestnicy stworzą jedną z najważniejszych mechanik gier 2D: zbieranie monet i naliczanie punktów.
🎮 Efekt końcowy:
- ✔ bohater dotyka monety,
- ✔ moneta znika,
- ✔ punkty gracza rosną.
🔥 To jest już prawdziwa mechanika gry wykorzystywana w platformówkach, grach przygodowych oraz grach mobilnych.
🟢 KROK 1 — Dodanie monety do sceny
📌 Najpierw dodamy grafikę monety do poziomu gry.
- Przeciągnij do sceny plik:
moneta.png
Następnie zmień nazwę obiektu na:
Coin
📌 Obiekt pojawi się w oknie: Hierarchy.
🟢 KROK 2 — Ustawienie pozycji monety
📌 Ustaw monetę w wybranym miejscu mapy.
Przykładowe ustawienia:
X = 3 Y = -1 Z = 0
📌 Pozycję ustawiamy w komponencie: Transform.
🟢 KROK 3 — Dodanie kolizji
📌 Aby Unity wykrywało dotknięcie monety, musimy dodać collider.
- Zaznacz obiekt: Coin.
- Kliknij:
Add Component
Dodaj komponent:
Circle Collider 2D
📌 Collider tworzy niewidzialny obszar wykrywania dotyku.
🟢 KROK 4 — Ustawienie Trigger
📌 Moneta nie może blokować gracza. Ma jedynie wykrywać kontakt.
W komponencie: Circle Collider 2D zaznacz:
Is Trigger
🔥 To bardzo ważny krok. Bez Trigger mechanika zbierania monet nie będzie działać poprawnie.
🟢 KROK 5 — Dodanie tagu Coin
📌 Tag pozwala skryptowi rozpoznać, że dotknięty obiekt jest monetą.
- Na górze Inspectora znajdź: Tag.
- Kliknij:
Add Tag
Dodaj nowy tag:
Coin
Następnie wróć do obiektu: Coin i ustaw dla niego tag:
Coin
🟢 KROK 6 — Otworzenie skryptu gracza
📌 Teraz dodamy system punktów do bohatera.
Otwórz skrypt:
PlayerMove.cs
Najczęściej otwieramy go podwójnym kliknięciem w Unity.
🟢 KROK 7 — Dodanie zmiennej punktów
📌 Musimy stworzyć zmienną przechowującą liczbę punktów.
Pod linią:
Animator anim;
dodaj:
int score = 0;
📌 Zmienna score będzie przechowywać liczbę zebranych monet.
🟢 KROK 8 — Dodanie zbierania monet
📌 Na samym dole skryptu dodamy wykrywanie dotknięcia monety.
Dodaj kod:
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
public float speed = 5f;
public float jumpForce = 7f;
Rigidbody2D rb;
Animator anim;
bool isGrounded;
int score = 0;
void Start()
{
rb = GetComponent();
anim = GetComponent();
}
void Update()
{
float x = Input.GetAxisRaw("Horizontal");
// RUCH
rb.linearVelocity = new Vector2(x * speed, rb.linearVelocity.y);
// ANIMACJA
anim.SetFloat("Speed", Mathf.Abs(x));
// OBRACANIE GRACZA
if (x > 0)
{
transform.localScale = new Vector3(-0.3f, 0.3f, 1f);
}
else if (x < 0)
{
transform.localScale = new Vector3(0.3f, 0.3f, 1f);
}
// SKOK
if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
{
rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
isGrounded = false;
}
}
// DOTKNIĘCIE ZIEMI
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Ground"))
{
isGrounded = true;
}
}
// ZBIERANIE MONET
void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Coin"))
{
score++;
Debug.Log("Punkty: " + score);
Destroy(collision.gameObject);
}
}
}
📌 Co robi ten kod?
-
OnTriggerEnter2D
Wykrywa kontakt z obiektem Trigger. -
CompareTag("Coin")
Sprawdza czy dotknięty obiekt ma tag Coin. -
score++
Dodaje 1 punkt. -
Debug.Log()
Wyświetla liczbę punktów w konsoli Unity. -
Destroy()
Usuwa monetę ze sceny.
🟢 KROK 9 — Zapisanie skryptu
📌 Zapisz zmiany w Visual Studio lub VS Code.
Użyj skrótu:
CTRL + S
Następnie wróć do Unity.
🟢 KROK 10 — Test działania
📌 Uruchom grę.
- Kliknij przycisk:
▶ Play
🎮 Efekt działania:
- ✔ bohater dotyka monety,
- ✔ moneta znika,
- ✔ liczba punktów rośnie,
- ✔ Unity wyświetla punkty w konsoli.
🟢 Typowe błędy początkujących
- ❌ Brak zaznaczonego: Is Trigger
- ❌ Brak tagu: Coin
- ❌ Literówka w: CompareTag("Coin")
- ❌ Skrypt zapisany, ale Unity jeszcze się kompiluje
- ❌ Moneta nie posiada Collider 2D
🟢 Ćwiczenie praktyczne
- Dodaj minimum 5 monet do mapy.
- Rozmieść je w różnych miejscach.
- Sprawdź czy każda moneta zwiększa wynik.
- Przetestuj działanie gry.
🚀 Po ukończeniu tej lekcji uczestnicy będą potrafili tworzyć system zbierania monet, obsługiwać kolizje Trigger oraz budować podstawową mechanikę punktów w grach 2D.
