본문 바로가기

카테고리 없음

[게임 개발자가 되어보자] 총알 제작하기 ft. 인생유니티

유니티에서 총알 만들기

1. 총알 이동 구현

1-1. 총알 GameObject 생성

  1. 총알 GameObject를 생성. (Cube를 사용하여 크기 조정)
  2. 총알 이동 스크립트를 생성하고 할당.
    • bullet.cs 파일을 생성하고, 총알 이동 기능을 구현.

1-2. Bullet.cs 스크립트

  • 목표: 총알을 위로 계속 이동시키기
  • 필요 속성: 이동 속도
public class Bullet: MonoBehaviour
{
    // 필요 속성: 이동 속도
    public float speed = 5;

    // 1. 방향 설정 (위쪽 방향)
    Vector3 dir = Vector3.up;

    // 2. 이동
    void Update()
    {
        // P = P0 + vt 방식으로 이동
        transform.position += dir * speed * Time.deltaTime;

        // 혹은 Translate 사용 가능
        // transform.Translate(dir * speed * Time.deltaTime);
    }
}
  • 문제점:
    1. 게임이 시작되면 바로 총알이 날아가는 문제
    2. 단 한 발만 발사되므로, 우리가 원하는 기능이 아님

2. 총알 발사 구현

총알을 발사하는 방법을 구현. 발사 버튼을 누를 때마다 총알이 생성되고 발사되는 기능을 구현할 예정.

2-1. PlayerFire.cs 스크립트

  • 목표: 사용자가 발사 버튼을 누르면 총알을 발사하도록 구현
  • 총알 공장(Prefab): 발사할 총알을 미리 만들어 두는 개념. 이를 통해 게임 도중 총알을 미리 준비하고 발사하는 작업을 최적화할 수 있다.
class PlayerFire : MonoBehaviour
{
    // 총알을 생산할 공장 (Prefab)
    public GameObject bulletFactory;

    // 총알이 나올 총구 위치
    public GameObject firePosition;
}

2-2. 총알 Prefab 설정

  1. Prefab이란?
    게임 오브젝트를 파일 에셋으로 변환하는 작업.

  2. 과정:

    1. Asset 폴더에 Prefab 폴더를 생성.
    2. Bullet 객체를 Prefab 폴더로 이동시켜 Prefab으로 변환.
      변환이 완료되면 Bullet 객체가 파란색으로 변한다.
    3. Prefab으로 변환된 Bullet은 언제든지 필요할 때마다 로드해서 사용할 수 있다.
    4. Hierarchy 뷰에 있는 Bullet 객체는 삭제해도 무방.
    5. Player 객체의 PlayerFire 컴포넌트 속성의 Bullet Factory에 Bullet Prefab을 할당.

2-3. 총구(Fire Position) 제작 및 할당

  1. 총구는 Player 객체와 함께 이동해야 하므로, Player 객체의 자식 객체로 설정해야 함.
  2. 총구는 위치와 회전 정보만 필요하기 때문에 다른 컴포넌트는 필요 없다.

과정:

  1. Player 객체를 선택하고 오른쪽 버튼을 클릭한 후, Create Empty를 선택하여 FirePosition을 생성.
  2. PlayerFire 스크립트의 FirePosition 속성에 생성한 FirePosition 객체를 할당.

2-4. 총알 발사 기능 구현

  1. 사용자가 발사 버튼을 누르면 총알을 발사할 수 있어야 한다.
  2. 총알 공장에서 총알을 생성하고, 발사 위치에서 발사하도록 구현.
void Update()
{
    // 1. 사용자가 발사 버튼을 누르면
    if (Input.GetButtonDown("Fire1"))
    {
        // 2. 총알 공장에서 총알을 생성
        GameObject bullet = Instantiate(bulletFactory);

        // 3. 생성된 총알을 FirePosition 위치로 이동시킴
        bullet.transform.position = firePosition.transform.position;
    }
}

이제 발사 버튼을 누를 때마다 총알을 발사할수 있다.