본문 바로가기

블루프린팅/10. AI적

[10.AI적] AI적 공격만들기

9장에서는 똑똑한 적을 만들기 위해 적의 시야 인식 트리거를 이용 추적하는 기능을 세팅했다. 이장에서는 데미지를 입히도록 해보겠다

  

공격 태스크 만들기

적이 플레이어에게 공격을 하는 BTTask_DoAttack라는 공격 태스크를 만들고, 적 비헤이비어 트리에서 만든 Attack_Player시퀀스를 확장한다. 태스크에는 두 개의 변수가 있다. - 하나는 데미지 줄 대상을 저장하고 다른 하나는 적용할 데미지의 양을 저장하는 것이다. 

다음과 같이 공격 태스크를 만든다

  1. 콘텐트브라우저에서 FirstPersonBP>Enemy 폴더에서 BT_EnemyBehavior에셋을 연다
  2. 툴바에서 새 태스크 버튼을 클릭하고 나타나는 드롭다운 메뉴에서 BTTask_BlueprintBase를선택한다. 이름을 BTTask_BlueprintBase_New를 BTTask_DoAttack로 바꾼고 같은 폴더에 저장하고 연다.
  3. 클래스디폴트 디테일패널에서 노드 이름 필드를 DoAttack로 변경한다.

  1. 내 블루프린트 패널에서 변수 카테고리의 + 버튼을 클릭한다. 디테일 패널에서 변수 이름을 TargetActorKey로 지정하고 타입을 블랙보드 키 선택툴로 변경한 다음 인스턴스 편집 기능 속성을 확인한다.

  1. 내 블루프린트패널에서 Damage 이라는 이름의 변수를 만들고 타입을 Float로 한다. 인스턴스 편집 가능 속성을 체크하고 컴파일후 기본값을 0.1로 세팅해서 공격시 플레이어의 체력을 10% 감소하게 한다

  1. 내 블루프린트패널의 함수 카테고리에 우클릭후 오버라이드 드롭다운을 클릭  Receive Execute를 선택하면 이벤트가 자동으로 추가된다.

  1. Receive Execute 이벤트에서 Target Actor가 유효한지 확인한 다음 피해를 입힐것이다. 이 이벤트는 블랙보드에서 Target Actor 레퍼런스를 가져오고 Apply Damage 함수를 호출하기 전에 유효한지 확인한다.
  2. 이번 단계에서 노드는 블랙보드에서 Target Actor 레퍼런스를 가져와 유효한지 확인한다. Receive Execute 이벤트의 흰색 핀에서 와이어를 끌어서 Is Valid 매크로 노드를 추가한다.

  1. 내 블루프린트 패널에서 TargetActorKey변수를 끌어 이벤트그래프에 놓고 Get을 선택한다.
  2. TargetActor 키 노드에서 와이어를 끌어서 Get Blackboard Value as Actor를 추가한다.
  3. Get Blackboard Value as Actor노드의 Return Value에서 액터로 와이어를 끌어서 IsValid 노드의 입력 오브젝트 핀에 연결한다.

  1. 이 단계에서 노드는 타깃 액터 레퍼런스를 사용해서 Apply Damage함수를 호출한다. Get Blackboard Value as Actor의 Return Value에서 다른 와이이를 끌어서 Apply Damage 노드를 추가한다. Is Valid 출력 핀을 Apply Damage 노드의 흰색 핀에 연결한다.

  1. Myblueprint Damage를 끌어 Get으로 놓고 Apply Damage노드의 Base Damage입력과 연결해준
  2. Apply Damage의 흰색 출력 핀에서 와이어를 끌어서 Finish Execute노드를 추가하고 Finish Execute 노드의 Success파라미터를 확인한다.

  1. 블루프린트 에디터를 컴파일, 저장및 닫는다.

이벤트그래프를 보면 이벤트가 발생되면 타겟액터참조가 맞다면 0.1의 데미지를 타겟액터참조에게 주고 로직을 마무리한다. 여기서 TargetActorKey는 비헤이비어트리에서 FirstPersonCharacter로 지정하는 변수로 이용된다.