강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

언리얼뉴비님의 프로필 이미지
언리얼뉴비

작성한 질문수

실전! 언리얼 소울라이크 개발: A to Z

보스와 일대일 전투에서 보스 액터를 가져오려면 어떻게 해야하나요?

해결된 질문

작성

·

83

·

수정됨

0

해당 강의를 전부 수강 후, 보스와 일대일 전투를 진행할 때

보스가 공격중이거나, 공격이 끝났을 때 유저가 어떤 액션을 취하느냐에 따라

가중치를 적립해서 2페이즈로 분기하는 토이 프로젝트를 해보려고 합니다

 

그런데 진행중에 어떻게 처리해야할지 막히는 부분이 있어서 질문 드리고 싶습니다!

 

대략적인 방향성은 다음과 같아요!

  1. WeaponCollision AnimState가 시작할 때와 끝날 때 보스의 BlackBoard Key값 변경

     

     

  2. 현재 대치중인 보스의 BlackBoard Key값을 가져와서, Key값에 따라 조건 결정
    (ex. 보스의 BlackBoard Key 값이 Melee Attack일 때, 캐릭터가 공격을 실행하면 공격 변수에 가중치 + 1)

     

     

  3. 체력이 50퍼센트 이하일 때, 현재까지 적립된 가중치 변수들을 전부 비교하여, 최대값 선별

     

     

  4. 선별된 최대값을 BlackBoard에 가져와서, 분기 조건으로 사용

위와 같은 방향성으로 진행해보려고 하는데, 가중치 변수들은 EnemyBoss.h폴더에 저장해놓았고,
Character.cpp의 Attack / Block 함수들 사이에
대치중인 EnemyBoss의 BlackBoard Key값을 가져와서, if문으로 조건을 걸고 가중치를 줄지 말지 결정하고 싶은데 어떻게 진행해야할지 조금 막막해요

 

어떻게 진행하면 좋을지 힌트를 얻고싶습니다

답변 2

3

Spector님의 프로필 이미지
Spector
지식공유자

안녕하세요, 언리얼뉴비님.

보스 캐릭터를 감지하는 방법은

공격이 성공했을 때는 무기의 OnHitActor 함수에서 피격된 대상의 Actor 정보를 확인할 수 있습니다.

만약 공격과 관계없이 감지해야 한다면, 별도의 SphereComponent를 활용한 감지 시스템을 구현하는 방법을 고려해볼 수 있을 것 같습니다.

그럼 좋은 하루 되시길 바랍니다^^

답변 감사합니다


플레이어의 공격 적중 성공 여부에 관계 없이,
보스 캐릭터가 공격중인지 아닌지에 따라 가중치를 적립하려면
말씀하신 SphereComponent를 써야하나요?

Spector님의 프로필 이미지
Spector
지식공유자

보스 캐릭터의 공격 상태 판단은 플레이어 캐릭터보다는 보스 캐릭터 자체에서 처리하는 것이 더 합리적입니다.

원하는 시점에 보스 캐릭터의 가중치 적립 함수를 트리거하여, 함수 내에서 현재 보스 캐릭터의 상태를 파악하고 분기 처리하는 방식이 일반적인 접근법이라고 생각합니다.

감사합니다!!

0

안녕하세요, 인프런 AI 인턴입니다. 언리얼뉴비님.

보스와의 전투에서 전술적인 플레이를 추가하기 위해 다양한 가중치를 적용하려 하고 계신 것 같습니다. 이러한 시스템을 구축하는 데는 여러 가지 요소가 결합되어야 하므로, 단계적으로 접근하는 것이 좋습니다.

아래는 제안 드리는 접근 방식입니다:

  1. 보스의 AnimState와 BlackBoard 연동:

    • AnimNotify를 통해 보스의 공격 상태 변화 시 BlackBoard의 Key 값을 갱신하는 방법을 고려하세요. AnimNotify를 사용하면 애니메이션 이펙트 발생 시 이벤트를 트리거할 수 있습니다.
  2. 대치 중인 보스의 상태 관리:

    • 보스와 플레이어 캐릭터가 각각 상대방을 인식하고 상호작용할 수 있도록 AI Controller를 통해 플레이어 캐릭터의 감지 시스템을 강화합니다. Perception System을 사용하여 보스가 플레이어를 감지하도록 구현하고, 감지 시 이벤트를 발생시켜 BlackBoard에 정보를 갱신합니다.
  3. 가중치에 의한 행동 결정:

    • TMap 또는 TArray를 활용해 가중치를 누적하고 비교하세요. 플레이어의 행동에 따라 가중치를 업데이트하고, 이러한 값을 기반으로 행동을 결정하도록 합니다. AI Controller에서 BlackBoard Key를 활용하여 선택 분기를 강화할 수 있습니다.
  4. 체력 조건에 따른 페이즈 전환:

    • 보스의 체력이 50% 이하가 되었을 때 이벤트를 발생시켜 해당 시점에 누적된 가중치 값들을 평가합니다. Behavior Tree에서 Decorators를 사용하여 페이즈 전환 조건으로 활용합니다.

이상과 같은 접근 방법으로, 언리얼 엔진 내에서 다양한 게임 플레이 경험을 유동적으로 구현할 수 있을 것입니다.

추가로 유사한 구현이나 AI와 관련한 질문들은 아래 링크를 확인하시면 도움이 될 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

언리얼뉴비님의 프로필 이미지
언리얼뉴비

작성한 질문수

질문하기