Enemy 만들기
C++ 에너미를 만들어준다.
플레이어에서 만들어줬던 메시를 들고와서 에너미에서도 동일하게 넣어준다.
이제 블루프린트 에디터로 와서 C++로 만든 것을 블루프린트에서도 동일하게 만들어준다.
블루 프린트 창에 들어가면 메시가 잘 붙어 있는 모습을 확인해 볼수 있다.
FSM (Finite State Machine) 유한 상태 머신
Idle
Move
Attack
상태가 유한하게 변화하게 해주는 것이다.
대기 -> 이동-> 공격 -> 대기
상태를 만들 때 1단계 2단계 나누어 만드는게 편하다.
Any State : 어느 상황이든 피격이나 사망 처리를 하는
우리가 만들 것은 1단계를 만들어보겠다.
부모클래스의 최상위 클래스가 Actor Component이다.
트랜스 정보가 없다 위치 정보가 필요가 없다.
Scene Component에는 있다.
FSM을 만들기 위한 Actor Component를 만들어보겠다.
이름을 설정 한 다음 파일을 만들어 준다.
헤더에서 사용할 상태를 정의 해보겠다.
상태를 관리할 Enum을 만들어줌
UMETA ( DisplayName = " " ) 를 해주면 한글을 사용 할 수 있다.
상태변수를 만들어준다. 기본 변수를 설정해준다. Idle로 설정해 주었다.
예전에는 변수명을 멤버변수(m)에 변수명(ex_ n, f , b, d) 를 넣어줘서 만들어줬었다.
상태에는 if문보다는 switch 문을 쓰는 것이 휴먼 에러가 적다.
이제 에너미에서 사용 가능하도록 FSM을 붙여준다.
헤더에 만들어줬으면 생성자에서 생성을 해준다.
만들어줬으면 블루프린트 에디터에서 에너미에 FSM 이 잘 붙어 있나 확인을 해본다.
Component 에 붙어 있다면 잘 붙은 것이다.
이넘 로그 찍는 법
매크로로 만들어 두었던 화면에 로그를 찍을 수 있는 매크로를 들고온다.
에너미를 화면에 집어 넣고 출력이 잘 되는지 확인해 본다.
움직일 수 있도록 타겟이랑 움직일 대상을 가져온다
BeginPlay에
액터를 가져올 수 있도록 오토로 게임플레이스테틱을 사용하여 월드에서 플레이어 스테틱 클래스를 가져온다.
월드에 있는 플레이어를 타겟으로 두고 내 부모도 가져와서 움직임을 줄 수 있도록 한다.
움직임을 설정해주는 무브 함수에 가서 에너미가 플레이어 방향으로 이동할 수 있도록 설정해주고
노멀라이즈 설정까지 같이 해준다.
다시 에디터에 돌아가서 에너미가 잘 이동하는지 확인해 본다.
움직임이 잘 잘동하는 모습을 보면 플레이어를 바라보지 않는 상태로 이동하는데 이때 에너미 디테일창에 들어가서
Orient Rotation to Movement를 체크해준다. 체크를 하고 다시 플레이를 해보면
플레이어를 바라본 채로 다가오는 모습을 확인해 볼수 있다.
공격
이제 가까워지는 공격하는 것을 구현 해보겠다.
공격 범위를 설정해준다.
Move에서 타겟과의 거리를 체크해서 attackRange 안에 들어오면 공격 상태로 전환 하도록
거리를 체크하고 AttackRange보다 작아지면 State를 Attack으로 변환해준다.
블루프린트 에디터로 돌아가서 확인해보면 에너미가 무브상태에서 일정 거리에 들어오면 플레이를 공격하는 상태로 전환하는 모습을 볼 수 있다.
공격 시간을 준다.
일정 시간에 한번씩 공격을 하게 설정해준다.
일정 시간이 되면 어택이 되는 것을 확인해 볼 수 있다.
현재는 플레이어가 멀리 도망을 가더라도 계속 공격을 하기 때문에 다른 상태를 추가 해주도록 하자
멀어지면 움직이도록 일정 거리 반경에 들어오면 공격 하도록 설정을 한다.
에디터로 들어가서 잘 작동하나 확인해 본다.
제대로 설정 되었다면 멀어졌다면 움직이고 가까워지면 공격이 뜰 것이다.
공격을 받았을 때 사라지도록 함수를 만들어준다.
에디터로 가서 데미지를 주면 레인트레이스 데미지가 안 받는 것이 보여질 것이다.
BP_Enemy를 열어서 Capsule Collision의 Preset을 Custom으로 변경하고
Visibility를 Ignore에서 Block으로 변경한다.
죽음 처리를 위한 체력을 만들어주고 체력에 따라 상태가 바뀌도록 설정해준다.
데미지 딜레이 타임을 줘서 데미지를 받으면 데미지 스테이트 후 아이들 돌아가도록
죽으면 아래로 내려가도록 설정해주겠다. 그러기 위해서 속도를 만들어준다.
에너미가 아래로 내려갈 수 있도록 설정하고 2미터 이상 내려왔다면
에머니를 지우도록 설정해준다.
블루프린트 에디터로 돌아가면 에너미에게 데미지를 가하고 체력이 0이 되면
죽음 상태로 바뀌고 땅 아래로 내려하는 모습을 볼 수 있다.