728x90
728x90
안녕하세요! 이번 포스팅에서는 적 캐릭터를 추가하고, 적이 플레이어를 따라오는 기능을 구현해보겠습니다. 이를 통해 유니티의 간단한 AI 시스템과 충돌 감지 기능을 배울 수 있습니다. 자, 시작해볼까요?
1. 적 캐릭터 오브젝트 추가하기
- 적 이미지 추가
- 사용할 적 캐릭터 이미지를 Assets 폴더에 추가합니다. 간단한 이미지나 정사각형 모양도 괜찮습니다.
- 적 오브젝트 생성
- Hierarchy 창에서 GameObject > 2D Object > Sprite를 선택해 새 스프라이트 오브젝트를 만들고, 이름을 Enemy로 지정합니다.
- Enemy 오브젝트의 Sprite Renderer에 적 캐릭터 이미지를 적용하고, 크기와 위치를 조정하여 씬에서 바닥에 놓이도록 설정합니다.
- Rigidbody2D와 Collider2D 추가
- Enemy 오브젝트에 Rigidbody2D를 추가하고, Gravity Scale 값을 0으로 설정해 적이 중력 영향을 받지 않도록 합니다.
- 또한, 적과 플레이어의 충돌을 감지하기 위해 Box Collider 2D를 추가합니다.
2. 적의 기본 이동 패턴 구현
적이 단순히 좌우로 이동하는 기본 패턴을 구현해보겠습니다.
- EnemyMovement 스크립트 작성
- Assets > Scripts 폴더에 EnemyMovement라는 C# 스크립트를 생성합니다. 이 스크립트를 Enemy 오브젝트에 추가합니다.
- 좌우 이동 코드 작성
- 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. 플레이어를 인식하고 추적하는 기능 추가하기
- 플레이어 인식 변수와 거리 설정
- 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. 테스트 및 조정
- 플레이 모드에서 추적 테스트
- Play 모드를 실행하고, 적이 플레이어와 가까워졌을 때 제대로 추적하는지 확인하세요.
- chaseRange와 moveSpeed 값을 조정하며 적의 반응 범위와 속도를 조절해 게임 밸런스를 맞춰보세요.
다음 포스팅에서는 플레이어와 적의 충돌 시 게임 내 처리와 기본 공격 기능을 추가하여 좀 더 완성도 있는 플레이 경험을 만들어 보겠습니다.
728x90
'유니티 > 플랫폼 게임 만들기' 카테고리의 다른 글
유니티로 슈퍼마리오 같은 게임 만들기 #6 - 캐릭터 애니메이션 추가하기 (0) | 2024.11.04 |
---|---|
유니티로 슈퍼마리오 같은 게임 만들기 #5 - 적과의 충돌 처리 및 기본 공격 기능 구현 (0) | 2024.10.30 |
유니티로 슈퍼마리오같은 게임 만들기 #3 - 플레이어 점프와 바닥 충돌 구현 (0) | 2024.10.28 |
유니티로 슈퍼마리오같은 게임 만들기 #2 – 플레이어 캐릭터 추가 및 이동 구현 (1) | 2024.10.26 |
유니티로 슈퍼마리오와 같은 게임 만들기 #1 (1) | 2024.10.26 |