본문 바로가기
유니티/탑 다운 슈팅 게임 만들기

탑다운 슈팅 게임 만들기 #2 – 플레이어 슈팅 메커니즘 구현하기

by 찡사랑방 2024. 11. 9.
728x90
728x90

이번 포스팅에서는 플레이어의 슈팅 메커니즘을 구현해보겠습니다. 플레이어가 마우스를 클릭할 때마다 총알이 발사되도록 설정하고, 적을 타격할 수 있는 기본 공격을 만드는 것이 목표입니다. 지난 포스팅에서 만들었던 Player 오브젝트 발사 기능을 추가하여, 플레이어가 마우스 방향을 바라보면서 총알을 발사하도록 만들어 봅시다.


1. 총알 오브젝트 생성

1.1 총알 스프라이트 추가

  1. 프로젝트 내에 새로운 총알 오브젝트를 만들어줍니다.
    • Hierarchy 창에서 2D Object > Sprite를 선택하여 총알 오브젝트를 생성하고, 이름을 Bullet로 변경합니다.
    • Sprite Renderer의 스프라이트로 원하는 총알 이미지를 할당하거나 기본 도형(예: 작은 Circle)을 사용해도 좋습니다.
  2. Bullet 오브젝트의 설정:
    • Scale 0.1 정도로 조정하여 크기를 줄입니다.
    • Tag Bullet로 설정해줍니다.

1.2 Rigidbody2D 및 Collider 추가

  1. Rigidbody2D 컴포넌트 추가:
    • Bullet 오브젝트에 Rigidbody2D 컴포넌트를 추가하고, Body Type Kinematic으로 설정합니다. 이렇게 하면 총알이 물리적으로 충돌할 때 영향을 받지 않습니다.
  2. Circle Collider 2D 추가:
    • Bullet에 Circle Collider 2D를 추가하고, Collider의 Is Trigger 옵션을 활성화합니다. 이는 총알이 적과 충돌할 때 이벤트를 처리할 수 있게 해줍니다.

2. 총알 발사 스크립트 구현

이제 플레이어가 총알을 발사할 수 있도록 스크립트를 추가해 보겠습니다.

2.1 Bullet 스크립트 작성

  • Assets > Scripts 폴더에서 Bullet.cs 스크립트를 생성하고, 아래와 같이 작성합니다:
  • csharp
using UnityEngine;

public class Bullet : MonoBehaviour
{
    public float speed = 20f; // 총알 속도
    public Rigidbody2D rb;

    void Start()
    {
        rb.velocity = transform.up * speed; // 총알을 앞으로 이동
    }

    void OnTriggerEnter2D(Collider2D hitInfo)
    {
        // 충돌 시 총알 제거 (적 처리는 나중에 구현 예정)
        Destroy(gameObject);
    }
}

 

  1. Bullet 오브젝트에 Bullet 스크립트를 추가합니다.
  2. Rigidbody2D 컴포넌트를 rb 필드에 연결합니다.

2.2 플레이어가 총알 발사하도록 설정

이제 플레이어의 마우스 클릭 시 총알을 발사하는 기능을 구현하겠습니다.

  1. PlayerShooting 스크립트 작성
    • PlayerShooting.cs 스크립트를 생성하고, 다음과 같이 작성합니다:
using UnityEngine;

public class PlayerShooting : MonoBehaviour
{
    public Transform firePoint; // 총알이 발사될 위치
    public GameObject bulletPrefab; // 총알 프리팹

    void Update()
    {
        // 왼쪽 마우스 버튼 클릭 시 발사
        if (Input.GetButtonDown("Fire1"))
        {
            Shoot();
        }
    }

    void Shoot()
    {
        Instantiate(bulletPrefab, firePoint.position, firePoint.rotation);
    }
}

 

 

  1. firePoint 위치 설정
    • Player 오브젝트의 자식 오브젝트로 firePoint 위치를 생성합니다.
    • Hierarchy 창에서 Player를 선택하고, Right-click > Create Empty로 빈 오브젝트를 추가하여 firePoint로 이름을 지정합니다.
    • firePoint를 플레이어의 앞쪽에 위치하도록 조정합니다.
  2. Player 오브젝트에 스크립트 추가
    • PlayerShooting 스크립트를 Player 오브젝트에 추가합니다.
    • firePoint bulletPrefab 필드에 각각 firePoint 오브젝트와 Bullet 프리팹을 연결합니다.

3. 총알 프리팹으로 저장하기

  1. Bullet 오브젝트를 Prefabs 폴더로 드래그하여 프리팹으로 저장한 뒤, Hierarchy에서 삭제합니다.
  2. 이렇게 하면 나중에 Instantiate 함수로 총알을 생성할 수 있습니다.

4. 테스트 및 조정

  1. Play 모드로 게임 실행:
    • 마우스 왼쪽 버튼을 클릭하여 플레이어가 총알을 발사할 수 있는지 확인합니다.
    • 총알이 설정된 방향과 속도로 이동하고, 화면 밖으로 나가면 사라지는지 확인합니다.
  2. 속도와 발사 빈도 조정:
    • Bullet 스크립트에서 speed 값을 조정하여 속도를 변경해 보세요.
    • PlayerShooting 스크립트에서 Shoot() 함수에 쿨타임을 추가해 발사 빈도를 조정할 수도 있습니다.

5. 정리 및 다음 단계 예고

이번 포스팅에서는 플레이어 슈팅 메커니즘을 구현하여, 플레이어가 마우스를 클릭할 때마다 총알이 발사되도록 만들었습니다. 다음 포스팅에서는 적 캐릭터와 기본 AI를 추가하여, 플레이어와 상호작용하는 적들을 생성해보겠습니다.

게임의 재미가 점점 더해질 테니, 계속 함께 만들어가 봅시다!

728x90