Unity 간단한 적 AI 제작
2024. 12. 23. 03:41ㆍUnity
Unity 간단한 적 AI 제작
게임 개발에서 적 AI는 플레이어의 도전 의식을 자극하고 몰입감을 더하는 중요한 요소입니다. 이번 포스팅에서는 Unity를 활용해 간단한 적 AI를 제작하는 방법을 소개합니다.
1. 적 AI의 기본 개념
적 AI는 게임 내에서 플레이어와 상호작용하는 캐릭터입니다.
- 추적(Chase): 플레이어를 따라감.
- 공격(Attack): 일정 거리 내에서 공격 행동.
- 순찰(Patrol): 특정 경로를 따라 이동.
2. 기본 설정
1) 프로젝트 환경 준비
- 새 3D Unity 프로젝트를 생성합니다.
- Plane을 생성하고 게임 씬의 바닥 역할을 하도록 설정합니다.
- 적 역할을 할 Cube 또는 3D 모델을 추가합니다.
- 플레이어 역할의 Capsule 또는 다른 오브젝트를 추가합니다.
2) NavMesh 활성화
- Window > AI > Navigation을 클릭하여 Navigation 창을 엽니다.
- Plane을 선택하고 Navigation 창에서 Bake를 클릭하여 NavMesh를 생성합니다.
- 적 오브젝트에 NavMesh Agent 컴포넌트를 추가합니다.
3. 스크립트로 적 AI 구현
1) 적 추적 기능 구현
플레이어를 따라가는 기본 추적 AI를 작성합니다.
using UnityEngine;
using UnityEngine.AI;
public class EnemyAI : MonoBehaviour
{
public Transform player; // 플레이어 위치
private NavMeshAgent agent;
void Start()
{
agent = GetComponent<NavMeshAgent>();
}
void Update()
{
if (player != null)
{
agent.SetDestination(player.position); // 플레이어를 목표로 설정
}
}
}
- NavMeshAgent가 플레이어의 위치를 따라 경로를 계산합니다.
2) 공격 기능 추가
플레이어와 적 사이의 거리를 계산하여 공격을 수행합니다.
public float attackRange = 2f; // 공격 범위
public float attackCooldown = 1f; // 공격 간격
private float lastAttackTime = 0;
void Update()
{
float distance = Vector3.Distance(transform.position, player.position);
if (distance <= attackRange && Time.time >= lastAttackTime + attackCooldown)
{
AttackPlayer();
lastAttackTime = Time.time;
}
else
{
agent.SetDestination(player.position);
}
}
void AttackPlayer()
{
Debug.Log("공격!");
// 여기에서 플레이어에게 데미지를 줄 수 있습니다.
}
4. 순찰(Patrol) 기능 구현
1) 순찰 지점 설정
여러 순찰 지점을 순서대로 이동하는 기능을 추가합니다.
public Transform[] patrolPoints; // 순찰 지점 배열
private int currentPatrolIndex = 0;
void Patrol()
{
if (patrolPoints.Length == 0) return;
agent.SetDestination(patrolPoints[currentPatrolIndex].position);
if (!agent.pathPending && agent.remainingDistance < 0.5f)
{
currentPatrolIndex = (currentPatrolIndex + 1) % patrolPoints.Length;
}
}
2) 순찰과 추적의 전환
플레이어가 감지되면 추적, 그렇지 않으면 순찰하도록 구현합니다.
public float detectionRange = 10f; // 플레이어 감지 범위
void Update()
{
float distance = Vector3.Distance(transform.position, player.position);
if (distance <= detectionRange)
{
agent.SetDestination(player.position); // 추적
}
else
{
Patrol(); // 순찰
}
}
5. 적 AI의 시각적 표현
1) 적 행동 상태에 따른 색상 변경
적 AI의 상태를 시각적으로 표시할 수 있습니다.
private Renderer enemyRenderer;
void Start()
{
enemyRenderer = GetComponent<Renderer>();
}
void Update()
{
float distance = Vector3.Distance(transform.position, player.position);
if (distance <= detectionRange)
{
enemyRenderer.material.color = Color.red; // 추적 중
}
else
{
enemyRenderer.material.color = Color.green; // 순찰 중
}
}
6. 최적화 팁
- Trigger 활용
- 플레이어와 적 사이의 충돌 영역을 Collider와 Trigger로 처리해 경로 계산을 최소화합니다.
- NavMesh Agent 설정
- Stopping Distance와 Speed를 상황에 맞게 조정해 부드러운 이동을 구현합니다.
- 오브젝트 풀링
- 많은 적을 생성할 경우 오브젝트 풀링 기법을 사용해 성능을 개선합니다.
7. 요약
이번 포스팅에서는 간단한 적 AI를 구현해 보았습니다.
- NavMesh를 활용한 경로 찾기.
- 추적, 공격, 순찰 기능 구현.
- 플레이어 감지 및 상태 전환.
'Unity' 카테고리의 다른 글
Unity 오브젝트 풀링(Object Pooling) 기법 (0) | 2024.12.23 |
---|---|
Unity 네트워크 기초 이론 (클라이언트-서버 구조) (0) | 2024.12.23 |
Unity NavMesh를 활용한 AI 경로 찾기 (0) | 2024.12.23 |
Unity 오디오 믹서 사용법 (0) | 2024.12.20 |
Unity 사운드 이펙트와 배경 음악 설정 (0) | 2024.12.20 |