이제 GetAllActots 함수를 통해 월드에 배치된 액터(Enemy)를 가져 올 수 있게 되었다.

배치된 액터들 중에서 가장 가까운 액터를 찾을 수 있는 함수를 만들어 주었다.

OwnerActor, NearTarget이란 Actor변수를 만들어주고 BeginPlay에서 OwnerActor를받아와주고 TargetMaxDistance 를 선언해주며 이는 타겟과의 거리의 맥시멈 수치이다. 그리고 FindNearTarget이라는 함수를 만들었으며 이는 가장 가까운 적을 찾아주는 함수이다.

타겟과 나자신의 거리를 구하기 위한 함수를 만들었으며 TargetActors를 받아온걸 한번씩 반복문을 통해 돌아가면서 제일 낮은 액터를 찾아준다.

 

그런다음 TargetLockOn함수에 만들었던 함수를 통해 구현을 해주었다.

이제 실행 후 테스트를 할수 있게 세팅을 해주고 타겟시스템을 실행하면 가장 가까운적을 식별 할 수 있게 되었다.

 

여기서 문제가 되는 부분이 존재하게 되는데 TargetInterface를 가진 액터들은 다 식별하여 장애물이 존재해도 타겟을 하게 되어진다 그래서 이를 해결위해 LineTarce를 사용하여 장애물 뒤쪽에 존재하는 액터들은 식별을 못하게 해주었다.

LineTraceForTarget 이라는 함수를 만들어주고 라인트레이스를 쏴서 히트가 되는 액터만 식별해 주었다.

 

기존에 FindNearTarget을 이용해 찾았던 곳 윗부분에 라인트레이스를 활용한 함수를 사용하여 바꿔주었다.

컴파일 후 실행하여 벽을 만들고 락온 시스템을 켜주면 벽뒤는 무시되며 라인트레이스에 적중한 액터중 제일 가까운 적을 식별할 수 있게 되었다

캐릭터의 블루프린트 클래스로 돌아와 기존에 만들어두었던 LockedOnWidgetClass를 설정해주었다

 

TargetLockOn에서 위젯컴포넌트를 생성해 Enemy몸통에 달아준다

달아주기위해 지금 쓰고있는 Grux메쉬의 가운데부분은 pelvis가 가까워 pelvis로 attach를 해주었다

 

마지막으로 TargetOff에 위젯컴포넌트를 DestroyComponent함수를 통해 없애주었다

이제 실행후 TargetOn을 해보면 가장 가까운적에게 하얀색 마크가 생성이 되며 TargetOff를 통해 지워주고

다시 가까운적에게 가서 TargetOn을하면 가까운적에게 마크가 생성이 되는걸 볼 수 있다.

 

 

+ Recent posts