Triển khai hệ thống Parkour trong Unity
Khái niệm parkour, một môn huấn luyện tập trung vào việc vượt qua các chướng ngại vật thể chất bằng chuyển động, đã trở nên phổ biến rộng rãi trong trò chơi điện tử, mang đến cho người chơi một môi trường tương tác và hấp dẫn. Việc triển khai hệ thống này trong Unity có thể nâng cao trải nghiệm chơi trò chơi. Hướng dẫn này sẽ hướng dẫn bạn qua quá trình thiết lập hệ thống parkour cơ bản trong Unity, tập trung vào việc chạy trên tường và nhảy vòm.
Tài sản cần thiết
- Bộ điều khiển nhân vật cơ bản: Chúng tôi sẽ sử dụng bộ điều khiển người chơi từ Camera người thứ ba trong Unity làm lớp cơ sở để sửa đổi.
- Hoạt ảnh Parkour: chạy tường, nhảy vòm, v.v.
1. Thiết lập cảnh
- Đảm bảo môi trường có tường và chướng ngại vật được gắn thẻ thích hợp, sử dụng "Wall" cho tường và "Obstacle" cho chướng ngại vật có thể che chắn.
2. Sửa đổi tập lệnh 'SC_TPSController' để chạy trên tường
2.1. Phát hiện một bức tường:
- Phương pháp này kiểm tra xem nhân vật có ở cạnh bức tường hay không bằng cách sử dụng raycasting.
bool IsBesideWall(Vector3 direction)
{
RaycastHit hit;
if (Physics.Raycast(transform.position, direction, out hit, 1f))
{
if (hit.transform.CompareTag("Wall"))
{
return true;
}
}
return false;
}
2.2. Chạy trên tường
- Coroutine này xử lý việc chạy trên tường.
public float wallRunTime = 2f; // Duration of the wall run.
IEnumerator WallRun(Vector3 direction)
{
float startTime = Time.time;
canMove = false; // Disable regular movement during wall run.
while (Time.time - startTime < wallRunTime)
{
characterController.Move(direction * speed * Time.deltaTime);
yield return null;
}
canMove = true; // Enable regular movement after wall run.
}
- Tích hợp chạy tường trong phương thức 'Update()':
// Wall Run
if (IsBesideWall(transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
StartCoroutine(WallRun(transform.right));
}
else if (IsBesideWall(-transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
StartCoroutine(WallRun(-transform.right));
}
3. Sửa đổi 'SC_TPSController' cho Vaulting
3.1. Phát hiện chướng ngại vật
- Kiểm tra chướng ngại vật có thể che chắn được ở phía trước nhân vật.
bool IsObstacleInFront()
{
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.forward, out hit, 1.5f))
{
if (hit.transform.CompareTag("Obstacle"))
{
return true;
}
}
return false;
}
3.2. Vòm
- Thêm một phương pháp vault:
void Vault()
{
canMove = false; // Disable regular movement during vaulting.
// Translate the player over the obstacle.
Vector3 vaultMovement = (Vector3.up + transform.forward) * speed * Time.deltaTime;
characterController.Move(vaultMovement);
canMove = true; // Enable regular movement after vaulting.
}
- Tích hợp vault trong phương thức 'Update()':
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
Vault();
}
Phần kết luận
Những sửa đổi này sẽ giới thiệu các chức năng chạy trên tường và vòm cho bộ điều khiển người chơi bên thứ ba hiện có. Kiểm tra các chuyển động mới này trong nhiều tình huống khác nhau để đảm bảo chúng hoạt động như dự định. Có thể cần phải điều chỉnh tùy thuộc vào môi trường cụ thể của trò chơi hoặc cơ chế parkour mong muốn.