Tworzenie gry myśliwskiej w Unity
W tym samouczku przejdziemy przez proces tworzenia podstawowej gry myśliwskiej w Unity. Gra będzie zawierać elementy takie jak ruch gracza, sztuczna inteligencja zwierząt, mechanika strzelania i system punktacji. Omówimy:
- Konfigurowanie projektu i środowiska
- Tworzenie elementów sterujących odtwarzaczem
- Wdrażanie sztucznej inteligencji zwierząt
- Dodawanie mechaniki strzelania
- Ustawianie systemu punktacji
Konfigurowanie projektu
Zacznijmy od utworzenia nowego projektu Unity i środowiska.
Tworzenie projektu
- Otwórz Unity i utwórz nowy projekt 3D.
- Nadaj swojemu projektowi nazwę
HuntingGame
i kliknijUtwórz
. - W oknie Projekt utwórz foldery o nazwach
Scripts
,Prefabs
iMaterials
, aby uporządkować zasoby.
Konfigurowanie środowiska
- W hierarchii kliknij prawym przyciskiem myszy i wybierz
Obiekt 3D > Teren
, aby utworzyć teren. - Dostosuj teren za pomocą
Narzędzi terenu
, aby malować tekstury, dodawać drzewa, umieszczać trawę i inne szczegóły. - Dodaj kilka obiektów 3D, na przykład skały i drzewa, aby otoczenie wyglądało bardziej realistycznie.
Tworzenie elementów sterujących odtwarzacza
Następnie utworzymy postać gracza i wdrożymy sterowanie ruchem oparte na fizyce.
Postać gracza
- W hierarchii kliknij prawym przyciskiem myszy i wybierz
Obiekt 3D > Kapsuła
, aby utworzyć postać gracza. - Zmień nazwę kapsuły na
Player
i umieść ją nad terenem. - Dodaj komponent
Rigidbody
do obiektuPlayer
, aby uzyskać ruch oparty na fizyce. - Dodaj obiekt
Camera
jako obiekt podrzędny obiektuPlayer
, który będzie stanowił punkt widzenia gracza.
Skrypt ruchu gracza
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed = 5f;
public float rotationSpeed = 100f;
private Rigidbody rb;
void Start()
{
rb = GetComponent();
rb.freezeRotation = true;
}
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = transform.forward * moveVertical * moveSpeed * Time.deltaTime;
rb.MovePosition(rb.position + movement);
float rotation = Input.GetAxis("Mouse X") * rotationSpeed * Time.deltaTime;
Quaternion turnRotation = Quaternion.Euler(0f, rotation, 0f);
rb.MoveRotation(rb.rotation * turnRotation);
}
}
- Utwórz nowy skrypt C# o nazwie
PlayerMovement.cs
w folderzeScripts
. - Dołącz skrypt
PlayerMovement
do obiektuPlayer
.
Wdrażanie sztucznej inteligencji zwierząt
Stworzymy proste zwierzęce AI, które będzie przemieszczać się po otoczeniu i reagować na działania gracza.
Prefabrykowane zwierzę
- Zaimportuj lub utwórz model 3D zwierzęcia (np. jelenia).
- Przeciągnij model na scenę i umieść go na terenie.
- Kliknij prawym przyciskiem myszy model w Hierarchii i wybierz
Create Empty
, aby utworzyć obiekt nadrzędny. Nazwij goDeer
. - Przeciągnij model 3D do obiektu
Jeleń
i zresetuj jego transformację. - Zapisz obiekt
Deer
jako prefabrykat, przeciągając go do folderuPrefabs
.
Skrypt sztucznej inteligencji zwierząt
using UnityEngine;
using UnityEngine.AI;
public class AnimalAI : MonoBehaviour
{
public Transform[] waypoints;
private NavMeshAgent agent;
private int currentWaypoint = 0;
void Start()
{
agent = GetComponent();
agent.SetDestination(waypoints[currentWaypoint].position);
}
void Update()
{
if (agent.remainingDistance < agent.stoppingDistance)
{
currentWaypoint = (currentWaypoint + 1) % waypoints.Length;
agent.SetDestination(waypoints[currentWaypoint].position);
}
}
}
- Utwórz nowy skrypt C# o nazwie
AnimalAI.cs
w folderzeScripts
. - Dołącz skrypt
AnimalAI
do prefabrykatuDeer
. - Dodaj komponent
NavMeshAgent
do prefabrykatuDeer
. - Ustaw punkty nawigacyjne na scenie, tworząc puste obiekty GameObjects i pozycjonując je zgodnie z życzeniem. Przypisz te punkty nawigacyjne do tablicy
waypoints
w skrypcieAnimalAI
.
Dodawanie mechaniki strzelania
Wprowadzimy możliwość strzelania do zwierząt.
Scenariusz zdjęć
using UnityEngine;
public class PlayerShooting : MonoBehaviour
{
public Camera playerCamera;
public float range = 100f;
public GameObject impactEffect;
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Shoot();
}
}
void Shoot()
{
RaycastHit hit;
if (Physics.Raycast(playerCamera.transform.position, playerCamera.transform.forward, out hit, range))
{
AnimalAI animal = hit.transform.GetComponent();
if (animal != null)
{
Destroy(hit.transform.gameObject);
}
GameObject impactGO = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
Destroy(impactGO, 2f);
}
}
}
- Utwórz nowy skrypt C# o nazwie
PlayerShooting.cs
w folderzeScripts
. - Dołącz skrypt
PlayerShooting
do obiektuPlayer
. - Utwórz efekt uderzenia (np. system cząsteczek) i przypisz go do pola
impactEffect
w skrypcie.
Konfigurowanie systemu punktacji
Dodamy prosty system punktacji, aby śledzić udane polowania gracza.
Skrypt menedżera wyników
using UnityEngine;
using UnityEngine.UI;
public class ScoreManager : MonoBehaviour
{
public static int score = 0;
public Text scoreText;
void Update()
{
scoreText.text = "Score: " + score.ToString();
}
public static void AddScore(int points)
{
score += points;
}
}
- Utwórz nowy skrypt C# o nazwie
ScoreManager.cs
w folderzeScripts
. - Dołącz skrypt
ScoreManager
do nowego, pustego obiektu GameObject o nazwieGameManager
. - Utwórz element tekstu interfejsu użytkownika służący do wyświetlania wyniku i przypisz go do pola
scoreText
w skrypcieScoreManager
.
Aktualizacja skryptu strzelania w celu śledzenia wyników
void Shoot()
{
RaycastHit hit;
if (Physics.Raycast(playerCamera.transform.position, playerCamera.transform.forward, out hit, range))
{
AnimalAI animal = hit.transform.GetComponent();
if (animal != null)
{
Destroy(hit.transform.gameObject);
ScoreManager.AddScore(10);
}
GameObject impactGO = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
Destroy(impactGO, 2f);
}
}
Wniosek
Stworzyliśmy podstawową grę myśliwską w Unity. Skonfigurowaliśmy projekt i środowisko, stworzyliśmy sterowanie gracza z ruchem opartym na fizyce, zaimplementowaliśmy sztuczną inteligencję zwierząt, dodaliśmy mechanikę strzelania i skonfigurowaliśmy system punktacji. Tę podstawową wiedzę można rozszerzyć o bardziej złożone zachowania, dodatkowe zwierzęta i udoskonaloną mechanikę gry, aby ulepszyć grę myśliwską.