1. 서론
본 강좌에서는 유니티(Unity) 게임 엔진을 이용하여 간단한 총알을 제작하는 방법을 다루겠습니다. 게임 개발에 있어서 총알은 매우 중요한 요소로, 총알의 작동 방식, 발사 메커니즘, 충돌 처리 등을 다루게 될 것입니다. 이 강좌를 통해 유니티의 기본적인 개념과 C# 스크립팅을 이해하고 실습할 수 있습니다.
2. 필요한 도구와 환경 설정
2.1. 유니티 설치하기
유니티를 설치하려면 유니티 공식 웹사이트에 방문하여 최신 버전의 유니티 허브(Unity Hub)를 다운로드 받아 설치합니다. 유니티 허브를 실행한 후, 원하는 유니티 버전을 다운로드하고 설치하시면 됩니다.
2.2. 새로운 프로젝트 생성하기
유니티 허브에서 “New” 버튼을 클릭하여 새로운 3D 프로젝트를 생성합니다. 프로젝트의 이름을 “BulletShooter”로 설정하고 생성합니다.
3. 기본적인 총알 오브젝트 생성
3.1. 3D 오브젝트 추가하기
프로젝트 창에서 마우스 오른쪽 버튼을 클릭하고 3D Object > Sphere
를 선택합니다. 생성된 구체 오브젝트는 총알의 형태가 될 것입니다. 오브젝트를 선택한 상태에서, 인스펙터 창에서 Scale 값을 (0.2, 0.2, 0.2)
로 설정하여 크기를 조절합니다.
3.2. 총알 재질 만들기
프로젝트 창에서 마우스 오른쪽 버튼을 클릭하고 Materials > New Material
을 선택합니다. 새 재질의 이름을 “BulletMaterial”로 설정하고, 색상을 선택한 후 구체에 드래그 앤 드롭하여 재질을 적용합니다.
3.3. 총알 오브젝트에 Rigidbody 컴포넌트 추가하기
총알이 물리적으로 움직이도록 하기 위해 프로퍼티 창에서 Add Component
를 클릭한 후 Rigidbody
를 검색하여 추가합니다. 이 컴포넌트는 중력과 물리적 상호작용을 적용할 수 있게 해줍니다.
4. 총알 발사 스크립트 작성하기
4.1. 스크립트 생성하기
프로젝트 창에서 Scripts
폴더를 생성한 후, 그 안에 Bullet.cs
라는 스크립트를 생성합니다. 이 스크립트는 총알의 행동을 정의하게 됩니다.
4.2. 스크립트 코드 작성하기
Bullet.cs
파일을 열고 다음과 같은 코드를 입력합니다:
using UnityEngine;
public class Bullet : MonoBehaviour
{
public float speed = 20f;
public float lifetime = 2f;
void Start()
{
Rigidbody rb = GetComponent();
rb.velocity = transform.forward * speed;
Destroy(gameObject, lifetime);
}
}
위 코드는 총알이 발사할 때의 속도와 생명주기를 설정합니다. Start
메서드는 스크립트가 활성화될 때 호출되며, Rigidbody 컴포넌트를 통해 총알의 속도를 설정하고, 일정 시간이 지나면 총알이 삭제됩니다.
5. 플레이어와 총알 발사 시스템 만들기
5.1. 플레이어 오브젝트 생성하기
총알을 발사할 플레이어를 추가하기 위해 3D Object > Cube
를 선택하여 플레이어 오브젝트를 생성합니다. 플레이어의 크기와 위치를 조정하여 적절한 형태로 만듭니다.
5.2. 플레이어 스크립트 작성하기
플레이어가 총알을 발사하는 기능을 추가하기 위해 PlayerController.cs
라는 스크립트를 작성합니다. 이 스크립트의 내용은 다음과 같습니다:
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public GameObject bulletPrefab;
public Transform bulletSpawnPoint;
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Fire();
}
}
void Fire()
{
Instantiate(bulletPrefab, bulletSpawnPoint.position, bulletSpawnPoint.rotation);
}
}
위 스크립트는 플레이어가 “Fire1” 입력(일반적으로 왼쪽 마우스 버튼)을 눌렀을 때 Fire
메서드를 호출하여 총알을 생성합니다.
6. 스폰 포인트 설정하기
총알이 발사되는 위치를 설정하기 위해 플레이어 오브젝트에 빈 게임 오브젝트를 생성합니다. 이 빈 게임 오브젝트를 플레이어 오브젝트 자식으로 두고, 이름을 “BulletSpawnPoint”로 설정합니다. 이 오브젝트의 위치는 플레이어의 총구와 일치하도록 조정합니다.
6.1. 스크립트 연결하기
플레이어 오브젝트를 선택하고 PlayerController
스크립트를 인스펙터에서 드래그하여 추가합니다. 그리고 Bullet Prefab
필드에 총알 프리팹을 연결하고 Bullet Spawn Point
에 방금 생성한 빈 게임 오브젝트를 드래그하여 연결합니다.
7. 최종 점검 및 테스트
7.1. 총알 프리팹 만들기
총알 오브젝트를 프리팹으로 만들기 위해 프로젝트 창에서 총알 오브젝트를 드래그하여 Prefabs
폴더에 저장합니다. 원본 오브젝트는 삭제할 수 있습니다.
7.2. 게임 실행하기
게임을 실행하여 플레이어가 총알을 발사하는지 테스트합니다. 왼쪽 마우스 버튼을 클릭하면 총알이 생성되고 발사되는 것을 확인할 수 있습니다.
8. 추가 기능 구현하기
8.1. 충돌 처리 구현하기
총알이 다른 오브젝트와 충돌했을 때의 처리를 위해 Bullet.cs
스크립트에 OnTriggerEnter 메서드를 추가하면 됩니다:
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Enemy"))
{
Destroy(other.gameObject);
Destroy(gameObject);
}
}
이 코드는 총알이 적과 충돌할 경우 적을 제거하고 총알을 삭제합니다.
8.2. 세부 설정과 추가 요소
게임을 더욱 완성도 있게 만들기 위해 총알의 궤적, 발사 애니메이션, 사운드 효과 등을 추가할 수 있습니다. 이와 관련된 다양한 유니티 기능을 알아보며 프로젝트를 확장해 보세요.
9. 결론
이번 강좌에서는 유니티를 사용하여 기본 총알을 구현하는 방법을 배웠습니다. 게임 개발에 있어 기초를 다지는 중요한 과정이었으며, 이후 더 복잡한 기능을 추가해 나가며 여러분의 게임을 발전시키길 바랍니다. 더 많은 실험과 학습을 통해 다양한 게임 요소를 만들어 보세요.