Geometry Dash

Gra jest klonem popularnej gry rytmiczno-zręcznościowej "Geometry Dash". Gracz steruje sześcianem, który automatycznie przesuwa się w prawą stronę. Celem gry jest unikanie przeszkód (trójkątów/kolców) poprzez skakanie oraz dotarcie do końca poziomu. Gra posiada system poziomów trudności oraz mechaniki zmieniające perspektywę kamery. Zasada działania: Postać i kamera poruszają się w prawo ze stałą prędkością. Gracz klika myszką, aby wykonać skok (i obrót). Kolizja z przeszkodą resetuje poziom, a dotarcie do mety przenosi do menu.

Written By Coder Matthew

Last updated 6 months ago


1) Grafiki i Zasoby użyte w Geometry Dash

Poniżej znajdują się kluczowe elementy wizualne widoczne w folderze Assets/Materials oraz na scenie.

Nazwa Zasobu

Opis Wizualny

Zastosowanie w Skryptach

Bez tytułuico (Square)

Niebieski kwadrat. Główna postać gracza.

Obiekt sterowany przez skrypt Human.cs. Jego fizyka (Rigidbody2D) odpowiada za skakanie.

Triangle 1 / Hexagon

Trójkąty i inne kształty geometryczne.

Służą jako przeszkody (tag: Przeszkoda) lub elementy ozdobne. Zderzenie z trójkątem kończy grę.

BG

Tło gry.

Warstwa wizualna budująca klimat poziomu.

kremowka

Specyficzny materiał/tekstura.

Prawdopodobnie użyta dla elementu otoczenia lub "easter egga" w grze.

Scenes (Folder)

Pliki scen: Start, Menu, hard, mid, Over.

Skrypty menu.cs i over.cs przełączają się między tymi scenami w zależności od postępów gracza.


2) Hierarchia w Unity

Hierarchia elementów

Oto rekonstrukcja struktury obiektów na scenie gry (na podstawie logiki skryptów):

  • Main Camera

    • Odpowiada za widok. Porusza się w prawo.

    • Posiada skrypt Camera, który wymusza ciągły ruch w osi X.

  • Gamer / Human (Gracz)

    • Niebieski sześcian.

    • Posiada komponent Rigidbody2D (fizyka).

    • Posiada skrypt Human (sterowanie skokiem i obrotem).

    • Posiada skrypt over (wykrywanie kolizji z przeszkodami i metą).

  • Level Environment (Środowisko)

    • Ground: Podłoga, po której porusza się gracz.

    • Obstacles: Obiekty z tagiem Przeszkoda (kolce).

    • Jump Pads: Obiekty z tagiem Jump (wybijają gracza).

    • Triggers: Obiekty z tagami Camer (obrót kamery) lub End (koniec poziomu).

  • Canvas (UI)

    • Button: Przyciski w menu (Start, Easy, Medium, Hard).

    • Text (TMP): Tytuł gry "My Geometry Dash".


3) Skrypty użyte w Geometry Dash

W projekcie wykorzystano zestaw skryptów odpowiedzialnych za ruch, fizykę i zarządzanie stanem gry.

1. Human (Sterowanie Graczem)

Odpowiada za ruch postacie i mechanikę skoku.

  • Ciągły ruch: W Update przesuwa postać w prawo.

  • Skok: Po kliknięciu myszką (Input.GetMouseButton(0)), sprawdza, czy gracz jest na ziemi (używając sztywnych koordynatów Y: < -1.8 i > -2.1). Jeśli tak, nadaje prędkość pionową (linearVelocity).

  • Efekt obrotu: Uruchamia korutynę RotateMe, która obraca kostkę o 180 stopni podczas skoku, dodając dynamiki.

2. Camera (Śledzenie)

Prosty skrypt sprawiający, że kamera podąża za akcją.

  • Przesuwa obiekt kamery w prawo z taką samą prędkością bazową co gracz, zapewniając, że postać jest zawsze w kadrze.

3. over (Kolizje i Interakcje)

Najbardziej rozbudowany skrypt logiczny, przypięty do gracza. Obsługuje zdarzenia OnTriggerEnter2D:

  • Śmierć: Tag Przeszkoda ładuje scenę "Over" (Game Over).

  • Meta: Tag End lub Przeszkoda_hard (zależnie od logiki) wraca do Menu.

  • Trampolina: Tag Jump wybija gracza w górę.

  • Efekty Kamery: Tag Camer obraca kamerę o 180 stopni (do góry nogami), a center przywraca ją do normy.

4. menu & Scene Management

Zestaw skryptów do obsługi UI i zmiany scen:

  • menu.cs: Obsługuje przyciski w głównym menu (wybór poziomu trudności: easy, medium, hard oraz wyjście z gry).

  • NewBehaviourScript.cs: Prosty loader sceny "Maind" (podpięty pod przycisk Start).

  • NewBehaviourScript1.cs: Globalny "kliknij by zrestartować/wrócić" – ładuje scenę "Start" po kliknięciu myszką.


4) Całe skrypty

Poniżej znajdziesz kompletny kod gry, podzielony na pliki, gotowy do wklejenia.

Example
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Camera : MonoBehaviour { public float movespeed = 3f; void Update() { transform.position += new Vector3(1 * Time.deltaTime * movespeed, 0, 0); } }