언리얼엔진/언리얼 C++

(충돌) C++에서 충돌과 델리게이트

season97 2024. 10. 21. 14:42

 개인적인 공부를 위해 포스팅 하는 글입니다.


 

#충돌

ㆍ 간단하게 누군가와 오버랩이 감지되면 충돌이 감지되는거... C++에서 보자

 

#누가 들고있을까? 

ㆍ 당연히 Player의 캡슐 컴포넌트로 접근을 해야겠다.  캐릭터로 만들었으니 캡슐 컴포넌트는 있겠다

ㆍ CollisionEnabled를 설정해주고

BeginPlay에서 이렇게 정의해 주자, 타고타고 들어가보면

Signature.. 매개변수를 참고하기위에 한번 더타고 가자

ㆍ 이런 델리게이트 하나를 발견할 수 있다. 이걸 일단 복사해보자.

ㆍ 매개변수를 OverlappedComponent부터 싹 긁어왔다. 쉼표는 좀 제거해줬고,

반드시 UFUNCTION() 을 붙혀줘야 리플렉션 시스템 적용된다.

ㆍ 이렇게 함수 바인드 해주면 준비가 다됐다.

 

※ 블프에선 이벤트 C++에선 델리게이트를 이용한 콜백방식

※ 충돌에 대한 작동 방식은 가해자쪽 보단 피해자쪽으로 설계하는게 자연스럽다. 플레이어가 아이템을 먹는다 보단 아이템이 플레이어에게 먹혔다 느낌으로

 


사실 위 코드자체는 매우 간단한데, 델리게이트 부분을 좀 더 자세히 봤다.

ㆍ C#에선 델리게이트라는 기능 자체를 지원하고, 델리게이트 체인을 통해 여러개를 묶을 수도 있다.

ㆍ C++언어에선 델리게이트를 지원 안한다,,,, (함수포인터, std::function 등등 있긴 하지만 다르다)

ㆍ 네이티브 언어에서 맴버함수 포인터에 대한 부분.

ㆍ C++에서 클래스의 맴버 함수를 함수포인터로 저장할 땐 그 클래스 객체에 대한 주소와 맴버함수에 대한 주소가 세트로 필요함 

ㆍ 언리얼에서 엄청난 노력으로 내부적으로 델리게이트를 만들어 주는 것이니 인자를 전달 해 주자. C++문법에서 델리게이트를 구현하기 위해 필요한 것

 

ㆍ 이렇게 언리얼에서 델리게이트를 구현하려고 여러가지 쑈를 해놨다. 언리얼 공식문서의 델리게이트는 꼭 읽어보자

 

ㆍ 이렇게 만들어보면 다양한 옵션들이 있는데 하나를 골라서 작업하면되겠다.

 

# 언리얼의 델리게이트 마무리

ㆍ 왼쪽이 언리얼 델리게이트고 오른쪽이 C# 델리게이트다. 델리게이트 처럼 구현할라고 언리얼에서 해준거다.

ㆍ 바인드 람다,스태틱,오브젝트 등등 시리즈가 정말 많다.

 

ㆍ 뭐 이렇게 여러가지가 있다. 공식문서에 자세히 나와있으니 필요할때 찾아보자

 

ㆍ 아까 위에서 긁어온 코드의 델리게이트 부분이다. 파라미터6개, 멀티캐스트, 블루프린트와 호환 뭐 이런 옵션이 들어가있는것

 

 

언리얼 델리게이트 공식문서

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/delegates-and-lamba-functions-in-unreal-engine?application_version=5.1