그렇게 거창하진 않지만 이번에 만든 보스 캐릭터의 특징 중 하나는 눈이 공격대상(=플레이어)를 항상 주시한다는 것이다.
공포 영화에서 주로 볼 수 있는 그 연출이다.
과거 초상화 기법처럼 어느 방향에서 봐도 착시로 나를 보는 것처럼 보이는 그런 것이 아니고 실제로 플레이어의 위치를 트래킹하여 회전한다.
여기에 사용되는 핵심 함수는
FindLookAtRotation()이다.


BP_Boss_Iris를 만들기 위해 필요한 것은 4가지. 액터 클래스 하나, 흰자 머티리얼, 홍채 머티리얼, 동공 머티리얼이다.
BaseColor를 설정하고 Specular, Roughness를 적절히 조절해서 번들번들한 느낌을 내주면 된다.
흰자와 홍채는 Sphere 스태틱 메시, 동공은 Cylinder를 스케일 조절하여 사용하였다.
FindLookAtRotation()을 위해) 잘 겹쳐서 액터를 완성해주면 눈알은 이것으로 완료.
Child Actor 컴포넌트를 2개 추가한다.스켈레탈 메시에 부착한다. 이 프로젝트에선 보스의 본체가 움직이지 않으므로 상관은 없지만 혹시라도 애니메이션이 있어서 움직일 경우 스켈레탈 메시에 부착하지 않으면 애니메이션의 움직임과 따로 놀게 된다.
Child Actor Class에 위에서 만들었던 안구 액터를 할당하고 위치를 잘 잡아주면 된다.
TickFunction()에는 LeftEyeFocusOnTarget()과 RightEyeFocusOnTarget() 노드가 걸려있어 매 프레임 호출되는데, 이를 통해 플레이어 방향으로 계속 안구 액터가 회전하게 된다.
공격 대상(=플레이어) 정보를 Hands에서 받아온다.TArray<BP_Boss> Hands는 게임 시작시 캐싱한 보스의 손 객체들을 담고 있다.Target을 가지고 있는데, 본체는 이걸 가져와서 주시 대상으로 삼는 것이다.
FindLookAtRotation() 함수에 안구의 위치벡터와 플레이어의 위치벡터를 전달하면 안구에서 플레이어 방향으로의 회전값을 구할 수 있다.KISMET_MATH_FORCEINLINE
FRotator UKismetMathLibrary::FindLookAtRotation(const FVector& Start, const FVector& Target)
{
return MakeRotFromX(Target - Start);
}
Pitch와 Yaw가 자연스러운 안구 움직임을 보이도록 제한한다.RInterpTo()로 안구의 현재 회전값에서 위의 회전값으로 보간하고, 그 값을 SetActorRotation()에 전달해 안구의 현재 회전을 변경하면 아래와 같이 플레이어를 주시하도록 할 수 있다.