Unreal - 공중 공격 - (2)

2025. 4. 20. 19:58·Unreal5 프로젝트 다이어리

저번에 만든 공중공격입니다

부족한게 많으니 여러가지를 더 추가해보겠습니다

공중에 뜨면 카메라가 더 넓은곳까지 볼수있도록 카메라의 위치를 변동해보도록 하겠습니다

outFov까지 InterpTo이동 으로 시점을 뒤로 당기고

 

애님 노티파이로 호출을 해주면

점프할때 원하는 디폴트값90보다 큰 100 Fov값으로 변경되 시점이 넓어지고 하강할때 Fov가 원래대로 돌아와

자연스러운 카메라 시점을 연출할수있습니다

 

그러면 이제 날아갈 검기를 만들어보겠습니다

검기액터부터 만들었습니다

검격의 나이아가라 slashNA

루트컴포넌트가 될 씬 컴포넌트

그리고 움직일 속도 slashSpeed

움직일방향, 타겟방향, 마우스 방향벡터를 선언해줬습니다

 

씬컴포넌트밑에 나이아가라 컴포넌트를 붙힌뒤 ConstructorHelper로 할당해줬고

moveDirection과 targetDirection을 초기화해줬습니다

처음 BeginPlay에서 마우스의 위치를 가져와서 targetLocation에 저장합니다

slashActorLoc에 현재 위치를 계산한뒤

움직일 방향을 타겟에서 현재위치를 빼서 targetDirection에 넣어줍니다

 

newLoc의 계산방식은

등속도 직선 운동 공식을 사용하였습니다

p = p0 * vt 공식이며

p0는 현재위치  v는 속도 t는 시간입니다

slashSpeed는 초당 이동 거리이며 DeltaTime과 곱하여 프레임마다 이동할 거리를 계산합니다

 

그러면 마우스방향으로 p = p0 * vt 공식으로 이동합니다

 

검기를 발사할위치는 검이니 검 소켓을 만들어줍니다

검격이 발사될 SwordSlashStartSocket을 만들어줍니다

프리뷰 메시로 나이아가라를 달아준뒤 정확하게 칼등에서 나가게 설정해줬습니다

이제 이 검기액터를 스폰할 함수를 만들어줍니다

위치는 소켓의 위치에서

GetSocketTransform함수로 SwordSlashStartSocket의 위치를 얻은다음 SpawnActor로 검기액터 인스턴스를 스폰시킵니다

그럼 이제 이 검격 액터와 오버랩할 콜리전박스를 만들어주고 오버랩 처리를 해주겠습니다

오버랩할 박스컴포넌트를 달아주고

오버랩된 대상의 이름을 GetName으로 otherName변수에 넣고

폭발은 적의 바닥에서 폭발하는게 시각적으로 좋다고판단해서 바닥에서만 폭발액터를 스폰시켰습니다

바닥에 닿으면 TSubClassOf로 참조한 대상인 explosionActor을 스폰

해당 액터는 콜리전 중앙을 기준으로 밖으로 밀어내는 콜리전액터입니다

그리고 케스케이드를 SpawnEmitterAtLocation함수로 스폰

 

또한 데이터테이블에서 값을 추가하고 해당값을 적에게 넘겨서 HUD로 데미지 출력을 해보도록하겠습니다

검격이 떨어진 위치에서 적을 밀어내는 액터가 스폰이되어 적을 넉백시키고 데이터테이블에서 받아온 원하는 데미지값을

잘 출력하는 모습을 볼수있습니다

 

해당 스킬은 각성폼일때만 사용가능하고 각성폼이 아닐때는 사용할수없도록 ui애니메이션을 추가해보도록 하겠습니다

언락될때의 애니메이션
다시 언락될떄의 애니메이션입니다

컬러와 오파시티 그리고 스케일값을 변동하여 위젯애니메이션을 구성하였습니다

a스킬 잠금풀림
a스킬 잠금

이제는 공격하는 위치범위 aoe를 적용해주고

공중에 계속 떠있으면 밸런스가 맞지않는거같다고 생각해서 스킬사용시 8초가 지나면 마지막 액션으로 강제로 넘어가게

