Unity에서 총을 쏘는 방법

이 튜토리얼에서는 Unity에서 총을 쏘는 방법을 단계별로 살펴보겠습니다. 앞으로 이동하고 다른 객체와 상호 작용하는 기본 발사체를 만드는 방법을 배우게 됩니다. 마지막에는 게임에서 총을 쏘는 것을 시뮬레이션하기 위해 GameObject에 첨부할 수 있는 작동하는 스크립트를 갖게 됩니다.

장면 설정

코딩에 들어가기 전에 먼저 투사체를 만들기 위한 장면을 설정해 보겠습니다. 시작하기 위한 단계는 다음과 같습니다.

  1. 새로운 Unity 프로젝트를 만들거나 기존 프로젝트를 엽니다.
  2. 장면에 총을 쏘는 플레이어나 객체 역할을 하는 3D 객체(예: 큐브나 구)를 만듭니다.
  3. 발사체 역할을 할 또 다른 3D 객체(예: 더 작은 구)를 만듭니다. 이것은 발사될 때 인스턴스화됩니다.
  4. "Player" 및 "ProjectilePrefab"와 같이 의미 있는 이름을 지정하여 개체를 정리합니다.

샷 스크립트 만들기

이제 기본 장면이 있으니 사격을 처리할 스크립트를 만들어 보겠습니다. 스크립트 이름을 Shot.cs로 지정하고 플레이어 객체에 첨부합니다. 이 스크립트는 발사체를 생성하고 발사를 시뮬레이션하기 위해 전방 힘을 적용합니다.

스크립트를 만들려면 다음 단계를 따르세요.

  1. Unity 편집기에서 프로젝트 창을 마우스 오른쪽 버튼으로 클릭하고 Create > C# Script을 선택합니다. 스크립트 이름을 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;
        }
    }
}

이 스크립트는 다음 작업을 수행합니다.

  • 발사체 객체를 보관하기 위한 public projectilePrefab을 정의합니다.
  • firePoint을 사용하여 사격이 시작되는 위치를 지정합니다.
  • projectileSpeed을 사용하여 발사체의 속도를 제어합니다.
  • Input.GetButtonDown("Fire1")을 사용하여 플레이어의 입력을 확인하고, "Fire1" 동작(일반적으로 왼쪽 마우스 버튼이나 스페이스바에 매핑됨)을 수신합니다.
  • firePoint에 투사체를 인스턴스화하고 전방 속도를 적용합니다.

스크립트 할당 Unity

이제 스크립트가 준비되었으니, 이를 플레이어 객체에 할당하고 참조를 설정할 차례입니다.

  1. 씬에서 "Player" 게임 오브젝트를 선택합니다.
  2. Shot.cs 스크립트를 "Player"로 끌어서 첨부합니다.
  3. Inspector 창에서 스크립트의 필드를 볼 수 있습니다. 발사체 프리팹(예: 만든 작은 구)을 ProjectilePrefab 슬롯에 할당합니다.
  4. 플레이어 객체 아래에 빈 GameObject를 만들고 이름을 "FirePoint"로 지정합니다. 플레이어 앞이나 투사체가 생성되기를 원하는 곳에 배치합니다.
  5. 스크립트의 FirePoint 필드로 "FirePoint" 객체를 끌어다 놓습니다.

샷 테스트

사격 기능을 테스트하려면 Unity에서 재생 버튼을 누르고 발사 버튼을 누릅니다(기본값은 왼쪽 마우스 버튼 또는 스페이스바). 버튼을 누르면 발사체가 생성되어 앞으로 이동하는 것을 볼 수 있습니다. 필요에 맞게 발사체의 속도나 모양을 조정할 수 있습니다.

자주 묻는 질문

발사된 후에는 어떻게 파괴하나요?

투사체가 영원히 존재하지 않도록 하려면 일정 시간 후에 투사체를 파괴할 수 있습니다. FireShot 메서드에서 투사체를 인스턴스화한 후 다음을 추가할 수 있습니다.

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

샷에 사운드 효과나 애니메이션을 추가하려면 어떻게 해야 하나요?

AudioSource 구성 요소를 사용하여 사운드 효과를 추가할 수 있습니다. 간단히 플레이어에 추가하고 FireShot 메서드에서 사운드를 재생합니다.

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

애니메이션의 경우 Animator 구성 요소를 사용하거나 FireShot 메서드 내에서 특정 GameObject 상태를 활성화/비활성화하여 애니메이션을 트리거할 수 있습니다.

발사체가 다른 물체와 상호 작용하도록 하려면 어떻게 해야 하나요?

발사체가 다른 객체와 상호 작용하도록 하려면 발사체에 RigidbodyCollider 구성 요소가 있는지 확인하세요. 그런 다음 OnCollisionEnter 또는 OnTriggerEnter을 사용하여 충돌 감지를 처리하는 스크립트를 작성할 수 있습니다.

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

결론

이 튜토리얼이 Unity에서 발사체를 만들고, 힘을 가하고, 기본 충돌 감지를 처리하여 발사하는 방법을 배우는 데 도움이 되었기를 바랍니다. 이 기술은 효과, 사운드 또는 고급 물리학을 추가하는 것과 같이 더 복잡한 상호 작용으로 확장될 수 있습니다.