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

탑다운 슈팅 게임 만들기 #3 – 적 캐릭터 및 기본 AI 구현

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

 

이번 포스팅에서는 적 캐릭터를 만들고, 플레이어를 인식하여 다가오는 간단한 AI 시스템을 구현해보겠습니다. 적들이 플레이어를 향해 이동하며, 플레이어가 적을 피해 다니거나 처치할 수 있도록 게임의 도전 요소를 추가할 예정입니다.


1. 적 캐릭터 오브젝트 생성

1.1 적 스프라이트 추가

  1. Hierarchy 창에서 2D Object > Sprite를 선택하여 새 오브젝트를 생성하고, 이름을 Enemy로 변경합니다.
  2. Sprite Renderer Sprite 항목에 적 캐릭터 스프라이트를 추가하거나 기본 도형(예: 사각형 또는 원)을 사용해도 좋습니다.
  3. 적 오브젝트의 크기를 Scale 0.5 정도로 조정하여 플레이어와 차별화합니다.

1.2 Rigidbody2D 및 Collider 추가

  1. Rigidbody2D 컴포넌트 추가:
    • Enemy 오브젝트에 Rigidbody2D를 추가하고, Body Type Kinematic으로 설정합니다.
    • 물리적 충돌에 영향을 받지 않도록 설정하여 자연스러운 이동을 구현할 수 있습니다.
  2. Collider 추가:
    • Enemy 오브젝트에 Circle Collider 2D를 추가합니다.
    • Is Trigger 옵션을 비활성화하여 플레이어와 충돌할 수 있도록 설정합니다.

2. 적 AI 스크립트 작성

이번에는 적이 플레이어를 따라 이동하도록 기본 AI를 추가해 보겠습니다.

2.1 EnemyMovement 스크립트 작성

  • Assets > Scripts 폴더에서 EnemyMovement.cs 스크립트를 생성하고, 다음과 같이 작성합니다:
using UnityEngine;

public class EnemyMovement : MonoBehaviour
{
    public float speed = 3f; // 적 이동 속도
    private Transform player; // 플레이어의 위치

    void Start()
    {
        // "Player" 태그를 가진 오브젝트를 찾음
        player = GameObject.FindGameObjectWithTag("Player").transform;
    }

    void Update()
    {
        // 플레이어가 존재할 경우 이동
        if (player != null)
        {
            Vector2 direction = (player.position - transform.position).normalized;
            transform.position = Vector2.MoveTowards(transform.position, player.position, speed * Time.deltaTime);
        }
    }
}

 

2.2 EnemyMovement 스크립트 추가

  1. Enemy 오브젝트에 EnemyMovement 스크립트를 추가합니다.
  2. speed 값을 적절히 조정하여 플레이어에게 접근하는 속도를 설정합니다.

3. 적 체력 및 플레이어 총알과의 상호작용

적을 처치할 수 있도록 간단한 체력 시스템을 추가하고, 총알과 충돌 시 사라지도록 구현하겠습니다.

3.1 EnemyHealth 스크립트 작성

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

public class EnemyHealth : MonoBehaviour
{
    public int health = 3; // 적의 체력

    public void TakeDamage(int damage)
    {
        health -= damage;

        // 체력이 0 이하일 때 적 오브젝트 제거
        if (health <= 0)
        {
            Die();
        }
    }

    void Die()
    {
        Destroy(gameObject);
    }
}

 

3.2 Bullet 스크립트 수정

  1. Bullet.cs 스크립트를 열고, 적과 충돌할 때 데미지를 주도록 다음 코드를 추가합니다:
void OnTriggerEnter2D(Collider2D hitInfo)
{
    EnemyHealth enemy = hitInfo.GetComponent<EnemyHealth>();
    if (enemy != null)
    {
        enemy.TakeDamage(1); // 적에게 1의 데미지
    }

    // 총알 제거
    Destroy(gameObject);
}

 

    2.    이 코드는 총알이 EnemyHealth 컴포넌트를 가진 오브젝트와 충돌할 때 TakeDamage() 메서드를 호출하여 체력을 감소시키는 역할을 합니다.

3.3 Enemy 오브젝트에 EnemyHealth 스크립트 추가

  • Enemy 오브젝트에 EnemyHealth 스크립트를 추가하고, health 값을 원하는 만큼 설정합니다(예: 3).

4. 테스트 및 조정

  1. Play 모드로 실행
    • 적이 플레이어를 향해 이동하고, 총알이 적과 충돌할 때 체력이 감소하는지 확인합니다.
    • 체력이 0이 되면 적 오브젝트가 사라져야 합니다.
  2. 난이도 조정
    • EnemyHealth에서 체력 값을 조정하여 각 적의 생존력을 변경할 수 있습니다.
    • EnemyMovement에서 speed 값을 조정하여 이동 속도를 설정할 수 있습니다.

5. 정리 및 다음 단계 예고

이번 포스팅에서는 적이 플레이어를 인식하고 따라오는 AI 기본적인 체력 시스템을 구현했습니다. 다음 포스팅에서는 적 스폰 시스템을 추가하여 적들이 일정한 간격으로 등장하도록 만들어, 게임이 더 긴장감 있게 진행되도록 만들어보겠습니다.

게임이 점점 더 완성에 가까워지고 있으니, 다음 포스팅도 기대해 주세요!

728x90