지금의 공격방식은 캐릭터가 들고있는 칼에 오버랩 되어야 데미지를 입는방식을 사용했었다
그런데 지금 제작해놓은 광역스킬 그리고 앞으로 만들 범위스킬의 경우
이런 광역공격의 경우 직접 칼에 오버랩되는경우가 아니기 떄문에 광역공격 오버랩 박스를 따로 만들어주기로했다
오버랩박스의 경우 Actor클래스로 만들어서 Overlap으로 처리해보겠다
액터클래스 AOEAttackCollisionActor을 생성
씬컴포넌트를 루트로
그밑에 CollisionBox인 BoxComponent를 생성
루트에 붙혀준다음 크기를 기본크기인 10으로 변경
아무것도 반응하지않게 설정하고 pawn과의 오버랩은 반응하게
기본설정을 해줬습니다
그럼 이 박스를 오버랩설정을 먼저 해줍니다
오버랩하는법은 이전글을 참고해주세요
https://lucodev.tistory.com/16
Unreal 캐릭터 - Overlap이벤트, 공격위치 판별하기, Collision변경하기
캐릭터와 적과 데미지를주고받을려면 Overlap이벤트가필요함일단 적이 없기떄문에때릴 허수아비를 하나 만들어주고(캐릭터를 부모로)지금은 플레이어가 스태틱메시만 들고있기때문에 CapsuleComp
lucodev.tistory.com
한번 스폰된 박스는 한번 스폰될때 한 적에게 한번만 반응해야한다
즉 오버랩은 한객체당 한번만 오버랩되어야하니
한번만 맞을 대상 ignoreActor을 배열로 선언해주고
이름에 Crow가 들어간 오버랩된 대상은
AddUnique로 배열에 추가하여 한번만 오버랩이 되게한다
(bool변수로 하는것보다 이게 더 깔끔하다)
그러면 오버랩된 더미의 피를 깎아보도록 하자
피를 깎을 데미지는 데이터테이블에서 가져와보도록 하겠다
원하는 광역공격이나 다단히트인 공격의 데이터테이블값을 복사할 변수를 선언
저번과 같이 데이터테이블은 게임인스턴스에 존재하니
캐스팅할 statGI를 선언
그리고 값을 들고올 getDamageDatableValue함수를 선언한다
BeginPlay에서 게임인스턴스와 캐스팅 그리고 값을 들고올 함수를 실행
게임인스턴스에 있는 값들을 해당 변수에 복사합니다
그리고 무슨 스킬에 맞아야하는지 알아야하니 지금사용하는 캐릭터도 캐스팅해줍니다
내가사용하고있는 캐릭터와 gameplaystatics를 선언해줍니다
BeginPlay에서 지금 나의 캐릭터와 캐스팅해줍니다
그리고 상호작용할 대상도 캐스팅해줍니다
그리고 상호작용할 interface도 캐스팅
이제 스폰시켜봅시다
애님노티파이를 사용해서 특정 원하는 스킬에 넣어보겠습니다
이제 이 박스를 크기를 맞춰주고 라이프스폰주기를 만들어줘서 최적화를 시켜주면 완성
제데로 광역공격이 실시되고 데이터테이블에 설정한 강력한 마지막공격 데미지가 같이 나간다
+다단히트 공격을 만들어보자
일단 모든스킬에 force와 기본모드를 구분해주자
뒤에 F를 붙히면 각성모드로 변경해주었다
R스킬에는 애님노티파이가 두가지종류가있는데
R공격이 약하게 공격하는 공격한개와 강하게 공격하는 애님노티파이를 두종류가 존재한다
그래서 RF 즉 각성 R 스킬일경우 forceN 0일때 약공격일때는 데미지를 rAttackDamage로
forceN이 1일때 면 rAttackLastDamage 즉 강한공격
이런느낌이다
'Unreal5 프로젝트 다이어리' 카테고리의 다른 글
Unreal - 모션워핑(Motion Warping) (0) | 2025.04.12 |
---|---|
Unreal - 넉백 날려보내기 (0) | 2025.04.11 |
Unreal - DataTable로 스탯 관리하기 (0) | 2025.04.11 |
Unreal UI - 적 정보가 담긴 위젯 띄우기 (0) | 2025.04.10 |
Unreal UI - 데미지 표기(HUD) (1) | 2025.04.10 |