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à
HuntingGamevà nhấp vàoCreate. - Trong cửa sổ Project, tạo các thư mục có tên
Scripts,Prefabsvà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
Playervà đặt nó phía trên địa hình. - Thêm thành phần
Rigidbodyvào đối tượngPlayerđể chuyển động dựa trên vật lý. - Thêm
Cameralà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.cstrong thư mụcScripts. - Đính kèm tập lệnh
PlayerMovementvà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
Deervà thiết lập lại phép biến đổi của nó. - Lưu đối tượng
Deerdướ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.cstrong thư mụcScripts. - Đính kèm tập lệnh
AnimalAIvào mô hìnhDeer. - Thêm thành phần
NavMeshAgentvà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
waypointstrong 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.cstrong thư mụcScripts. - Đính kèm tập lệnh
PlayerShootingvà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
impactEffecttrong 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.cstrong thư mụcScripts. - Đính kèm tập lệnh
ScoreManagervà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
scoreTexttrong 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.