Unreal 캐릭터 - Overlap이벤트, 공격위치 판별하기

2025. 4. 6. 19:45·Unreal5 프로젝트 다이어리

캐릭터와 적과 데미지를주고받을려면 Overlap이벤트가필요함

일단 적이 없기떄문에

때릴 허수아비를 하나 만들어주고(캐릭터를 부모로)

지금은 플레이어가 스태틱메시만 들고있기때문에 

CapsuleComponent를 달아둔 검을 하나 별도로 만들었다

 

그럼 원래 달고있던 스태틱메시 대신에 이 액터를 자손으로 달아주자

여기서 constructorhelpers쓸때 마지막 (. ~~)을 지워줘야함 주의

 

이렇게 하면 캐릭터한테 차일드액터로 overlapSword 즉 칼이 할당된다

이제 기본적인 스태틱메시가 아닌  콜리전을 가진 별도의c++클래스 swordActor가 달렸다 

이제 오버랩 이벤트를 발생시켜보자

 

칼에서 오버랩이벤트를 발생시킬거라 칼 c++를 수정해준다

오버랩 함수를 만들어주고

이런식으로 생성자에 OnComponentBeginOverlap을 써주고

OnComponentBeginOverlap을 f12눌러주면

이화면이 뜬다

그리고 다시

FcomponentBeginOverlapSignature를 다시 f12를 누르면

이런화면이나오는데 

뒤에서부터 6개를 복사

복사한내용을 내 비긴오버랩 함수에 넣어주고

중간중간에 있는 자료형* - 변수이름 사이 쉼표 지워주기 

이런식으로 수정하고

cpp클래스를 수정해주면 AddDynamic의 빨간밑줄이 사라지고 오버랩이벤트를 위한 준비가 완료되었다

그리고 칼에서 칼의 맞은포인트를 체크하기위해

StartPoint와 EndPoint를 생성

시작할포인트와 끝포인트를 위치설정을 해주고

#include "Kismet/KismetSystemLibrary.h"헤더 추가해주고

이렇게 코드를 작성하면

 

actor에 히트하면 오버랩 이벤트가 잘 발생하는걸 확인할수있다

언리얼 인터페이스를 만들어주고

허수아비 즉 때릴대상의 코드에서 나의 인터페이스 HitInterface를 .h에 #include 해주고

class 뒤에 ,public IHitInterface를 써준다

때릴대상의 .h 에서 오버라이드 함수를 만들어주고

밑에 액터가 히트했고 hitInterface로 형변환을 할수있다면 로그를 찍는다

로그가 잘 찍히는걸 확인

그럼 잘 동작하니

GetHit함수 호출을 넣어주고

히트할 대상의 GetHit 함수를 수정해준다

 

확인해보자

벽은 인식안하고 때릴대상(허수아비) 가맞으면 보라색으로 스피어가 뜨는걸 확인할수있다

근데 이러면 오버랩 이벤트가 발생했을때 한번만 맞는게아니고 다단히트로 맞아버리기때문에

코드의 수정이 필요하다

beginoverlap과 endoverlap으로 플래그로 전부처리할수도있으나 코드가 너무 더러워진다

그래서 사용한 방법

 

타격한 적을 저장하는 배열을 하나 선언

조건을 추가하고 AddUnique를 사용하였다

AddUnique는 배열에 이미 값이 있으면 추가하지말고 없으면 추가해줘 라는 의미이다

그래서 해당 코드가 실행되면 한번만 실행이 되고 다시 오버랩이 안될텐데 

라는 방법으로 다시 배열을 비워 다시 한번만 오버랩이 되게 할수있다

(보라색구체가 오버랩된 시각스피어) 이렇게 한번만 오버랩이 일어난것을 확인할수있다

그러면 이제 공격이 끝날때 배열을 비워주는 함수를 호출하면 원할때 원하는만큼 타격할수있게되었다

 

그러면 노티파이에서 호출할 공격활성화, 비활성화 함수를 만들어주자 

Enable은 공격 활성화 Disable은 공격을 비활성화

플래그 함수를 설정

해당 플래그를 컨트롤해주고

Collision을 QueryOnly, Nocollision으로 컨트롤해준다

그리고 Empty를 해줘야 여러명의 적을 때릴수있게 된다

그리고 코드의 안전성을 위해 OnComponentBeginOverlap이벤트를

생성자에서 BeginPlay위치로 변경

그리고 플래그를 false로 해서 초기상태를 비활성화모드로 변경해준다

플래그가 false일떄 즉 콜리전을 활성화를 하지않을떄는 return시켜버리면된다

그러면 노티파이에서 호출을 해주자

 

