Як зробити постріл в Unity

У цьому підручнику ми крок за кроком розглянемо, як зробити постріл у Unity. Ви дізнаєтесь, як створити базовий снаряд, який рухається вперед і взаємодіє з іншими об’єктами. Наприкінці ви матимете робочий сценарій, який можна прикріпити до GameObject для імітації стрільби в грі.

Налаштування сцени

Перш ніж зануритися в кодування, давайте спочатку налаштуємо сцену для створення снаряда. Ось кроки, щоб почати:

  1. Створіть новий проект Unity або відкрийте існуючий.
  2. Створіть 3D-об’єкт (наприклад, куб або сферу) у вашій сцені, який виконуватиме роль гравця або об’єкта, що робить постріл.
  3. Створіть інший 3D-об’єкт (наприклад, меншу сферу), який буде виконувати роль снаряда. Це буде реалізовано під час пострілу.
  4. Упорядковуйте свої об’єкти, даючи їм значущі імена, наприклад "Player" і "ProjectilePrefab".

Створення сценарію Shot

Тепер, коли у нас є базова сцена, давайте створимо сценарій, який буде керувати зйомкою. Ми назвемо скрипт Shot.cs і приєднаємо його до об’єкта гравця. Цей сценарій створить снаряд і застосує силу вперед для імітації стрільби.

Щоб створити сценарій, виконайте такі дії:

  1. У редакторі Unity клацніть правою кнопкою миші у вікні проекту та виберіть Створити > Сценарій C#. Назвіть скрипт Shot.cs.
  2. Двічі клацніть файл Shot.cs, щоб відкрити його в редакторі коду.
  3. Замініть стандартний код таким сценарієм:
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;
        }
    }
}

Цей сценарій виконує такі завдання:

  • Визначає публічний projectilePrefab для зберігання об’єкта снаряда.
  • Використовує firePoint, щоб указати, звідки походить постріл.
  • Використовує projectileSpeed для керування швидкістю снаряда.
  • Перевіряє введені гравцем дані за допомогою Input.GetButtonDown("Fire1"), яка прослуховує дію "Fire1" (зазвичай відображається на ліву кнопку миші або пробіл).
  • Створює снаряд у firePoint і застосовує до нього швидкість вперед.

Призначення сценарію в Unity

Тепер, коли у нас готовий скрипт, настав час призначити його об’єкту гравця та налаштувати посилання:

  1. Виберіть "Player" GameObject на сцені.
  2. Перетягніть сценарій Shot.cs на "Player", щоб прикріпити його.
  3. У вікні інспектора ви побачите поля сценарію. Призначте префаб снаряда (наприклад, маленьку сферу, яку ви створили) до слота ProjectilePrefab.
  4. Створіть порожній GameObject під об’єктом player і назвіть його "FirePoint". Розташуйте його перед гравцем або будь-де, звідки ви хочете, щоб з’явився снаряд.
  5. Перетягніть об’єкт "FirePoint" у поле FirePoint сценарію.

Тестування пострілу

Щоб перевірити функціональність зйомки, натисніть кнопку «Відтворити» в Unity і натисніть кнопку «Вогонь» (за замовчуванням — ліва кнопка миші або пробіл). Ви повинні побачити, як снаряд з’являється і рухається вперед, коли ви натискаєте кнопку. Ви можете налаштувати швидкість або зовнішній вигляд снаряда, щоб краще відповідати вашим потребам.

Часті запитання

Як знищити снаряд після пострілу?

Щоб ваші снаряди не існували вічно, ви можете знищити їх через певний час. У методі FireShot після створення екземпляра снаряда ви можете додати:

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

Як додати звукові ефекти чи анімацію до кадру?

Ви можете додати звукові ефекти за допомогою компонента AudioSource. Просто додайте його в плеєр і відтворіть звук методом FireShot:

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

Для анімації ви можете запустити анімацію за допомогою компонента Animator або шляхом увімкнення/вимкнення певних станів GameObject у методі FireShot.

Як змусити снаряд взаємодіяти з іншими об'єктами?

Щоб змусити снаряд взаємодіяти з іншими об’єктами, переконайтеся, що снаряд має компоненти Rigidbody і Collider. Потім ви можете написати сценарій для обробки виявлення зіткнень за допомогою OnCollisionEnter або OnTriggerEnter:

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

Висновок

Сподіваємось, цей посібник допоміг вам навчитися робити постріл у Unity, створюючи снаряд, застосовуючи до нього силу та керуючи базовим виявленням зіткнення. Цю техніку можна розширити для більш складних взаємодій, таких як додавання ефектів, звуку або розширеної фізики.