이제 총이 필요하다

정확한 상황을 알기 위해 총을 넣어주자

마켓에 이 에셋이 무료인것으로 알고 있다.

이제 애니메이션과 무기가 준비되었다

애니메이션은 

https://www.mixamo.com/

 

Mixamo

 

www.mixamo.com

에서 잘 긁어 온

장착하는 것부터 만들어보자

 

이제 총을 장착하는 애니메이션을 넣어보자

이렇게 해서 여러가지 모션을 넣을 복사본을 만들어 준다

 

이제 BP_AICharacter_Base 에서 설정을 마저 해준다

 

이렇게 2개를 바꾸어 주었다

Animation class와 SKM 를 새로 복사한 것으로 적용 시

ABP_Alcharacter 에대한 정보도 상위와 같이 mesh를 이어준다

 

이제 총들 손에 소켓을 만들어 준다

그리고 총을 잡아본다

어느정도 회전을 시키고 다음으로 넘어가자

 

이제 총을 손에 넣는 과정을 넣어보자

간단히 등도 만들어 보자

이제 어느정도 구조는 잡혓고 함수를 만들어 총을 들어보자

 

애니메이션의 몬테이지를 만들어주자 (이레야 쓸수 있음)

애니메이션 중간에 Notifies 넣는 디테일은 나중에 하도록 하자

이제 엑션에 넣어주자

전에만든

BTT_EquipGun 테스크에 총 드는 함수가 있다 EquippingGun 을 더블클릭하여 들어가면 BP_AICharater_Base 가 나오고

여기에 Motage 를 넣어주는 것을 할 것이다.

임시 장착하기를 만들고

이것도 끝나면 실행 되게끔 call을 만들어 준다

이런식으로 무기를 안꼇을때 한번 실행 되게 만들어 주었다

애가 빙빙돈다

총이랑 충돌이 나는 것이다

충돌체를 없에주자 colision을 없에주는걸로 바꾸면 된다

 

총 빼는것은 숙제로 해보자

화이팅~

등뒤에 socket있으니 참고

블로그 이미지

Or71nH

,

이제 상태에 따른 동작을 하기위한 state 를 만들어 보자

이런걸 하나 만들어주고

이렇게 상태를 작성 할 수 있다.

상위 Add Enumerator 를 눌러 상태를 추가해 보자

 

나의경우는 

Idle, Warring, Attack, Interesting, Dead로 만들어 보겟다.

이제 blackboard에 enum을 추가하도록 하자

 

이제 AIC_AiCharacter_Base에 초기값을 세팅해주자

그리고 EnumKeyName에는 값을 "AiState" 로 세팅해 두어 blackboard 변수와 이름을 같게 해준다.

이렇게 5개의 속성별로 실행할 수 있는 뇌를 만들었다.

오른쪽에 속성에 여러가지 선택지가 있는데 원하는 것을 맞쳐야 아래 것을 실행하게 만들 수 있다.

이러한 상태를 확인하여 순외하는 것으로 좀더 뇌를 만들때 분별하여 개발이 가능하다.( 추후에 Behavior Tree 를 나누는 법을 알려 주겠다)

 

이렇게 만든 상태변화를 함수로 만들어 작동 하도록 하나씩 만들어 보자

일단 하나씩 생성해 주었

 

이제 하나씩 상태변화를 넣어 주어 보자

뭐 Idle은 일단 할 거 없어 보인다.

1. Attack부터 바꾸어 보자

타겟을 받아 맞쳐주어야 하기 때문에 blackboard에 값을 변환해 줄 것이다.

그러니 input 값으로 actor를 받아주고 blackboard에 써주도록 해보자

그다음은 뭐 behavior Tree에서 알아서 하는걸로

 

2. Warning 상태이다 (아 위에서 오타가 있엇다 warring일 warning으로 바꿔주길 바란)

Warning에는 위치값을 가지면 좋을 거 같다. 위험 표시인 만큼 피하기 위해 warning location을 주는 것으로 해보자

근데 BlackBoard도 넣어줄 곳이 없으니 같이 수정해준다

이제 넣어주도록 하자

언제나 같은 형식에 같은 이름을 해야한다는것을 주의하여야 한다.

 

3. Interesting 상태

애는 무언가 사물에 대하여 궁금증을 같는 것을 해보고 싶다.

그럼 object를 넣어서 해보자

스킵 했지만 애도 blackboard에서 하나 만들어 넣어주자

 

4. Dead 상태

이건 뭐 죽으면 되니 패스

 

이제 상태 변환을 할때 필요한 함수를 정의 하였고 다른곳에서 이 함수를 사용하여 상태변화를 할 수 있도록 넣어주도록 하자

 

 

실험을 하려 하는데 플레이어가 딱히 만들어 둔게 없다.

기본 플레이어를 복사하여 게임모드에 설정하도록 하자

이런식으로 나의 펠리어를 세팅해주고

