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

  1. Otwórz Unity i utwórz nowy projekt 3D.
  2. Nadaj swojemu projektowi nazwę HuntingGame i kliknij Utwórz.
  3. W oknie Projekt utwórz foldery o nazwach Scripts, Prefabs i Materials, aby uporządkować zasoby.

Konfigurowanie środowiska

  1. W hierarchii kliknij prawym przyciskiem myszy i wybierz Obiekt 3D > Teren, aby utworzyć teren.
  2. Dostosuj teren za pomocą Narzędzi terenu, aby malować tekstury, dodawać drzewa, umieszczać trawę i inne szczegóły.
  3. 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

  1. W hierarchii kliknij prawym przyciskiem myszy i wybierz Obiekt 3D > Kapsuła, aby utworzyć postać gracza.
  2. Zmień nazwę kapsuły na Player i umieść ją nad terenem.
  3. Dodaj komponent Rigidbody do obiektu Player, aby uzyskać ruch oparty na fizyce.
  4. Dodaj obiekt Camera jako obiekt podrzędny obiektu Player, 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);
    }
}
  1. Utwórz nowy skrypt C# o nazwie PlayerMovement.cs w folderze Scripts.
  2. Dołącz skrypt PlayerMovement do obiektu Player.

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ę

  1. Zaimportuj lub utwórz model 3D zwierzęcia (np. jelenia).
  2. Przeciągnij model na scenę i umieść go na terenie.
  3. Kliknij prawym przyciskiem myszy model w Hierarchii i wybierz Create Empty, aby utworzyć obiekt nadrzędny. Nazwij go Deer.
  4. Przeciągnij model 3D do obiektu Jeleń i zresetuj jego transformację.
  5. Zapisz obiekt Deer jako prefabrykat, przeciągając go do folderu Prefabs.

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);
        }
    }
}
  1. Utwórz nowy skrypt C# o nazwie AnimalAI.cs w folderze Scripts.
  2. Dołącz skrypt AnimalAI do prefabrykatu Deer.
  3. Dodaj komponent NavMeshAgent do prefabrykatu Deer.
  4. 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 skrypcie AnimalAI.

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);
        }
    }
}
  1. Utwórz nowy skrypt C# o nazwie PlayerShooting.cs w folderze Scripts.
  2. Dołącz skrypt PlayerShooting do obiektu Player.
  3. 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;
    }
}
  1. Utwórz nowy skrypt C# o nazwie ScoreManager.cs w folderze Scripts.
  2. Dołącz skrypt ScoreManager do nowego, pustego obiektu GameObject o nazwie GameManager.
  3. Utwórz element tekstu interfejsu użytkownika służący do wyświetlania wyniku i przypisz go do pola scoreText w skrypcie ScoreManager.

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ą.