Build Your Own First Person Shooter Survival Game In Unity
Cześć! Chcesz stworzyć własną grę First Person Shooter (FPS) z elementami survivalu w Unity? Brzmi jak ambitny projekt, ale nie martw się, rozłożymy to na proste kroki. Ten artykuł poprowadzi Cię przez podstawy, nawet jeśli jesteś zupełnie początkujący w świecie gier komputerowych.
Co to jest FPS Survival i dlaczego Unity?
Zacznijmy od początku. FPS (First Person Shooter) to gatunek gier, w których akcję obserwujesz z perspektywy pierwszej osoby – czyli widzisz świat oczami bohatera. Wyobraź sobie, że zakładasz okulary VR i wchodzisz do świata gry. Widzisz tylko to, co widziałby Twój bohater, w tym jego ręce trzymające broń. Przykłady popularnych FPS-ów to Counter-Strike, Call of Duty czy Battlefield.
Survival to gatunek gier, w którym najważniejszym celem jest przetrwanie. Musisz zbierać zasoby, budować schronienia, walczyć z zagrożeniami (np. potworami, innymi graczami), i dbać o swoje podstawowe potrzeby, takie jak głód, pragnienie i zdrowie. Wyobraź sobie, że utknąłeś na bezludnej wyspie i musisz znaleźć sposób, żeby przeżyć. Gry survivalowe to np. Minecraft (w trybie survivalu), The Forest czy DayZ.
Połączenie tych dwóch gatunków daje nam FPS Survival – grę, w której strzelasz z perspektywy pierwszej osoby, a jednocześnie walczysz o przetrwanie w niebezpiecznym środowisku. Musisz umiejętnie korzystać z broni, zbierać zasoby, budować schronienia i unikać zagrożeń, aby przeżyć jak najdłużej.
Unity to silnik do gier, czyli oprogramowanie, które dostarcza wszystkie niezbędne narzędzia do tworzenia gier. Pomyśl o Unity jak o warsztacie, w którym masz młotek, piłę, wiertarkę i wszystkie inne narzędzia potrzebne do zbudowania domu. Unity oferuje edytor, w którym możesz projektować sceny, programować zachowania postaci, dodawać efekty dźwiękowe i wizualne, i wiele więcej. Unity jest popularny, ponieważ jest darmowy dla początkujących, ma ogromną społeczność (czyli mnóstwo materiałów edukacyjnych i forów pomocy) i jest bardzo wszechstronny – można w nim tworzyć gry na komputery, telefony, konsole, a nawet do wirtualnej rzeczywistości!
Podstawowe Kroki w Unity
Okej, teraz przejdźmy do praktyki. Załóżmy, że masz już zainstalowane Unity (jeśli nie, poszukaj w internecie "pobierz Unity" i zainstaluj najnowszą wersję Unity Hub, a następnie przez Hub zainstaluj Unity Editor). Uruchom Unity i stwórz nowy projekt 3D. Nazwij go "FPS Survival Game" (lub jakkolwiek chcesz).
1. Tworzenie Środowiska
Pierwszym krokiem jest stworzenie środowiska gry – czyli mapy. Możesz użyć wbudowanych narzędzi Unity do tworzenia terenu. Kliknij prawym przyciskiem myszy w oknie Hierarchy (po lewej stronie ekranu) i wybierz 3D Object -> Terrain. Teraz masz podstawowy teren. Możesz go kształtować za pomocą narzędzi w oknie Inspector (po prawej stronie ekranu), takich jak Raise/Lower Terrain (podnoszenie i obniżanie terenu), Paint Texture (malowanie teksturami) i Set Height (ustawianie wysokości). Spróbuj stworzyć prostą mapę z górami, dolinami i płaskimi obszarami. Pamiętaj, żeby dodać materiały (Materials) do terenu, inaczej będzie wyglądał szaro i nudno. Materiały to nic innego jak "skórki" dla obiektów – definiują ich kolor, fakturę i inne właściwości wizualne. Możesz pobrać darmowe materiały z Asset Store (Okno -> Asset Store). Pomyśl o tym jak o wyborze tapety i podłogi dla twojego domu - te materiały nadają charakter twojemu terenowi.
2. Dodawanie Gracza (Player)
Następnie musisz dodać gracza. Możesz zacząć od prostego Character Controller (Obiekt 3D -> Capsule Collider -> Dodaj Component -> Character Controller). Character Controller to gotowy komponent, który pozwala na łatwe sterowanie postacią. Stwórz nowy obiekt Capsule i dostosuj jego rozmiar i pozycję. Dodaj do niego komponent Character Controller. Teraz potrzebujesz skryptu (czyli programu), który będzie sterował ruchem gracza. Stwórz nowy skrypt C# (Create -> C# Script) o nazwie "PlayerMovement" i otwórz go w edytorze kodu (np. Visual Studio). W skrypcie będziesz musiał napisać kod, który pobiera dane z klawiatury (np. strzałki lub WASD) i przesuwa postać w odpowiednim kierunku. Przykładowy kod (bardzo uproszczony):
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float speed = 5f;
private CharacterController controller;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
Vector3 move = transform.right * x + transform.forward * z;
controller.Move(move * speed * Time.deltaTime);
}
}
Ten kod pobiera dane z klawiszy strzałek (lub WASD), oblicza wektor ruchu i przesuwa postać za pomocą Character Controller. Pamiętaj, żeby przenieść ten skrypt na obiekt gracza (Capsule) i ustawić wartość speed w oknie Inspector.
3. Dodawanie Broni
Teraz czas na broń! Możesz zacząć od prostego modelu 3D broni (możesz pobrać darmowe modele z Asset Store lub stworzyć własny w programie do modelowania 3D, takim jak Blender). Umieść model broni jako dziecko (child) obiektu gracza (przeciągnij go na obiekt gracza w oknie Hierarchy). Dostosuj pozycję i rotację broni, żeby wyglądała naturalnie. Następnie dodaj skrypt, który będzie obsługiwał strzelanie. Stwórz nowy skrypt C# o nazwie "Gun" i otwórz go w edytorze kodu. W skrypcie będziesz musiał napisać kod, który wykrywa naciśnięcie przycisku myszy (np. lewego przycisku), tworzy pocisk (prefab), i nadaje mu prędkość. Prefab to gotowy szablon obiektu, który możesz wielokrotnie powielać w grze. Na przykład, możesz stworzyć prefab pocisku (mały obiekt 3D) i skrypt, który nadaje mu prędkość i powoduje zniszczenie po uderzeniu w coś. Przykładowy kod (bardzo uproszczony):
using UnityEngine;
public class Gun : MonoBehaviour
{
public GameObject bulletPrefab;
public Transform bulletSpawnPoint;
public float bulletSpeed = 100f;
void Update()
{
if (Input.GetMouseButtonDown(0)) // Lewy przycisk myszy
{
Fire();
}
}
void Fire()
{
GameObject bullet = Instantiate(bulletPrefab, bulletSpawnPoint.position, bulletSpawnPoint.rotation);
Rigidbody rb = bullet.GetComponent<Rigidbody>();
rb.AddForce(bulletSpawnPoint.forward * bulletSpeed, ForceMode.Impulse);
Destroy(bullet, 2f); // Usuń pocisk po 2 sekundach
}
}
Ten kod tworzy nowy pocisk (bulletPrefab) w miejscu bulletSpawnPoint (mały obiekt pusty (empty object) umieszczony na końcu lufy broni), nadaje mu prędkość i niszczy go po 2 sekundach. Pamiętaj, żeby przenieść ten skrypt na obiekt broni i ustawić wartości bulletPrefab, bulletSpawnPoint i bulletSpeed w oknie Inspector. Stwórz prosty prefab pocisku (np. kula 3D) i przypisz go do pola bulletPrefab w skrypcie.
4. Dodawanie Przeciwników (Enemies)
Żeby gra była ciekawa, potrzebujesz przeciwników. Możesz zacząć od prostego AI (Sztucznej Inteligencji), który będzie patrolował teren i atakował gracza, gdy go zobaczy. Stwórz nowy obiekt 3D (np. Cube) i dodaj do niego komponent Nav Mesh Agent. Nav Mesh Agent to komponent, który pozwala na łatwe poruszanie się po terenu (NavMesh). NavMesh to specjalny typ danych, który opisuje przestrzeń, po której mogą poruszać się obiekty. Aby wygenerować NavMesh, wybierz Window -> AI -> Navigation i kliknij Bake. Następnie stwórz nowy skrypt C# o nazwie "EnemyAI" i otwórz go w edytorze kodu. W skrypcie będziesz musiał napisać kod, który wyszukuje gracza, podąża za nim, i atakuje go, gdy jest blisko. Przykładowy kod (bardzo uproszczony):
using UnityEngine;
using UnityEngine.AI;
public class EnemyAI : MonoBehaviour
{
public Transform target;
private NavMeshAgent agent;
void Start()
{
agent = GetComponent<NavMeshAgent>();
}
void Update()
{
agent.SetDestination(target.position);
}
}
Ten kod ustawia cel (target) Nav Mesh Agenta na pozycję gracza. Pamiętaj, żeby przenieść ten skrypt na obiekt przeciwnika i ustawić wartość target w oknie Inspector (przeciągnij obiekt gracza na to pole). Dodaj też prosty system kolizji, który będzie zmniejszał zdrowie gracza, gdy przeciwnik go dotknie.
5. Elementy Survivalu
Na koniec dodajmy elementy survivalu. Możesz zacząć od prostego systemu głodu i pragnienia. Stwórz dwie zmienne (np. hunger i thirst) i zmniejszaj je z czasem. Jeśli spadną do zera, gracz zacznie tracić zdrowie. Dodaj możliwość zbierania zasobów (np. jedzenia i wody) z otoczenia. Możesz to zrobić, dodając obiekty interaktywne (np. krzaki z jagodami), które gracz może zebrać, gdy się do nich zbliży i naciśnie odpowiedni przycisk (np. E). Możesz również dodać system craftingu, który pozwoli graczowi na tworzenie przedmiotów z zebranych zasobów. Na przykład, gracz może stworzyć topór z drewna i kamieni, który będzie mu potrzebny do ścinania drzew. Dodaj też system budowania schronienia. Gracz może zbierać drewno i kamienie, i użyć ich do zbudowania prostego domu, który będzie go chronił przed zagrożeniami.
Podsumowanie
Gratulacje! Znasz już podstawy tworzenia gry FPS Survival w Unity. To tylko początek, ale teraz masz solidną podstawę do dalszego rozwoju. Eksperymentuj, ucz się nowych rzeczy, i nie bój się popełniać błędów. Tworzenie gier to proces ciągłego uczenia się i doskonalenia. Pamiętaj o Asset Store - tam znajdziesz wiele gotowych elementów (modele, skrypty, dźwięki), które mogą Ci pomóc w tworzeniu gry. Powodzenia i miłej zabawy!