worldsetting에 내 gamemode를 세팅해 주도록 하자

데충 된거 같다

함수 보면 머리까지 불러 왓을때 만든 함수들이 잘 있는것을 볼 수 있다.

테스트용으로 1일때는 어택 모드 2일때는 아이들 모드로 해둔다음 실행해보자

뭐였지 그 인풋이 안된다하면 

이부분을 추가해준다

 

이제 어택일때만 내위치로 오는 뇌를 심어보자

1과 2로 실험하면서 따라오고 안따라오는것을 볼 수 있다.

 

move target 이 캐릭터까지 되어있기 때문에 도착할 때까지 좀 기다려주자

잘되는것이 확인되면 다음으로 가도된다

 

블로그 이미지

Or71nH

,

데코레이터는 무언가 실행전에 조건을 확인하는데 사용된다.

이러한 데코레이터를 만들어 주었다.

 

함수를 보면 여러가지 속성들이 보인다

이제 여기서 preform condition check AI를 선택하여 데코레이터를 만들어 보자

이제 이 함수에 따라서 하위의 것을 실행할지 안할지 선택이된다.

케릭터에 가서 상태 Equip Gun bool하나를 만들어주고
캐릭터에 이렇한 상태를 만들어 주고 상태에 따른 데코레이션을 완성해보자

이제 총 쏘는 BeHaviorTree에 Decoration해보

이런식으로 이제 장착이 안되있으면 총을 쏘지 못하는 것을 볼 수 있다.

뭘봐?

이러한 부분을 한번만 실행하는 방법도 된다

 

일단 임시로 상태를 만들어 보자

 

이제 뇌를 이런식으로 바꾸면

 

한번은 실행하여 장착하고 쏘는 로직이 완성이된다. (지금은 딜레이도 없어서 너무 빠르긴 하다. Sequence를 추가하여 뭔가 wait를 주어 실험해 보아도 좋다. )

블로그 이미지

Or71nH

,

일단 새로운 Task파일을 만들어 blackboard의 값이 가져와 줄 것이다.

이전에 넣어둔 target변수를 가져오기 위해서다

이제 로직을 만들고 디테일은 다음과 같이 설정한다

 

이제 아래와 같이 설정하여 포커스를 주는 것을 볼 수 있다.

이제 이러한 것을 끝네고 

근데 안돌아간다? 음..

 

BP_AICharacter_base로 가보자

상위 돌아감 설정중 뭔가 눈에 띄는 게 보인다.

이 부분을 이렇게 바꿔주자 그러면 이제 포커스가 잘 맞쳐져 있다.

 

뭔가 이상하다 했는데 success를 안 켜줫다 이러한 부분은 ... 조심해야겠다

다시 확인하여 수정해 주었다.

상위와 같이 Focus clear도 만들어준다

 

이제 실험할 차례다.

이런식으로 해주면 이제 뭔가 그럴 사하게 움직이게 된다.

 

블로그 이미지

Or71nH

,

이번에는 뇌에 로직을 만들어 보자

이렇게 Task 를 만들어 보자

 

블루 프린트 같은 무언가가 만들어 졌고 이제 함수를 만들어보자

Ai는 이러한 식으로 어떠한 반응이 왔다는 Event 함수를 호출하는 것으로 시작이된다.

그리고 끝날때는 꼭 finish execute를 사용하여 언제 끝나는지 알려주어야 한다( 이 부분이 behavior tree에서 다음 노드로 넘어가게 해준다)

예네는 한쌍이다 (주의 저기 Success가 체크되있어야 끝낫다는것을 인지한다)

 

이제 간단한 애니메이션을 만들어 주고 실행하는 함수를 캐릭터에 넣어준다.

 

BP_AICharacter_Base Fire함수

다만들었으면 아까 만들던 함수에 잘 동작하게 넣어준다

 

이제 실행을 하면 뭔가이상할 것이다.

이러한 부분은 애니메이션이 끝나기전에 이미 끝낫다고 판단하고 다음으로 넘어가서 버벅이는 것이다

 

임시적으로 Wait를 주어 잠시 애니메이션이 끝날때 까지 기다리는 것을 해두자 (나중에 효과적으로 바꿀꺼임)

그럼 정상적으로 총 쏘는것을 볼 수 있다.

 

이제 위에 애니메이션을 좀 수정해 보자

밑에 Event Dispatchers를 새로 생성해주고 끌어 놓으면 여러가지 옵션이 생긴다.

그중 Call를 사용하여 정상적인 플레이를 만들어 줄 것이다.

대충 이런 모습이 된다.

 

이제 끝날때 호출되는 이벤트가 만들어 졌다.

원래있던 BTT_FireGun에 함수를 변경해준다.

이제 wait를 빼고 실행해 보면 보다 자연스러운 모습을 볼 수 있게 된다.

블로그 이미지

Or71nH

,