본문 바로가기

블루프린팅/10. AI적

(14)          글쓰기    
[10.AI적업그레이드] 마지막 조정및 테스트 0. 레벨의 Patrol Point 1, 2를 제거한다. 무작위 배회지점을 사용하기 때문에 더 이상 필요없다. 1. BP_EnemyCharacter블루프린트를 연다. 2 이벤트그래프에서 Patrol포인트를 지정했던 EventBeginPlay및 연결된 모든 노드를 삭제한다. 3. 블루프린트 에디터를 컴파일, 저장및 닫는다. 4. FirstPersonCharacter블루프린트를 연다. 5. 내 블루프린트 패널에서 TargetGoal변수를 선택하고 기본값을 20으로 변경한다. 6. 컴파일 저장하고 닫다. 7. 배회하는 적을 테스트하기 위해서는 시뮬레이션 옵션을 사용하는 것이 좋다 메뉴 플레이 버튼 옆에있는 세개 의 점을 클릭하여 접근한다. 다시 돌아갈때는 Selected Viewport로 돌아가면 된다. 8...
[10.AI적업그레이드] 비헤이비어 트리에 배회 추가 MoveToPatrol 시퀀스를 Wander시퀀스로 변환한다. 새로운 Wander sequnce는 비헤이비어 트리에서 다음 노드에 의해 표현된다. 1. BT_EnemyBehavior에셋을 열고 오른쪽 MoveToPatrol 노드를 선택해 디테일에서 Node Name을 MoveToPatrol에서 Wander로 변경한다. 2. MoveTo를 선택하고 Blackboard Key 풀다운메뉴에서 WanderPoint를 선택한다. 3. Wander에서 와이어를 끌어 BTTask FindWander Point를 추가한다. 4. 디테일 패널에서 Wander key를 WanderPoint로 세팅한다. 노드이름을 GetNextWanderPoint 로변경한다. 5. 저장하고 닫는다
[10.AI적업그레이드] 적의 배회(Wamdering) 행동 만들기 이전 Patrol1, Patrol2 두 지점을 지정하여 적이 배회하도록 만들었으나 이번에는 무작위 배회로 대체할 것이다. 커스텀 태스크으로 배회 지점 식별 배회할 다음 지점을 저장할 BB_EnemyBlackboard에 키를 만든다. 기존의 PatrolPoint 키와는 다르게 목적지는 게임내 Actor가 아닌 벡터좌표로 표시된다. 그 다음 적이 배회해야 하는 곳을 결정하는 태스크를 만든다. 1. BT_EnemyBehavior트리를 연다. 2. Blackboard탭을 클릭한다. 3. 새키 + 버튼을 클릭하고 벡터를 키타입으로 설정후 이름을 WanderPoint로 변경한다. 4. 저장후, BehaviorTree로 돌아간다. 5. 툴바에서 새태스크를 클릭하고 BTTask_BlueprintBase를 선택하고 저장..
[10.AI적업그레이드] 더 많은 적을 스폰하기 적을 파괴하게 했으니 적을 생기게도 해야한다. BP_EnemySpawner 블루프린트 만들기 우리는 레벨의 임의의 위치에 적을 스폰하는 블루프린트를 만들 것이다. 1. 콘텐트드로워를 열고 Add+를 눌러 블루프린트클래스>Actor를 클릭후 BP_EnemySpawner로 이름을 변경하고 더블클릭해서 에디터를 연다. 2. 변수+를 클릭해 다음과 같이 만든다. Detail InstanceEditable을 체크해준다. 아래 그림을 보면 타입옆에 눈을 떠 있다. InstanceEditable이라는 아이콘이다. SpawnTime : 스폰 사이의 시간, Float , 디폴트값 10.0 MaxEnemies : 적의 최대 스폰 수, Integer, 디폴트값 5 3. 내 블루프린트 마크로+를 클릭한후 이름을 SpawnEn..
[10.AI적업그레이드] 적을 파괴할 수 있게 하기 이전 장에서 Cylinder를 파괴할 수 있게 만든적이 있다 이와 비슷하게 적을 파괴할 수 있게 만들어 보겠다. 1. BP_EnemyCharacter블루프린트를 연다. 2. 변수+를 클릭해 이름을 EnemyHealth로 지정한다. 타입은 인테저 컴파일후 기본값은 3이다. 3. 이벤트그래프 빈공간 우클릭후 Hit 이벤트를 노드를 추가한다. Other출력핀에서 와이어를 끌어 FirstPersonProjectile형변환을 추가한다. 4. FirstPersonProjectile형변환 출력핀에서 Branch를 추가한다. Condition에서 큼(>)노드를 추가한다. 5. >노드의 상단핀에서 방금만든 GET EnemyHealth를 추가하고 아래입력값을 1로 한다 6. Branch출력핀에서 Decrement Int노..
[10.AI적업그레이드] 노이즈 이벤트 디버깅 열심히 노이즈 이벤트및 해석 처리를 했는데 잘 안된다. 뭔가 디버깅을 해봤다. 실행시 블루프린트에디터에서 움직임을 볼 수 있는건 BT_EnemyBehavior 에서이다. 일단 열고 영상감지와 청각감지를 분리하기 위해 Root밑 Selector와 영상감지쪽 Can see Player?를 ALT+클릭으로 끊었다. BT_EnemyBehavior 가 보이는 상태에서 플레이 해보면 MoveToPatrol Sequence가 끝나면 HasSound?로 오는데 아무리 총을쏴도 HasSound? 밑으로 내려 가지를 않는다. HasSound?밑으로 내려가려면 BlackBoard key중 HasSound가 True로 되어 있어야 한다. BlackBoard key중 HasSound가 True로 하는 기능은 BT_EnemyCo..
[10.AI적업그레이드] 플레이어의 행동에 노이즈 추가 EnemyController의 폰감지 컴포넌트는 총소리같은 기존 음향소리를 듣는게 아니라 폰노이즈이미터에서 생성한 노이즈만 들을 수 있다. 플레이어의 스프린트와 슈팅에 폰노이즈이미터 컴포넌트를 이용해 감지가능한 노이즈를 생성하겠다. *기존 ThirdPersonCharacter템플릿을 포기하고 처음 하였던 FirstPersonCharacter템플릿의 프로젝트로 진행하고 있습니다. 불편을 끼쳐드려 죄송합니다. 진행하다 보니 총기 발사및 UI등 기존의 변수및 기능들이 다 필요해져서 입니다. 혹시 새09.적인공지능에서 새로 프로젝트를 만드신 분은 Contents>ThirdPersonCharater및 Character 폴더를 카피해서 같은 Contents폴더에 복사하면 됩니다. 이후 ThirdPersonChara..
[10.AI적업그레이드] 노이즈 이벤트 데이터 해석및 저장 BP_EnemyController에 추가한 폰 감지 컴포넌트는 적 AI에서 시각및 청각 감지를 모두 구축할 수 있는 기반을 제공한다. 폰 감지 컴포넌트가 감지할 때마다 활성화되는 노이즈 청취시 이벤트를 사용한다. 다음 단계에서 적들이 가가운 거리에서만 노이즈를 감지하도록 할 것이다. PawnSensing에서 On Hear Noise는 OnSeePawn이 작동하지 않을 경우에만 동작되도록 되어 있다. BP_EnemyController를 연다 1. 컴포넌트 패널에서 폰감지 컴포넌트를 선택한다. 디테일 패널에서 이벤트 카테고리를 살펴보고 노이즈 청취시 이벤트의 녹색 버튼을 클릭해서 이벤트그래프에 추가한다. 2. 노이즈 청취시 에는 사운드위치와 적 사이의 거리가 HearingDistance의 값보다 작은 경우 ..
[10.AI적] 블랙보드를 업데이트하기 위한 변수 및 매크로 만들기 BP_EnemyController 블루프린트에 변수와 매크로를 만들어 사운드와 관련된 BB_EnemyBlackboard의 키를 업데이트 한다. 1. Enemy폴더의 BP_EnemyController 블루프린트를 연다. 2. 변수 + 버튼을 클릭해 타입을 플로트 이름을 HearingDistance로 한다. 컴파일후 디폴트 16000로 세팅 3. 변수 + 버튼을 클릭히 타입을 네임, 이름을 HasHeardSoundKey로 지정 컴파일후 기본값 HasHeardSound로 세팅 4. LocationOfSoundKey라는 네임 변수를 만든다 컴푸알후 기본값으 LocationOfSound로 세팅 5. 매크로+를 클릭 이름을 UpdateSoundBB로 변경 6. 매크로 디테일 패널에서 입력으로 실행 타입의 In과 L..
[10.AI적업그레이드] 적 소리 분석 기능 추가 현재 적은 시각적 트리거를 이용 추적한다. 이제 청각적 트리거를 이용 보이지 않는 적도 추격가능하게 한다. 청각적 능력을 추가하기 위해 폰감지 컴포넌트를 추가할 것이다. 이부분은 열심히 해봤는데 잘안되었다. ㅠㅠ 추후 디버깅해보도록 하겠습니다. 비헤이비어 트리에 청력 추가 적캐릭터가 청각적 능력을 사용하게 하려면 블랙보드 안에 2개의 키를 만들어야 한다. HasHeardSound : Bool, 소리가 났는지 여부 LocationOfSound : Vector, 소리가 난 위치 1. 콘텐트드로워 Enemy폴더의 BT_EnemyBehavior에셋을 두 번 클릭해서 비헤이비어 트리 에디터를 연다. 2. 블랙보드 탭을 클릭한다. 3, 새키 버튼을 클릭하고 Bool타입을 선택한다. 이름은 HasHeardSound로..
[10.AI적업그레이드] 체력미터 업그레이드 - Damage처리 체력 미터 막대는 FirstPersonCharacter 블루프린트의 PlayerHealth 변수에 연결된다. AnyDamage이벤트를 사용해서 PlayerHealth 변수의 값을 줄인다. 1. 콘텐트브라우저에서 FirstPersonCharacter 블루프린트를 연다 2. 이벤트 그래프의 빈공간에 우클릭하고 AnyDamage 이벤트를 추가한다. 출력핀에서 와이어를 끌어 SET Player Health노드를 추가한다. 3. Player Health입력핀에서 와이어를 끌어 MAX(Float)를 추가한다. 기본값 0보다 작아지지 않게 한다. 4. MAX(Float)위쪽 입력 핀을 끌어 빼기 노드를 생성하고 위쪽 입력핀에 GET Player Health 노드를 추가한다. 5. 요약해보면 Damage이벤트가 발생하..
비헤이비어 트리에서 Attack 태스크 사용 적의 공격은 근접 공격이므로 적은 플레이어가 가까히 온걸 체크해야 합니다. DoAttack 태스크를 사용하려면 다음 단계를 다르싶시요. 1. 비헤이비어 트리 에디터에서 Attack Player 시퀀스 노드에서 와이어를 아래로 끌어서 MoveTo및 Wait 테스크 노드 사이에 BTTask_DoAttack 데스크 노드를 추가한다. 2. 디테일 패널에서 Target Actor Key 선택을 PlayerCharacter로 변경한다. 노드 이름을 Damage Player로 변경해서 DoAttackBTTask를 사용하는 방법을 설명한다. 저장한다. 3. Attack Player 시퀀스가 완료됐다. 이제 ThirdPersonCharacter 블루프린트를 업데이트 해서 손상이 처리될때 체력 미터를 줄여야 한다.