지오메트리 스위핑
이제 드디어 스위핑을 해볼 차례이다.
우리가 참조와 아웃 매개 변수를 배운 것은 스위핑을 하기 위한 함수인 SweepSingleByChannel에서 사용하기 때문이다.
해당 함수에서 어떠한 변수들을 사용하는지는 언리얼 공식 문서에서 확인이 가능하다.
참고링크 : https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/Engine/UWorld/SweepSingleByChannel/
UWorld::SweepSingleByChannel
Sweep a shape against the world and return the first blocking hit using a specific channel
docs.unrealengine.com
이제 어떤 변수를 사용하는지 체크해보자.
우선 참조변수이자 아웃 매개 변수인 FHitResult 타입 변수이다.
스위프에서 나오는 결과이자, 어떤 것을 부딪혔는지 알려주게 된다.
다음으로 시작점과 끝점이다.
해당 값들은 모두 변하면 안되는 변수이기에 const가 선언되어있는 것을 볼 수 있다.
다음으로 FQuat & Rot인데, 이는 회전 값을 의미한다.
다음으로 트레이스 채널, 트레이스할 형태이다.
우리가 필요한건 여기까지이다.
우선 우리가 생각하는 형태는 선의 형태가 아닌 구체이다.
따라서 해당 구체의 반지름을 헤더에 미리 선언해준다.
이제 함수의 변수를 하나하나 채워보자.
먼저 HitReuslt은 아웃 매개 변수이기 때문에 단순히 선언만 해주고 바로 값을 넘겨준다.
시작점과 끝점은 우리가 이미 선언했었으므로 그대로 가져온다.
다음으로 회전값인데, 우리는 구체여서 필요가 없으므로 0으로 해야한다.
이를 위한 사용법으로 FQuat::Identity를 선언해준다.
다음으로 트레이스 채널인데 Grabber에 대한 트레이스 채널을 알아야한다.
이를 위해 우선 언리얼 폴더의 Engine.int 파일을 VScdoe에서 열어준다.
해당 파일은 프로젝트 폴더의 Config 폴더에 존재한다.
Grabber를 검색해서 보면 위에 Channel = ECC_GameTraceChannel2를 볼 수 있다.
이것이 우리가 원하는 Grabber에 대한 트레이스 채널이다.
해당 값을 함수에 이어서 넣어준다.
마지막으로 형태이다.
우리는 구를 선택하였으므로 구를 넣어주어야 한다.
이를 위해 FCollisionShape 타입 변수를 선언하고, 여기서 MakeSphere 함수를 통해 우리가 설정한 반지름을 가진 구를 만들어 갖고 오게 된다.
해당 함수는 bool 타입을 반환하게 되므로, 만약 HitResult가 존재한다면 true를 반환하게 된다.
이제 실제로 HitResult에 대해 출력을 해보자.
이를 위해 우선 HasHit이 존재하는지 여부를 체크하고, HitResult.GetActor()를 통해 실제 부딪힌 액터를 가져온다.
그리고 해당 HitActor의 이름을 가져와 출력해주면 된다.
만약 HasHit이 False면 부딪힌 값이 없다는 것을 알려주는 것이 더 좋을 것 같다.
이를 위해 else 문으로 작성해주었다.
'Unreal > Udemy 강의' 카테고리의 다른 글
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-23 (0) | 2024.03.23 |
---|---|
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-22 (0) | 2024.03.23 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-20 (0) | 2024.03.22 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-19 (0) | 2024.03.22 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-17 (0) | 2024.03.21 |