상태스냅샷 기능을 구현했습니다

끝나고 마지막으로 델리게이트로 호출되는 마지막액션 함수입니다

-1이란 수치는 게임플레이 중에 나오지않는수이므로

아직 스냅샷을 한적 없다 라는 의미를 가집니다 

한마디로 안전장치같은 개념을 줄수있습니다

6초뒤에는 무조건 OnSkillEndSkillA함수가 호출이됩니다

그래서 공중에 있어도 처음 실행했을때 6초가 지나면 무조건 종료됩니다

a키를 누르면 스킬범위를 나타내는 데칼이 나오고

스킬처음실행 6초안에 아무런입력이없거나 6초가 지나면 무조건 마지막 액션이 나오고 범위데칼의값이 초기화되고

원래상태로 되돌아갑니다

 

그러면 6초라는걸 시각적으로 보여주기위해 위젯을 만들어봅시다

프로그래스바를 업데이트시켜줄 updateAProgressBar함수와

호출할때 필요한 StartProgressBarCoolDown함수를 만들어줍니다

프로그래스바가 1에서 0이될떄까지 0.02초 주기로 줄어들게하는 함수를 만들고 

업데이트 하는 시간과 동일한 타이머 시간을 가지는 호출할 함수를 만들어줍니다

NativeConstruct에서 

처음에는 Hidden상태로 숨겨져있다가

클릭할때 보이고 끝나면 다시 히든으로 바꿔보겠습니다

호출할때 6초로 프로그래스바 시간을 만들고 visible로 보이게합니다

공격이 끝나면 프로그래스바를 숨깁니다

그러면 이제 간단한 카메라 쉐이크와  소드트레일을 추가해주겠습니다

칼 검기액터는 컨트롤러에대한 정보를 아에 모르기때문에 캐스팅부터

캐스팅을 한뒤 

카메라쉐이크 함수를 호출해줍니다
웨이브값은 이렇게 줬습니다

이런느낌입니다

'Unreal5 프로젝트 다이어리' 카테고리의 다른 글

Unreal - 대쉬 공격 만들기 (Sweep 처리방식)  (0) 2025.04.22
Unreal - 어색한 충돌 처리 해결하기  (0) 2025.04.21
Unreal - 공중 공격 - (1)  (0) 2025.04.15
Unreal - 모션워핑(Motion Warping)  (0) 2025.04.12
Unreal - 넉백 날려보내기  (0) 2025.04.11
'Unreal5 프로젝트 다이어리' 카테고리의 다른 글
  • Unreal - 대쉬 공격 만들기 (Sweep 처리방식)
  • Unreal - 어색한 충돌 처리 해결하기
  • Unreal - 공중 공격 - (1)
  • Unreal - 모션워핑(Motion Warping)
lucodev
lucodev
커피와 노트북 그리고 개발
  • lucodev
    루코 개발테이블
    lucodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (121) N
      • Unreal5 프로젝트 다이어리 (73)
      • Unreal5 프로젝트 다이어리2 (3) N
      • Unreal 팁 (8)
      • Unreal 디버깅 (8)
      • C++ 프로그래머스 다이어리 (21) N
        • Stack (3)
        • Hash (4)
        • Heap (2)
        • Sort (1) N
      • 코드 개인보관함 (8) N
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 링크

  • 공지사항

  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 태그

    unreal 로딩
    언리얼 look at
    언리얼 foot step
    언리얼 behavior tree
    언리얼 로딩
    unreal 컷씬
    언리얼 시퀀스
    언리얼 페이드 아웃
    언리얼
    언리얼 behaviortree
    unreal loading
    언리얼 컷씬
    unreal 시퀀스
    unreal look at
    unreal 모션매칭
    언리얼 모션매칭
    unreal sequence
    언리얼 비헤이비어트리
    언리얼 로딩창
    언리얼 motionmatching
  • hELLO· Designed By정상우.v4.10.3
lucodev
Unreal - 공중 공격 - (2)
상단으로

티스토리툴바