Tạo trò chơi săn bắn trong Unity

Trong hướng dẫn này, chúng ta sẽ tìm hiểu quy trình tạo trò chơi săn bắn cơ bản trong Unity. Trò chơi này sẽ bao gồm các yếu tố như chuyển động của người chơi, AI động vật, cơ chế bắn và hệ thống tính điểm. Chúng ta sẽ đề cập đến:

  • Thiết lập dự án và môi trường
  • Tạo điều khiển người chơi
  • Triển khai AI động vật
  • Thêm cơ chế bắn
  • Thiết lập hệ thống tính điểm

Thiết lập dự án

Hãy bắt đầu bằng cách thiết lập một dự án Unity mới và tạo môi trường.

Tạo dự án

  1. Mở Unity và tạo một dự án 3D mới.
  2. Đặt tên cho dự án của bạn là HuntingGame và nhấp vào Create.
  3. Trong cửa sổ Project, tạo các thư mục có tên Scripts, PrefabsMaterials để sắp xếp các tài sản của bạn.

Thiết lập môi trường

  1. Trong Phân cấp, nhấp chuột phải và chọn Đối tượng 3D > Địa hình để tạo địa hình.
  2. Tùy chỉnh địa hình bằng cách sử dụng Công cụ địa hình để tô họa tiết, thêm cây và đặt cỏ hoặc các chi tiết khác.
  3. Thêm một vài vật thể 3D như đá và cây để làm cho môi trường trở nên chân thực hơn.

Tạo điều khiển người chơi

Tiếp theo, chúng ta sẽ tạo nhân vật người chơi và triển khai các điều khiển chuyển động dựa trên vật lý.

Nhân vật người chơi

  1. Trong Hierarchy, nhấp chuột phải và chọn Đối tượng 3D > Capsule để tạo nhân vật người chơi.
  2. Đổi tên viên nang thành Player và đặt nó phía trên địa hình.
  3. Thêm thành phần Rigidbody vào đối tượng Player để chuyển động dựa trên vật lý.
  4. Thêm Camera làm đối tượng con của đối tượng Player để làm góc nhìn của người chơi.

Kịch bản di chuyển của người chơi

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. Tạo một tập lệnh C# mới có tên PlayerMovement.cs trong thư mục Scripts.
  2. Đính kèm tập lệnh PlayerMovement vào đối tượng Player.

Triển khai AI động vật

Chúng tôi sẽ tạo ra AI động vật đơn giản để di chuyển trong môi trường và phản ứng với người chơi.

Động vật đúc sẵn

  1. Nhập hoặc tạo mô hình 3D cho động vật (ví dụ: hươu).
  2. Kéo mô hình vào cảnh và đặt nó trên địa hình.
  3. Nhấp chuột phải vào mô hình trong Hierarchy và chọn Create Empty để tạo đối tượng cha. Đặt tên là Deer.
  4. Kéo mô hình 3D vào đối tượng Deer và thiết lập lại phép biến đổi của nó.
  5. Lưu đối tượng Deer dưới dạng prefab bằng cách kéo nó vào thư mục Prefabs.

Kịch bản AI động vậ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. Tạo một tập lệnh C# mới có tên AnimalAI.cs trong thư mục Scripts.
  2. Đính kèm tập lệnh AnimalAI vào mô hình Deer.
  3. Thêm thành phần NavMeshAgent vào mô hình dựng sẵn Deer.
  4. Thiết lập các điểm dừng trong cảnh bằng cách tạo GameObject trống và định vị chúng theo ý muốn. Gán các điểm dừng này vào mảng waypoints trong tập lệnh AnimalAI.

Thêm cơ chế bắn

Chúng tôi sẽ bổ sung khả năng cho phép người chơi bắn vào động vật.

Kịch bản quay phim

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. Tạo một tập lệnh C# mới có tên PlayerShooting.cs trong thư mục Scripts.
  2. Đính kèm tập lệnh PlayerShooting vào đối tượng Player.
  3. Tạo hiệu ứng tác động (ví dụ: hệ thống hạt) và gán nó vào trường impactEffect trong tập lệnh.

Thiết lập hệ thống tính điểm

Chúng tôi sẽ thêm một hệ thống tính điểm đơn giản để theo dõi những lần đi săn thành công của người chơi.

Kịch bản quản lý điểm số

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. Tạo một tập lệnh C# mới có tên ScoreManager.cs trong thư mục Scripts.
  2. Đính kèm tập lệnh ScoreManager vào một GameObject trống mới có tên GameManager.
  3. Tạo phần tử Văn bản UI để hiển thị điểm số và gán nó vào trường scoreText trong tập lệnh ScoreManager.

Cập nhật Kịch bản Bắn súng để Theo dõi Điểm số

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);
    }
}

Phần kết luận

Chúng tôi đã tạo ra một trò chơi săn bắn cơ bản trong Unity. Chúng tôi thiết lập dự án và môi trường, tạo điều khiển người chơi với chuyển động dựa trên vật lý, triển khai AI động vật, thêm cơ chế bắn và thiết lập hệ thống tính điểm. Kiến thức cơ bản này có thể được mở rộng để bao gồm các hành vi phức tạp hơn, động vật bổ sung và cơ chế trò chơi tinh chỉnh để nâng cao trò chơi săn bắn của bạn.