프로그래밍 공부
작성일
2024. 3. 14. 15:45
작성자
WDmil
728x90

목표가 선택되고 선택된 목표에 대해 케릭터의 회전을 전환하여, 목표를 고정되게 바라볼 수 있도록 한다.


BP_Player->Tick_LockOn

틱마다 데이터를 검사한다. LookOnTarget의 Bool데이터를 검사해서, 현재 록온을 진행 하는지 아닌지를 확인하고, 록온을 진행한다고 하면, 

 

현재 록온중인 적을 확인하고, 록온중인 적을 향하는 방향에 현재 컨트롤 중인 컨트롤러의 회전을 전환해준다.

 

그렇게 화면전환을 고정하면, 고정된 객체로 틱마다 카메라의 회전이 전환되게 된다.


테스트


타겟전환하기

지정된 타겟들은 배열형태로 객체에 저장된다.

이제, 저장된 타겟들의 Distance를 확인하여, 가장 가까운 타겟 순서대로 플레이어가 카메라를 전환할 수 있도록 해보자.

 

즉, 다른 타겟에 카메라를 회전시키도록 할 것 이다.


Get Nearest Enemy

 

입력의 좌 우 기준으로, 카메라보다 좌측의 객체로 이동, 우측 객체로 이동할 수 있도록 블루프린트를 작성한다.

함수를 정의해서 관리한다.

 

인풋으로 오른쪽인지 아닌지를 확인하여 사용하게 한다.

 

일단, LookonEnumy의 Valid를 확인하여, 지정된 객체가 유효한지를 검사한다. 만약, 유효하다면, For Each Loop를 통해

구체 Collision검사로 저장된 TargetEnumys를 순환검사하여 데이터를 확인한다.

 

 

 

가장 가까운 객체를 검사해야 함으로, DIstanceEnemy형태의 Map을 생성하여, 해당 Map에 Distance거리와 Actor를 저장해준다.

 

이때, 객체 자기자신을 확인하여, 현재 지정되어있는 LookonEnemy가 저장되는 일이 없도록 한다.

전환함으로, 전환할 때 자기자신으로 전환되면 전환이 이루어지지 않게 되기 때문에, 사전 방지한다.

 

Actor와 검색된 Actor의 거리를 측정하는 블루프린트 이다.

 

검색된 Actor의 위치좌표와 현재 자기자신의 위치좌표를 빼주면, Self->Enemy에 대한 방향 벡터가 생성된다.

 

이때, 생성된 방향벡터와 Self의 ForwardVector를 외적하면, -1에서 1사이의 외적결과를 받아와 현재 Self와 목표 Actor사이의 방향을 판별한다.이때, 방향정보가 노멀라이즈되지 않았음으로, 이 데이터에는 Distance데이터가 같이 포함된다.

 

그리고, 해당 방향과 UpVector를 내적하게 되면, 방향유사성이 나타나는데, UpVector와 내적한 결과는 z값만 나타나게 됨으로, z값에 Distance와 -와 +를 통한 방향이 같이 들어가서 출력된다.

 

순환이 끝났다면, 이제 기입된 Key값을 기준으로 순환시켜준다.

 

순환된 결과를 DIstance로 Set하고, 현재 데이터가 Right입력인지, Left입력인지 판별하고, Right일 경우, 0보다 커야하고, Left입력일 경우 0보다 작아야 한다.

 

이 Distance값을 사용해서, 현재 지정된 MinDistance값보다 작다면, MinDistance를 현재 Distance로 갱신해준다.

 

 

순환이 종료되었다면, 가장 짧은 Distance를 가진, Minimun을 사용해서, 저장된 map배열에서 해당 데이터를 찾는다.

 

찾은 데이터를 가장 짧은 MinEnemy로 넣어주고. 해당 데이터의 커서를 켜주고 다른 커서를 꺼준 다음, 새 LookOnEnemy로 지정해준다.

그리고, 지정된 입력마다 호출해주면 된다.


테스트

728x90