Cách bắn một phát súng trong Unity

Trong hướng dẫn này, chúng ta sẽ hướng dẫn từng bước cách bắn một phát đạn trong Unity. Bạn sẽ học cách tạo một vật thể cơ bản di chuyển về phía trước và tương tác với các vật thể khác. Cuối cùng, bạn sẽ có một tập lệnh hoạt động có thể được gắn vào GameObject để mô phỏng việc bắn trong trò chơi.

Thiết lập bối cảnh

Trước khi đi sâu vào mã hóa, trước tiên chúng ta hãy thiết lập bối cảnh để tạo ra một vật thể. Sau đây là các bước để bắt đầu:

  1. Tạo một dự án Unity mới hoặc mở một dự án hiện có.
  2. Tạo một vật thể 3D (ví dụ: khối lập phương hoặc hình cầu) trong cảnh của bạn, vật thể này sẽ đóng vai trò là người chơi hoặc vật thể bắn phát súng.
  3. Tạo một vật thể 3D khác (ví dụ: một quả cầu nhỏ hơn) để hoạt động như một vật phóng. Vật thể này sẽ được khởi tạo khi bắn.
  4. Sắp xếp các đối tượng của bạn bằng cách đặt cho chúng những cái tên có ý nghĩa, chẳng hạn như "Player" và "ProjectilePrefab".

Tạo kịch bản quay phim

Bây giờ chúng ta đã có cảnh cơ bản, hãy tạo tập lệnh xử lý việc bắn. Chúng ta sẽ đặt tên tập lệnh là Shot.cs và đính kèm vào đối tượng người chơi. Tập lệnh này sẽ tạo ra đạn và áp dụng lực về phía trước để mô phỏng việc bắn.

Thực hiện theo các bước sau để tạo tập lệnh:

  1. Trong trình soạn thảo Unity, nhấp chuột phải vào cửa sổ Project và chọn Create > C# Script. Đặt tên cho script là Shot.cs.
  2. Nhấp đúp vào tệp Shot.cs để mở tệp đó trong trình soạn thảo mã của bạn.
  3. Thay thế mã mặc định bằng đoạn mã sau:
using UnityEngine;

public class Shot : MonoBehaviour
{
    public GameObject projectilePrefab;  // The prefab of the projectile to shoot
    public Transform firePoint;          // The point where the projectile will be fired from
    public float projectileSpeed = 20f;  // Speed of the projectile

    void Update()
    {
        // Check if the player presses the fire button (default is left mouse button or spacebar)
        if (Input.GetButtonDown("Fire1"))
        {
            FireShot();
        }
    }

    void FireShot()
    {
        // Instantiate the projectile at the fire point's position and rotation
        GameObject projectile = Instantiate(projectilePrefab, firePoint.position, firePoint.rotation);

        // Get the Rigidbody component of the projectile to apply physics
        Rigidbody rb = projectile.GetComponent();

        if (rb != null)
        {
            // Apply force to the projectile to make it move forward
            rb.velocity = firePoint.forward * projectileSpeed;
        }
    }
}

Tập lệnh này thực hiện các nhiệm vụ sau:

  • Định nghĩa projectilePrefab công khai để chứa đối tượng đạn.
  • Sử dụng firePoint để chỉ rõ điểm phát bắn.
  • Sử dụng projectileSpeed để kiểm soát tốc độ của đạn.
  • Kiểm tra đầu vào của người chơi bằng cách sử dụng Input.GetButtonDown("Fire1"), lệnh này sẽ lắng nghe hành động "Fire1" (thường được ánh xạ tới nút chuột trái hoặc phím cách).
  • Tạo ra một vật thể phóng tại firePoint và áp dụng vận tốc tiến về phía trước cho vật thể đó.

Chỉ định tập lệnh trong Unity

Bây giờ chúng ta đã có tập lệnh sẵn sàng, đã đến lúc gán nó cho đối tượng trình phát và thiết lập các tham chiếu:

  1. Chọn GameObject "Player" trong cảnh.
  2. Kéo tập lệnh Shot.cs vào "Player" để đính kèm.
  3. Trong cửa sổ Inspector, bạn sẽ thấy các trường của tập lệnh. Gán prefab đạn (ví dụ: quả cầu nhỏ bạn đã tạo) vào ô ProjectilePrefab.
  4. Tạo một GameObject trống bên dưới đối tượng người chơi và đặt tên là "FirePoint". Đặt nó ở phía trước người chơi hoặc bất cứ nơi nào bạn muốn đạn xuất hiện.
  5. Kéo đối tượng "FirePoint" vào trường FirePoint trong tập lệnh.

Kiểm tra cú đánh

Để kiểm tra chức năng bắn, hãy nhấn nút Play trong Unity và nhấn nút bắn (mặc định là nút chuột trái hoặc phím cách). Bạn sẽ thấy đạn xuất hiện và di chuyển về phía trước khi bạn nhấn nút. Bạn có thể điều chỉnh tốc độ hoặc hình dạng của đạn để phù hợp hơn với nhu cầu của mình.

Những câu hỏi thường gặp

Làm sao để phá hủy vật thể sau khi nó được bắn ra?

Để ngăn chặn đạn của bạn tồn tại mãi mãi, bạn có thể phá hủy chúng sau một khoảng thời gian nhất định. Trong phương thức FireShot, sau khi khởi tạo đạn, bạn có thể thêm:

Destroy(projectile, 5f); // Destroys the projectile after 5 seconds

Làm thế nào để thêm hiệu ứng âm thanh hoặc hình ảnh động vào cảnh quay?

Bạn có thể thêm hiệu ứng âm thanh bằng cách sử dụng thành phần AudioSource. Chỉ cần thêm nó vào trình phát và phát âm thanh trong phương thức FireShot:

AudioSource audioSource = GetComponent();
audioSource.Play();

Đối với hoạt ảnh, bạn có thể kích hoạt hoạt ảnh bằng thành phần Animator hoặc bằng cách bật/tắt một số trạng thái GameObject trong phương thức FireShot.

Làm thế nào để khiến vật thể phóng tương tác với các vật thể khác?

Để làm cho đạn tương tác với các vật thể khác, hãy đảm bảo đạn có thành phần RigidbodyCollider. Sau đó, bạn có thể viết một tập lệnh để xử lý phát hiện va chạm bằng cách sử dụng OnCollisionEnter hoặc OnTriggerEnter:

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Enemy"))
    {
        Destroy(collision.gameObject); // Destroy enemy on collision
        Destroy(gameObject);           // Destroy the projectile
    }
}

Phần kết luận

Hy vọng rằng hướng dẫn này đã giúp bạn học cách bắn một phát đạn trong Unity bằng cách tạo ra một vật thể, tác dụng lực vào nó và xử lý phát hiện va chạm cơ bản. Kỹ thuật này có thể được mở rộng cho các tương tác phức tạp hơn, chẳng hạn như thêm hiệu ứng, âm thanh hoặc vật lý nâng cao.