Hướng dẫn tấn công cận chiến 2D cho Unity
Unity Engine cung cấp nền tảng mở rộng để tạo cả trò chơi 2D và 3D. Một trong những yếu tố nền tảng trong nhiều game hành động là tấn công cận chiến. Trong môi trường 2D, một cuộc tấn công như vậy thường bao gồm việc nhân vật vung vũ khí hoặc tung một cú đấm và nó có thể được thực hiện bằng cách sử dụng kết hợp các công cụ hoạt hình Unity, vật lý và tạo kịch bản.
Điều kiện tiên quyết
- Unity Engine đã được cài đặt và thiết lập.
- Làm quen cơ bản với giao diện Unity và 2D space.
1. Thiết lập dự án và cảnh
- Tạo một dự án 2D Unity mới (nếu chưa có).
- Nhập hoặc tạo một nhân vật. Đặt nó vào hiện trường.
2. Thiết lập hoạt ảnh tấn công cận chiến
- Trong cửa sổ Project, nhấp chuột phải và tạo tệp "Animator Controller". Đặt tên là "CharacterAnimator".
- Gán trình hoạt hình này cho nhân vật bằng cách chọn ký tự và kéo trình hoạt hình đó vào thành phần "Animator".
- Mở cửa sổ Hoạt hình. Với ký tự được chọn, hãy tạo một hoạt ảnh mới có tên "MeleeAttack".
- Để đơn giản, hãy giả sử cuộc tấn công này là một cú đấm nhanh. Tạo hoạt ảnh cho sprite để mô phỏng hành động này.
3. Tạo Hitbox tấn công
- Thêm một GameObject trống khi còn nhỏ cho nhân vật. Điều này sẽ hoạt động như hitbox cho cuộc tấn công.
- Đính kèm a "Box Collider 2D" vào GameObject trống. Điều chỉnh kích thước và vị trí của nó để phù hợp với nơi nhân vật sẽ đánh trong cú đấm.
- Vô hiệu hóa hitbox bằng cách bỏ chọn hộp "Active" của nó. Điều này đảm bảo nó chỉ kích hoạt trong hoạt ảnh tấn công.
4. Viết kịch bản logic tấn công
- Tạo một tập lệnh mới, đặt tên là "MeleeAttack" rồi dán đoạn mã bên dưới vào trong tập lệnh đó:
'MeleeAttack.cs'
using UnityEngine;
public class MeleeAttack : MonoBehaviour
{
private Animator animator;
private BoxCollider2D hitbox;
private void Start()
{
animator = GetComponent<Animator>();
hitbox = transform.Find("HitboxGameObjectName").GetComponent<BoxCollider2D>();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space)) // Attack on Space key press.
{
animator.SetTrigger("MeleeAttack");
Invoke("ActivateHitbox", 0.2f); // Activate hitbox after 0.2 seconds.
Invoke("DeactivateHitbox", 0.4f); // Deactivate hitbox after 0.4 seconds.
}
}
void ActivateHitbox()
{
hitbox.gameObject.SetActive(true);
}
void DeactivateHitbox()
{
hitbox.gameObject.SetActive(false);
}
}
- Đính kèm tập lệnh "MeleeAttack" vào nhân vật chính.
- Điều chỉnh thời gian kích hoạt và hủy kích hoạt hitbox dựa trên animation.
- Gán trình thu thập hitbox cho Hitbox variable.
5. Xử lý va chạm
- Thay đổi thẻ của đối tượng trò chơi của kẻ thù thành "Enemy".
- Tạo một tập lệnh mới, đặt tên là "Hitbox" rồi dán mã bên dưới vào trong tập lệnh đó:
'Hitbox.cs'
using UnityEngine;
public class Hitbox : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Enemy"))
{
// Damage or destroy the enemy.
Destroy(collision.gameObject);
}
}
}
- Đính kèm tập lệnh "Hitbox" vào đối tượng hitbox.
Câu hỏi để giải quyết:
- Làm thế nào để hitbox biết khi nào nên kích hoạt trong hoạt ảnh?: Hitbox được kích hoạt bởi hàm 'Invoke' trong tập lệnh 'MeleeAttack.cs'. Thời gian có thể được điều chỉnh dựa trên khung nơi đòn tấn công dự kiến sẽ tấn công.
- Điều gì xảy ra nếu hitbox va chạm với nhiều kẻ thù cùng một lúc?: Sử dụng tập lệnh 'Hitbox' được cung cấp, mỗi kẻ thù có thẻ "Enemy" va chạm với hitbox sẽ bị tiêu diệt. Điều chỉnh tập lệnh để quản lý sát thương hoặc các hiệu ứng khác.
- Nút tấn công có thể được thay đổi từ phím Space không?: Có, trong tập lệnh 'MeleeAttack.cs', dòng if ('Input.GetKeyDown(KeyCode.Space)') kiểm tra phím Space nhấn. Thay thế 'KeyCode.Space' bằng một giá trị 'KeyCode' khác để thay đổi nút tấn công.
Phần kết luận
Hướng dẫn này cung cấp khuôn khổ cơ bản để triển khai cuộc tấn công cận chiến 2D trong Unity. Những cải tiến như thêm hiệu ứng âm thanh, phản hồi hình ảnh và tinh chỉnh logic phát hiện cú đánh có thể nâng cao hơn nữa trải nghiệm tấn công cận chiến.