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
- Mở Unity và tạo một dự án 3D mới.
- Đặt tên cho dự án của bạn là
HuntingGame
và nhấp vàoCreate
. - Trong cửa sổ Project, tạo các thư mục có tên
Scripts
,Prefabs
vàMaterials
để sắp xếp các tài sản của bạn.
Thiết lập môi trường
- 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. - 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. - 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
- 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. - Đổi tên viên nang thành
Player
và đặt nó phía trên địa hình. - Thêm thành phần
Rigidbody
vào đối tượngPlayer
để chuyển động dựa trên vật lý. - Thêm
Camera
làm đối tượng con của đối tượngPlayer
để 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);
}
}
- Tạo một tập lệnh C# mới có tên
PlayerMovement.cs
trong thư mụcScripts
. - Đính kèm tập lệnh
PlayerMovement
vào đối tượngPlayer
.
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
- Nhập hoặc tạo mô hình 3D cho động vật (ví dụ: hươu).
- Kéo mô hình vào cảnh và đặt nó trên địa hình.
- 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
. - 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ó. - Lưu đối tượng
Deer
dưới dạng prefab bằng cách kéo nó vào thư mụcPrefabs
.
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);
}
}
}
- Tạo một tập lệnh C# mới có tên
AnimalAI.cs
trong thư mụcScripts
. - Đính kèm tập lệnh
AnimalAI
vào mô hìnhDeer
. - Thêm thành phần
NavMeshAgent
vào mô hình dựng sẵnDeer
. - 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ệnhAnimalAI
.
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);
}
}
}
- Tạo một tập lệnh C# mới có tên
PlayerShooting.cs
trong thư mụcScripts
. - Đính kèm tập lệnh
PlayerShooting
vào đối tượngPlayer
. - 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;
}
}
- Tạo một tập lệnh C# mới có tên
ScoreManager.cs
trong thư mụcScripts
. - Đính kèm tập lệnh
ScoreManager
vào một GameObject trống mới có tênGameManager
. - 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ệnhScoreManager
.
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.