애님인스턴스 즉 노티파이를 호출할때의 함수를 제작한다

 

이름 잘 기억해주시고

그럼 노티파이에서 SwordActor을 사용해야함

 

그런데 지금 캐릭터가 childactor로 들고있기때문에

캐릭터에서 캐스팅을 해놓자

 

캐릭터에 들어가서

전방선언을 한 swordActorInstance를 선언

 

#include SwordActor.h를 헤더에 추가해주시고

캐스팅이 완료

 

그럼 캐스팅이 된 위치는 swordCharacter의 swordActorInstance 다

노티파이에서 함수를 건너건너 호출시켜준다

이제 사용할 위치의 노티파이를 찍어주고

실행하면?

 

허수아비를 공격하면 원하는 애니메이션에 capsuleComponent가 ForDuration시간동안 그려지면서 히트된곳을 표시한다

 

여기서 문제점을 이야기하자면 애니메이션끝에  찍어둔 노티파이 즉 AttackCollisionNonActivate 가 호출이 안되면 계속 그릴테니 예외처리도 해주자

 

지금 애니메이션이 끝나기전에 움직이는현상은 전에 후딜을 수정하면서 생긴문제 즉

마우스우클릭과 좌클릭 그리고 스킬을 쓸때 강제로 애니메이션이 수정되니 예외처리를 해주도록하겠다

우클릭에 강제로 공격콜리전활성화를 강제로 꺼주는 이벤트이다

이걸  우클릭할때 그리고 스킬쓸때 전부 넣어주었다

SwordCharacter->swordActorInstance->SetDisableAttackCollision();

 

이제 모든 애니메이션에 노티파이 노가다를..해주면 완성

 

fordutation대신 None으로 해서 디버그시각화만 안보이게하면

(`누르고 show collision을 치면 모든 콜리전을 시각으로 확인이 가능합니다)

잘 작동한다

 

근데 허수아비가 지금 크기에 비해 콜리전이 크기가 적절하지않다

지금 허수아비의 콜리전이다

콜리전이 지금 바깥의 초록색원에 적용되어 초록색 모양에 맞으면 히트이벤트가 발생한다

Collision -> CollisionComplexity (콜리전 복잡도) 를 Use Complex Collision As Simple로 변경

그럼 초록색원이 아니라 허수아비 본체의 콜리전을 타격 가능하다

이제 캐릭터가 정확하게 허수아비를 타격하는걸 확인할수있다

 

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

Unreal UI - 데미지 표기(HUD)  (1) 2025.04.10
Unreal 적 - 피격 리액션(경직) 구현하기  (0) 2025.04.08
Unreal 캐릭터 - 물체 가속회전(EaseIn),피벗 위치변경, 액터스폰  (2) 2025.04.06
Unreal UI - 프로그래스바 모양 변경하기  (1) 2025.04.05
Unreal 캐릭터 - AOE 스킬범위  (0) 2025.04.04
'Unreal5 프로젝트 다이어리' 카테고리의 다른 글
  • Unreal UI - 데미지 표기(HUD)
  • Unreal 적 - 피격 리액션(경직) 구현하기
  • Unreal 캐릭터 - 물체 가속회전(EaseIn),피벗 위치변경, 액터스폰
  • Unreal UI - 프로그래스바 모양 변경하기
lucodev
lucodev
커피와 노트북 그리고 개발
  • lucodev
    루코 개발테이블
    lucodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (127) N
      • Unreal5 프로젝트 다이어리 (73)
      • Unreal5 프로젝트 다이어리2 (6) N
      • Unreal 팁 (8)
      • Unreal 디버깅 (8)
      • C++ 프로그래머스 다이어리 (24) N
        • Stack (3)
        • Hash (4)
        • Heap (2)
        • Sort (4) N
        • Exhaustive search (0)
      • 코드 개인보관함 (8)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 링크

  • 공지사항

  • 블로그 메뉴

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

    언리얼 로딩창
    언리얼 behavior tree
    언리얼 시퀀스
    언리얼 behaviortree
    언리얼 foot step
    언리얼
    unreal 모션매칭
    언리얼 로딩
    unreal 로딩
    언리얼 look at
    언리얼 모션매칭
    unreal loading
    unreal look at
    unreal 컷씬
    언리얼 motionmatching
    unreal 시퀀스
    언리얼 비헤이비어트리
    언리얼 컷씬
    unreal sequence
    언리얼 페이드 아웃
  • hELLO· Designed By정상우.v4.10.3
lucodev
Unreal 캐릭터 - Overlap이벤트, 공격위치 판별하기
상단으로

티스토리툴바