본문 바로가기
유니티/플랫폼 게임 만들기

유니티로 슈퍼마리오 같은 게임 만들기 #4 – 적 캐릭터 추가와 플레이어 추적 기능 구현

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

 

안녕하세요! 이번 포스팅에서는 적 캐릭터를 추가하고, 적이 플레이어를 따라오는 기능을 구현해보겠습니다. 이를 통해 유니티의 간단한 AI 시스템 충돌 감지 기능을 배울 수 있습니다. 자, 시작해볼까요?

 

 

1. 적 캐릭터 오브젝트 추가하기

  1. 적 이미지 추가
    • 사용할 적 캐릭터 이미지를 Assets 폴더에 추가합니다. 간단한 이미지나 정사각형 모양도 괜찮습니다.
  2. 적 오브젝트 생성
    • Hierarchy 창에서 GameObject > 2D Object > Sprite를 선택해 새 스프라이트 오브젝트를 만들고, 이름을 Enemy로 지정합니다.
    • Enemy 오브젝트의 Sprite Renderer에 적 캐릭터 이미지를 적용하고, 크기와 위치를 조정하여 씬에서 바닥에 놓이도록 설정합니다.
  3. Rigidbody2D와 Collider2D 추가
    • Enemy 오브젝트에 Rigidbody2D를 추가하고, Gravity Scale 값을 0으로 설정해 적이 중력 영향을 받지 않도록 합니다.
    • 또한, 적과 플레이어의 충돌을 감지하기 위해 Box Collider 2D를 추가합니다.

2. 적의 기본 이동 패턴 구현

적이 단순히 좌우로 이동하는 기본 패턴을 구현해보겠습니다.

  1. EnemyMovement 스크립트 작성
    • Assets > Scripts 폴더에 EnemyMovement라는 C# 스크립트를 생성합니다. 이 스크립트를 Enemy 오브젝트에 추가합니다.
  2. 좌우 이동 코드 작성
    • EnemyMovement 스크립트를 열고 아래 코드를 추가합니다.
using UnityEngine;

public class EnemyMovement : MonoBehaviour
{
    public float moveSpeed = 2f;
    public Transform leftBoundary;
    public Transform rightBoundary;
    private bool movingRight = true;

    void Update()
    {
        if (movingRight)
        {
            transform.Translate(Vector2.right * moveSpeed * Time.deltaTime);
            if (transform.position.x >= rightBoundary.position.x)
            {
                movingRight = false;
            }
        }
        else
        {
            transform.Translate(Vector2.left * moveSpeed * Time.deltaTime);
            if (transform.position.x <= leftBoundary.position.x)
            {
                movingRight = true;
            }
        }
    }
}

 

 

                  moveSpeed는 적의 이동 속도를 조정합니다. 

    • leftBoundary rightBoundary는 적이 이동할 수 있는 좌우 경계를 나타내며, 이동 방향을 바꾸는 기준점으로 사용됩니다.

   3. 좌우 경계 오브젝트 설정

  • Hierarchy에서 leftBoundary와 rightBoundary라는 빈 오브젝트(Empty Object)를 적 캐릭터 양쪽에 배치합니다.
  • Enemy 오브젝트의 EnemyMovement 스크립트에서 leftBoundary와 rightBoundary 필드를 각각 해당 오브젝트로 설정합니다.

3. 플레이어를 인식하고 추적하는 기능 추가하기

  1. 플레이어 인식 변수와 거리 설정
    • EnemyMovement 스크립트에 아래 변수를 추가합니다.
public Transform player;
public float chaseRange = 5f;

 

 

  • player는 추적할 플레이어 오브젝트를 가리킵니다.
  • chaseRange는 적이 플레이어를 인식할 수 있는 범위입니다.

    2. 플레이어 추적 코드 작성

  • Update() 함수에서 플레이어와의 거리를 계산하고, 추적 조건을 추가합니다.
void Update()
{
    float distanceToPlayer = Vector2.Distance(transform.position, player.position);

    if (distanceToPlayer <= chaseRange)
    {
        // 플레이어가 가까이 있을 때 추적
        transform.position = Vector2.MoveTowards(transform.position, player.position, moveSpeed * Time.deltaTime);
    }
    else
    {
        // 기본 패턴으로 이동
        Patrol();
    }
}

void Patrol()
{
    if (movingRight)
    {
        transform.Translate(Vector2.right * moveSpeed * Time.deltaTime);
        if (transform.position.x >= rightBoundary.position.x)
        {
            movingRight = false;
        }
    }
    else
    {
        transform.Translate(Vector2.left * moveSpeed * Time.deltaTime);
        if (transform.position.x <= leftBoundary.position.x)
        {
            movingRight = true;
        }
    }
}

 

 

 

    • Vector2.Distance는 적과 플레이어의 거리를 계산하는 함수입니다.
    • 플레이어와의 거리가 chaseRange보다 작으면 플레이어를 추적하고, 그렇지 않으면 기본 이동 패턴인 Patrol()을 실행합니다.

 3. 플레이어 오브젝트 연결

  • Inspector에서 EnemyMovement 스크립트의 player 필드에 플레이어 오브젝트를 드래그하여 연결합니다.

4. 테스트 및 조정

  1. 플레이 모드에서 추적 테스트
    • Play 모드를 실행하고, 적이 플레이어와 가까워졌을 때 제대로 추적하는지 확인하세요.
    • chaseRange와 moveSpeed 값을 조정하며 적의 반응 범위와 속도를 조절해 게임 밸런스를 맞춰보세요.

 

 

다음 포스팅에서는 플레이어와 적의 충돌 시 게임 내 처리 기본 공격 기능을 추가하여 좀 더 완성도 있는 플레이 경험을 만들어 보겠습니다.

 

728x90