반응형

안녕하세요 ~ RPG 게임이나 FPS 게임에 PVE를 보면 특정 플레이어나 적을 따라다니면서 공격하는 AI들이 존재합니다. 오늘은 그런 AI들처럼 특정 타겟을 따라다니는 오브젝트를 만들어 볼게요 !




먼저 직접 조작할 수 있는 Player 오브젝트 (초록색)과 플레이어를 따라 다니는 Enemy 오브젝트 (빨간색)를 생성했습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class PlayerController : MonoBehaviour {
 
    void Update () {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
 
        transform.Translate(new Vector3 (h, 0, v) * 5f * Time.deltaTime);
    }
}
 
cs

먼저 플레이어 오브젝트를 조작할 수 있는 스크립트를 작성합니다. 

많이들 보셨던 스크립트니까 설명은 생략할게요 ~

[설명은 http://solution94.tistory.com/9?category=672286 게시글을 참조하시면 됩니다 ~]


실행해보면 WASD 키로 이동이 가능한 상태입니다 !


다음은 적에게 추적 기능을 넣어줄 차례입니다. Nav Mesh Agent 라는 컴포넌트를 추가시켜줍니다.


window탭에 Navigation을 눌러서 창을 추가 시켜주세요.

그러면 이미지 우측에 보이시는 것 처럼 Navigation 창이 생겨납니다.

그리고 Bake 탭에서 Bake를 눌러주시면 되는데 여기서 중요한건


해당 오브젝트가 지나갈 수 있거나 지나갈 수 없거나 인식하지 않는 오브젝트들을 나눠주어야 합니다.

쉽게 다시 말하면 적 오브젝트가 걸어다닐 수 있는 길,  통과하지 못하는 장애물 등을 지정해줘야하는데 아주 간단합니다.

장애물, 길 오브젝트를 Static 시켜주면 됩니다. 

Nav Mesh Agent 컴포넌트 설정에 보시면 오를 수 있는 경사의 각도, 오브젝트의 크기 등을 설정할 수 있습니다.


다시 Navigation 탭에 Bake탭에서 Bake를 눌러주시면 보시는 것 처럼 이동할 수 있는 공간을 색상으로 표현해줍니다.

만약 장애물로 만들 오브젝트를 Static화 시키면 저런 형태로 됩니다. 가운데 있는 큐브의 지면은 파란색으로 색칠이 되어 있지 않은 상태 즉, Nav Mesh Agent 컴포넌트를 추가시킨 오브젝트 (적)이 지나갈 수 없게 되어 장애물이 되는 겁니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
using UnityEngine.AI;
 
public class EnemyAI : MonoBehaviour {
 
    NavMeshAgent nav;
    GameObject target;
 
    // Use this for initialization
    void Start () {
        nav = GetComponent<NavMeshAgent>();
        target = GameObject.Find("Player");
    }
    
    // Update is called once per frame
    void Update () {
        if (nav.destination != target.transform.position)
        {
            nav.SetDestination (target.transform.position);
        }
        else
        {
            nav.SetDestination (transform.position);
        }
    }
}
 
cs

그리고 Enemy 오브젝트에 추가시켜 줄 스크립트를 작성합니다. 혹여나 컴포넌트 선언 부에서 NavMeshAgent가 라이브러리에서 보이지 않는다면 using UnityEngine.AI; 이걸 추가 안하셨기 때문입니다 ! 추가하고 나시면 정상적으로 라이브러리에 나올꺼에요 ~


스크립트는 아주아주 간단합니다. nav 변수에 Nav Mesh Agent 컴포넌트를 넣어주고 target 게임 오브젝트 변수에 플레이어를 찾아내게 만들어줍니다.

그리고 '만약 타겟으로 설정된 오브젝트와 목적지가 같지 않다면 타겟의 위치로 계속 이동하고 그렇지 않다면 그자리에 서라' 라는 조건문을 적어주면 끝입니다.



그리고 실행시키면 플레이어를 따라다니는 적을 볼 수 있습니다 !




이렇게만 하셔도 플레이어를 따라다니는 적을 아주 쉽고 간단하게 구현할 수 있습니다 ~ 공포게임이나 RPG의 적이나 펫, FPS 등에도 이용할 수 있으니 다양하게 사용해보세요 ~

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기