Multiplay RPG 전투 개발 - Combat Component(회피 동작)

2024. 10. 16. 05:41·Unreal Engine 프로젝트/개인 공부 프로젝트(RPG 전투, Multiplay, AI)

개요

지상인지 공중인지와 전투상태인지에 따라 다른 8방향으로의 회피 동작을 개발해보기로 했다.

 

공중에서 회피 동작을 하는 동안에는 이전 속도에 의해 위로 뜨거나 중력의 영향을 받지 않으며 공중에서의 회피 동작에는 최대 횟수가 정해져 있다.

 

개발 방법

UMADirectionalMontageData

 

회피 동작이나 대미지 리액션의 경우 캐릭터가 바라보는 방향과 이벤트가 발생한 방향에 따라 다른 애니메이션이 재생되어야한다. 이를 위해 방향성이 있는 몽타주 애니메이션을 관리하는 데이터 애셋 클래스를 생성해 사용했다.

 

UMADirectionalMontageData에는 위 사진과 같은 함수와 변수가 있다. 각각은 아래와 같다.

  • GetMontageRootMotionDirection() : 각도를 인자로 받아 각도에 해당하는 몽타주의 루트 모션의 방향을 리턴한다.
  • GetDirectionalMontage() : 각도를 인자로 받아 각도에 해당하는 몽타주 섹션 이름과 루트 모션의 방향을 인자에 저장해주고 애니메이션 몽타주를 리턴한다.
  • ***SectionName : 각 방향 별 몽타주 섹션 이름이다. 총 8개의 방향이 있다.
  • ***RootMotionDirection : 각 방향 별 몽타주 루트 모션의 방향이다. 총 8개의 방향이 있다.

 

예시

사진은 대미지 리액션 몽타주와 대미지 리액션의 정보를 가진 데이터 애셋 클래스이다. 위 사진과 같이 몽타주 섹션의 이름과 몽타주 루트 모션의 방향을 설정해주고 사용했다.

 

회피 시스템에는 위와 같이 평상시 지상 & 공중에서의 회피 동작, 전투시 지상 & 공중에서의 회피동작에 해당하는 UMADirectionalMontageData가 사용되었다.

 

 

CombatComponent

 

위 사진은 플레이어의 회피와 관련된 변수들이다. 각각의 의미와 용도는 아래와 같다.

  • bPlayingDodge : 회피 동작을 하고 있는지 여부를 의미한다.
  • bCanDodge : 회피 동작을 할 수 있는지 여부를 의미한다.
  • MaxAirDodgeCount : 공중에서 회피 동작을 할 수 있는 최대 수를 의미한다.
  • CurAirDodgeCount : 현재 공중에서 회피 동작을 한 횟수를 의미한다.

 

  • 플레이어의 상태를 기록하는 플래그이다. 공중에 있는지 여부와 전투 상태에 있는지 여부를 기록한다.

 

  • 플레이어가 회피 입력을 했을 때, 호출되는 함수이다. 필요한 데이터들이 유효한지 확인하고 문제가 없다면 회피 동작을 할 수 있는 상태인지 확인한다. 이때, 현재 공중 회피 수가 최대 공중 회피 수와 같거나 크다면 회피가 불가능하다.
  • 회피 동작을 할 수 있는 상태라면, 공격 관련 변수들을 초기화하고 플레이어 캐릭터가 공중에 있는지 확인한다.
  • 플레이어가 공중에 있는지 여부와 전투상태인지 여부를 플래그로 설정하고 GetDodgeDirection()과 GetDodgeDirectionalMontage()를 이용해 회피 방향과 재생해야하는 애니메이션에 대한 정보를 가져온다.
  • 마지막으로 회피 애니메이션을 재생하고 서버에 회피 동작을 했음을 RPC로 알린다.

 

  • 회피 방향을 각도로 가져오는 GetDodgeDirection() 함수이다.
  • 먼저, 현재 이동 액션에 해당하는 키 입력이 있는지에 대한 정보를 가져와 컨트롤러의 회전을 이용해 플레이어가 이동 입력을 하고 있는 방향이 어떤 방향인지 구한다. (InputDirection)
  • 플레이어 캐릭터가 바라보고 있는 방향을 이용해 입력하고 있는 방향과 플레이어 캐릭터가 바라보고 있는 방향 사이의 각도를 구하고 0.0f ~ 360.0f로 정규화해 리턴한다.

 

  • 회피 몽타주와 몽타주 섹션 이름을 얻어오는 GetDodgeDirectionalMontage이다. 플레이어 상태 플래그와 함께 UMADirectionalMontageData의 GetDirectionalMontage를 이용해 정보를 리턴한다.

 

  • 회피 동작에 관해 애니메이션 재생 전 설정을 하는 함수이다. 공격 관련 변수를 초기화하고 플레이어 캐릭터가 공중에 있으면 공중 회피 횟수를 증가시키며 캐릭터가 중력에 영향을 받지 않으면서 공중으로 더 떠오르지 않도록 설정한다.

개발 결과

1. 여러 방향으로의 회피(비전투상태, 지상)

 

 

2. 공중 회피(비전투상태)

 

 

3. 전투 상태에서의 회피

 

 

 

 

 

 

 

 

 

 

 

'Unreal Engine 프로젝트 > 개인 공부 프로젝트(RPG 전투, Multiplay, AI)' 카테고리의 다른 글

Multiplay RPG 전투 개발 - Soft Lock 시스템  (0) 2024.10.16
Multiplay RPG 전투 개발 - Targeting Component  (0) 2024.10.16
Multiplay RPG 전투 개발 - Combat Component(대미지 리액션)  (0) 2024.10.16
Multiplay RPG 전투 개발 - Combat Component(공격 판정)  (0) 2024.10.16
Multiplay RPG 전투 개발 - Combat Component(콤보 공격)  (0) 2024.10.16
'Unreal Engine 프로젝트/개인 공부 프로젝트(RPG 전투, Multiplay, AI)' 카테고리의 다른 글
  • Multiplay RPG 전투 개발 - Targeting Component
  • Multiplay RPG 전투 개발 - Combat Component(대미지 리액션)
  • Multiplay RPG 전투 개발 - Combat Component(공격 판정)
  • Multiplay RPG 전투 개발 - Combat Component(콤보 공격)
Coding2018180044
Coding2018180044
  • Coding2018180044
    더 멋진 개발자를 꿈꾸는 나
    Coding2018180044
  • 전체
    오늘
    어제
    • 프로젝트 & 공부 기록
      • Unreal Engine 프로젝트
        • 개인 공부 프로젝트(RPG 전투, Multipla..
        • SuperSoldier
        • 파닥파닥 바다로
      • DirectX 12 프로젝트
        • Rampage
      • 공부
        • 코딩 테스트 대비반
        • 멀티코어프로그래밍
        • Unreal C++
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Coding2018180044
Multiplay RPG 전투 개발 - Combat Component(회피 동작)
상단으로

티스토리툴바