최종프로젝트에서 내가 맡은 역할은 바로 플레이어를 공격하고 추격하는 몬스터를 구현하는 일이다.
오늘은 몬스터 데이터를 만들고 플레이어를 따라다니는 것까지 구현해보았다.
1. MonsterData 클래스
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "Monster", menuName = "New Monster")]
public class MonsterData : ScriptableObject
{
[Header("Info")]
public int monsterHP;
public int monsterPower;
public int monsterWalkSpeed;
public int monsterRunSpeed;
public GameObject dropItem;
}
몬스터의 데이터를 저장하는 스크립트로 ScriptableObject를 사용하여 만들었다.
필드는 아래와 같이 이루어져있다.
- monsterHP: 몬스터의 체력
- monsterPower: 몬스터 공격력
- monsterWalkSpeed: 몬스터의 걷는 속도
- monsterRunSpeed: 몬스터의 달리는 속도
- dropItem: 몬스터가 죽었을 때 드롭할 아이템 (프리팹)
에디터에서 Assets -> Create -> New Monster를 선택하면 몬스터 데이터를 생성할 수 있다.
2. MonsterController 클래스
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
enum MonsterState
{
Idle,
Wandering,
Attacking
}
public class MonsterController : MonoBehaviour
{
[SerializeField] private MonsterData monsterData;
public NavMeshAgent nav;
public Transform target;
void Start()
{
if (monsterData == null)
return;
nav = GetComponent<NavMeshAgent>();
nav.speed = monsterData.monsterRunSpeed;
}
private void Update()
{
nav.SetDestination(target.position);
}
}
몬스터의 움직임과 행동을 구현하기 위해 생성한 스크립트이다.
enum MonsterState
{
Idle,
Wandering,
Attacking
}
enum으로 몬스터의 상태를 정의하며 현재는 코드에서 상태별 로직은 구현되지 않았지만 확장할 수 있도록 구조만 잡아두었다.
public class MonsterController : MonoBehaviour
{
[SerializeField] private MonsterData monsterData;
public NavMeshAgent nav;
public Transform target;
void Start()
{
if (monsterData == null)
return;
nav = GetComponent<NavMeshAgent>();
nav.speed = monsterData.monsterRunSpeed;
}
private void Update()
{
nav.SetDestination(target.position);
}
}
몬스터의 행동을 제어하며 NavMeshAgent의 SetDestination을 사용하여 목표 위치(target)로 몬스터를 움직이게 한다.
- monsterData: 연결된 MonsterData ScriptableObject (몬스터 능력치 정보)
- nav: NavMeshAgent 컴포넌트 (AI 경로 이동을 담당)
- target: 몬스터가 따라갈 대상 (예: 플레이어)
3. 실행해보기
영상처럼 몬스터가 목표를 잘 따라다니는 것을 볼 수 있다.
'Unity' 카테고리의 다른 글
[TIL] Unity 최종프로젝트 몬스터 AI 구현하기_ 3일차 (1) | 2025.04.10 |
---|---|
[TIL] Unity 최종프로젝트 몬스터 AI 구현하기(FSM)_ 2일차 (2) | 2025.04.09 |
[TIL] 게임 개발 일정 관리의 중요성 (0) | 2025.04.07 |
[TIL] Unity 3D 모델 생성과 3D 렌더링 최적화 (2) | 2025.04.04 |
[TIL] 객체지향 설계원칙 (설계 5대 원칙) (1) | 2025.04.03 |