본문 바로가기
유니티/닷지 게임 만들기

Dodge Game 만들기 #2- 적 오브젝트 생성과 플레이어 추적

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

이전 포스팅에서는 플레이어 오브젝트를 생성하고 이동 기능을 구현했습니다. 이번에는 적 오브젝트를 추가하고, 이 적들이 플레이어를 추적하도록 설정해 보겠습니다. 적의 움직임은 게임 난이도와 재미를 좌우하는 중요한 요소입니다!


1. 적 오브젝트 생성

먼저, 플레이어를 추적할 적 오브젝트를 생성해 봅시다.

1.1 적 스프라이트 생성

  1. Hierarchy 창에서 Create > 2D Object > Sprite를 선택하여 새 스프라이트 오브젝트를 생성하고, 이름을 Enemy로 지정합니다.
  2. Inspector 창의 Sprite Renderer에서 원하는 스프라이트 이미지를 설정합니다. 기본적으로 원형이나 네모난 이미지로 설정해도 좋습니다.
  3. Enemy 오브젝트에 Tag를 추가합니다.
    • Inspector > Tag > Add Tag를 클릭하고 Enemy 태그를 추가한 뒤, Enemy 오브젝트에 적용합니다.

1.2 적 이동을 위한 Rigidbody2D 추가

  1. Enemy 오브젝트에 Rigidbody2D 컴포넌트를 추가합니다.
  2. Rigidbody2D 설정:
    • Body Type: Dynamic
    • Gravity Scale: 0 (2D 게임에서 중력은 필요하지 않음)
    • Constraints: Z축 회전을 잠급니다 (Freeze Rotation Z 체크).

2. 적의 플레이어 추적 기능 구현

2.1 EnemyMovement 스크립트 작성

  1. Assets > Scripts 폴더에서 EnemyMovement.cs라는 새 스크립트를 생성합니다.
  2. 스크립트를 열고 아래와 같이 작성합니다
using UnityEngine;

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

    void Start()
    {
        player = GameObject.FindGameObjectWithTag("Player").transform;
    }

    void Update()
    {
        if (player != null)
        {
            MoveTowardsPlayer();
        }
    }

    void MoveTowardsPlayer()
    {
        Vector3 direction = (player.position - transform.position).normalized;
        transform.position += direction * moveSpeed * Time.deltaTime;
    }
}

 

 

  3. 이 스크립트는 적이 플레이어를 향해 일정 속도로 이동하도록 만듭니다.

2.2 스크립트 적용

  1. Enemy 오브젝트에 EnemyMovement 스크립트를 추가합니다.
  2. Inspector 창에서 moveSpeed 값을 적절히 설정합니다 (예: 3).

3. 적의 복제와 스폰 시스템 구현

3.1 적 복제(프리팹) 생성

  1. Enemy 오브젝트를 선택한 상태로 Assets > Prefabs 폴더에 드래그하여 프리팹으로 저장합니다.
  2. Hierarchy에서 원본 Enemy 오브젝트를 삭제합니다.

3.2 적 스폰 스크립트 작성

  1. Assets > Scripts 폴더에서 EnemySpawner.cs라는 새 스크립트를 생성합니다.
  2. 스크립트를 열고 아래와 같이 작성합니다
using UnityEngine;

public class EnemySpawner : MonoBehaviour
{
    public GameObject enemyPrefab;  // 적 프리팹
    public float spawnInterval = 2f; // 적 생성 간격
    public float spawnRadius = 5f;  // 스폰 영역 반경

    void Start()
    {
        InvokeRepeating("SpawnEnemy", 1f, spawnInterval);
    }

    void SpawnEnemy()
    {
        Vector2 spawnPosition = Random.insideUnitCircle * spawnRadius;
        Instantiate(enemyPrefab, spawnPosition, Quaternion.identity);
    }
}

 

 

    3.이 스크립트는 적을 일정한 간격으로 무작위 위치에 생성합니다.

3.3 스크립트 적용

  1. Hierarchy 창에서 빈 오브젝트를 생성하고 이름을 EnemySpawner로 지정합니다.
  2. 이 오브젝트에 EnemySpawner 스크립트를 추가합니다.
  3. Inspector 창에서 enemyPrefab 필드에 Enemy 프리팹을 드래그하여 연결합니다.
  4. spawnRadius spawnInterval 값을 조정하여 적 생성 빈도를 설정합니다 (예: spawnRadius = 8, spawnInterval = 2).

4. 테스트와 조정

  1. Play 모드로 실행
    • 적이 무작위 위치에서 생성되고, 플레이어를 향해 추적하는지 확인합니다.
    • 플레이어 이동 속도와 적의 이동 속도를 비교해 난이도를 조정합니다.
  2. 조정 팁
    • spawnRadius를 늘리거나 줄여 적의 생성 범위를 조절합니다.
    • 적의 moveSpeed를 조정해 난이도를 적절히 설정합니다.

5. 다음 단계 예고

이번 포스팅에서는 적 생성과 플레이어 추적 기능을 구현했습니다. 적들이 계속 생성되며 플레이어를 추적하니 게임이 더욱 긴장감 넘치게 되었을 것입니다! 다음 포스팅에서는 충돌 처리와 플레이어 체력 시스템을 추가해, 적과의 상호작용을 더욱 풍부하게 만들어 보겠습니다.

게임 개발에 대한 열정이 점점 커지는 걸 느껴지나요? 다음 포스팅에서 더 재미있는 기능들을 함께 만들어 봅시다! 🚀

728x90