Unity에서 총을 쏘는 방법
이 튜토리얼에서는 Unity에서 총을 쏘는 방법을 단계별로 살펴보겠습니다. 앞으로 이동하고 다른 객체와 상호 작용하는 기본 발사체를 만드는 방법을 배우게 됩니다. 마지막에는 게임에서 총을 쏘는 것을 시뮬레이션하기 위해 GameObject에 첨부할 수 있는 작동하는 스크립트를 갖게 됩니다.
장면 설정
코딩에 들어가기 전에 먼저 투사체를 만들기 위한 장면을 설정해 보겠습니다. 시작하기 위한 단계는 다음과 같습니다.
- 새로운 Unity 프로젝트를 만들거나 기존 프로젝트를 엽니다.
- 장면에 총을 쏘는 플레이어나 객체 역할을 하는 3D 객체(예: 큐브나 구)를 만듭니다.
- 발사체 역할을 할 또 다른 3D 객체(예: 더 작은 구)를 만듭니다. 이것은 발사될 때 인스턴스화됩니다.
- "Player" 및 "ProjectilePrefab"와 같이 의미 있는 이름을 지정하여 개체를 정리합니다.
샷 스크립트 만들기
이제 기본 장면이 있으니 사격을 처리할 스크립트를 만들어 보겠습니다. 스크립트 이름을 Shot.cs
로 지정하고 플레이어 객체에 첨부합니다. 이 스크립트는 발사체를 생성하고 발사를 시뮬레이션하기 위해 전방 힘을 적용합니다.
스크립트를 만들려면 다음 단계를 따르세요.
- Unity 편집기에서 프로젝트 창을 마우스 오른쪽 버튼으로 클릭하고 Create > C# Script을 선택합니다. 스크립트 이름을
Shot.cs
로 지정합니다. Shot.cs
파일을 두 번 클릭하여 코드 편집기에서 엽니다.- 기본 코드를 다음 스크립트로 바꾸세요.
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
이제 스크립트가 준비되었으니, 이를 플레이어 객체에 할당하고 참조를 설정할 차례입니다.
- 씬에서 "Player" 게임 오브젝트를 선택합니다.
Shot.cs
스크립트를 "Player"로 끌어서 첨부합니다.- Inspector 창에서 스크립트의 필드를 볼 수 있습니다. 발사체 프리팹(예: 만든 작은 구)을
ProjectilePrefab
슬롯에 할당합니다. - 플레이어 객체 아래에 빈 GameObject를 만들고 이름을 "FirePoint"로 지정합니다. 플레이어 앞이나 투사체가 생성되기를 원하는 곳에 배치합니다.
- 스크립트의
FirePoint
필드로 "FirePoint" 객체를 끌어다 놓습니다.
샷 테스트
사격 기능을 테스트하려면 Unity에서 재생 버튼을 누르고 발사 버튼을 누릅니다(기본값은 왼쪽 마우스 버튼 또는 스페이스바). 버튼을 누르면 발사체가 생성되어 앞으로 이동하는 것을 볼 수 있습니다. 필요에 맞게 발사체의 속도나 모양을 조정할 수 있습니다.
자주 묻는 질문
발사된 후에는 어떻게 파괴하나요?
투사체가 영원히 존재하지 않도록 하려면 일정 시간 후에 투사체를 파괴할 수 있습니다. FireShot
메서드에서 투사체를 인스턴스화한 후 다음을 추가할 수 있습니다.
Destroy(projectile, 5f); // Destroys the projectile after 5 seconds
샷에 사운드 효과나 애니메이션을 추가하려면 어떻게 해야 하나요?
AudioSource
구성 요소를 사용하여 사운드 효과를 추가할 수 있습니다. 간단히 플레이어에 추가하고 FireShot
메서드에서 사운드를 재생합니다.
AudioSource audioSource = GetComponent();
audioSource.Play();
애니메이션의 경우 Animator
구성 요소를 사용하거나 FireShot
메서드 내에서 특정 GameObject 상태를 활성화/비활성화하여 애니메이션을 트리거할 수 있습니다.
발사체가 다른 물체와 상호 작용하도록 하려면 어떻게 해야 하나요?
발사체가 다른 객체와 상호 작용하도록 하려면 발사체에 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에서 발사체를 만들고, 힘을 가하고, 기본 충돌 감지를 처리하여 발사하는 방법을 배우는 데 도움이 되었기를 바랍니다. 이 기술은 효과, 사운드 또는 고급 물리학을 추가하는 것과 같이 더 복잡한 상호 작용으로 확장될 수 있습니다.