드디어 언리얼엔진 개발에 대한 게시물을 올리기 시작한다.
정말 많이 사용하는 LineTrace에 대한 것부터 작성하기로 했다.
총을 발사했을 때 물체와 충돌이 되는지 확인하기 위해 Linetrace를 사용해줄것인데
Linetrace라고 함은 충돌을 감지하기 위한 가상의 선을 그어주는 것이다.
<이번 코드의 목적>
오브젝트향해 총을 발사했을 때 맞추었을 때 충돌되는지 확인하기.
단,
총, 총알 오브젝트는 따로 만들어두지 않은 상태
현재 VR환경에서 총알을 발사하는 프로젝트를 생성한 상황이다.
/*헤더파일에 변수와 함수 선언해주기*/
//인스턴스 크로스헤어
UPROPERTY()
AActor* CrossHair;
UPROPERTY()
void LinTrace();
//시작점
FVector startPos = RightAim->GetComponentLocation();
//끝점
FVector endPos = startPos + RightAim->GetForwardVector() * 10000;
//충돌정보 저장 : LineTrace 쏴서 충돌체크 할 것이다
FHitResult HitInfo;
//충돌 체크
bool bHit = HitTest(startPos, endPos, HitInfo);
// >>충돌이 발생하면
if (bHit)
{
// >>충돌한 지점에 크로스헤어 표시
CrossHair->SetActorLocation(HitInfo.Location);
}
// >>그렇지 않으면
else
{
// >>그냥 끝점에서 크로스헤어 표시
CrossHair->SetActorLocation(endPos);
}
1. 시작점, 끝점의 위치에 대한 정보를 만들어준다.
2. FHitResult 자료형을 사용해 변수 HitInfo에 충돌 정보를 저장해준다.
3. 충돌했는지에 대한 여부를 변수에 담아 저장해준다.
충돌했는지 확인하는 것은 HitTest라는 함수를 이용해준다.
4. 그 다음 충돌했을 경우, 그렇지 않을 경우를 만들어 CrossHair는 끝점에 위치하도록 한다.
그 다음 크로스헤어 인스턴스 객체를 생성해주었다.
이렇게 해야 엔진의 레벨에 올렸을 때 크로스헤어가 제대로 보일 수 있다.
이 작업은 BeginPlay에서 해주었다.
//크로스헤어 인스턴스 객체 만들기
if (CrossHairFactory)
{
CrossHair = GetWorld()->SpawnActor<AActor>(CrossHairFactory);
//보이게 할지에 대한 여부 : 항상 보여줄 것이므로 이대로 마무리
//CrossHair
}
그 다음 엔진에 들어와서 BP_VRPlayer에 crosshair 연결해준다. 화면 상단의 가운데 쯤에 있는 class default 버튼 눌러주고 crosshair을 검색해주면 뜬.
크로스헤어의 고정(화면을 상하로 움직일 때 손이 이동하지 않는다. 좌우로는 된다.) 아마 에임과 손의 위치가 회전방향에 일치하며 따라가지 않는 현상인듯 하다.
손이 카메라에 일치하도록 설정해줄것인데. RightHand는 손 전체를 의미하고 RightAim은 총을 발사하는 위치를 컨트롤 하는 집게손가락을 의미한다. 앞부분에 총을 발사하는 환경에 대한 설명은 다음 게시물에 들고 올 예정이다.
그런 다음 라인트레이스로 충돌을 감지하는 저 함수 전체 구문을 Tick에서 호출해주도록 한다.
혹시 함수를 어떻게 호출하는지 모르는 분들을 위하여
예를 들어 위에 라인 트레이스를 구현한 전체 부분을 void LineTrace() { } 로 이름을 지어줬다면
그냥 Tick 함수 안에서 LineTrace(); 이렇게 적어주면 된다.
이렇게 하면 충돌 감지를 하는 LineTrace를 구현하는 것은 완성된 듯하다.
'언리얼엔진 개발 > Developing' 카테고리의 다른 글
[UnrealEngine5]TPS 제작 환경에서의 LineTrace 사용하는 법 (0) | 2023.07.20 |
---|---|
[UnrealEngine5]로컬라이징( Feat. 영어, 한국어 설정하기) (0) | 2023.07.19 |
[UnrealEngine5] 플레이어가 총알을 발사하게 하는 법 (0) | 2023.07.13 |
[UnrealEngine5]버튼을 누르면 플레이어의 속도가 빨라지도록 하기 (0) | 2023.07.11 |
[UnrealEngine5]랜덤위치에서 적 스폰하기 (2) | 2023.05.10 |