언리얼 엔진/개인도전!

[ProjectH]HeadFollow

인똑이 2023. 10. 28. 23:23

혼자서 공포게임 만들기를 공부중입니다.

원래는 UI부터 맵까지 만드는게있는데 나중에 복습하며 정리하도록하겠습니다.

 

우선 오늘할건 나를 쳐다보는 AI를 만들어보겠습니다.

 

우선 캐릭터 BP를 하나 만들고 이름은아무거나..

 

그 후 사용할 SK를 메시에 설정해준다.

보통 위에 떠있고 이상한 곳을 보고있는데 트랜스폼 위치와 각도를 수정해줘서 화살표 방향과 콜리전에 잘 들어오게 만들어준다.

설정한 SK에 맞게 애니메이션 블루프린트를 만들어준다.

애니메이션블루프린트에는 아무거나 일단 넣고 아까 만든 캐릭터 BP에 애님 클래스를 지정해준다.

그후 맵에 배치해보자.

에디팅을 시작하면 해당 애니메이션을 잘 보여주고있는것을 볼 수 있다.

그럼 우리는 이제 이 사이에 계속 해당 머리가 플레이어를 바라보게 만들것이다.

본 트랜스폼이라는 녀석을 사용한다.

우선 본 트랜스폼을 누르면 디테일 패널에서 수정할 본을 누를수있게 나온다. 우리는 목을 플레이어쪽으로 회전시킬거기 때문에 Neck01을 선택해준다. 이건 sk마다 다를수있다.

그후 위치나 크기는 건들지 않을 거기때문에 그아래에 트랜슬레이션과 스케일, 알파는 핀으로 노출을 OFF시켜준다. 그럼 깔끔해진다.

가운데에 끼워주면 Warning이 뜰텐데 이건

현재 로테이션 불러오는게 Ignore라 그런다. Add to Exisiting으로 바꿔주면 오류는해결된다 Replace는 말그대로 설정한 값으로 설정해주는것이고 Add는 기존값에서 설정한 값을 더해주는것이다.(주의할것)

그리고 해당 회전값을 변수로 만들어주고.

이벤트그래프에서 FindLook at Rotation 함수

를 추가시켜주고 해당 캐릭터의 위치와 플레이어 위치를 비교하여 회전값을 얻어온걸로 위에서 만든 변수에 설정시켜준다. 그리고 게임을 시작해보면..

 

플레이어 위치에 맞게 고개가 돌아가게 된다.

에디팅 종료시 에러가 뜰텐데 Player캐릭터가 참조안되서 그런거다. 유효성 검사만 해주면된다.

그리고 점프나 앉으면 또 이상하게 보일 수 있기때문에 위에처럼 설정해준다. 뒤로가면 목이 180도꺾이는걸 방지하기위해 z축회전에 클램프도 설정해준다.

 

그리고 이제 해당 캐릭터가 플레이어를 볼수없으면 앞을 보고 있다가. 플레이어를 보면 확 쳐다보게 만들어보자. 우선 Bool변수를 하나추가한다. 그리고 아까 설정한 45도 각도들도 Min Max angle로 추가해준다.

그럼이제 Min보다 크거나 Max보다 작음면 CanSee가 Ture로 만약 아닐경우에는 False로 놓는다. (시야각도안이라면)

그리고 만약 CanSee가 Ture면 우리가 아까 적용햇던거처럼쳐다보기 아니라면 해당각도는 원래대로 돌아가게 한다.

근데 지금은 시야각도를 벗어나면 (CanSee가 False될때) 휙휙 돌아가기때문에

RinterpTo라는것을 이용해  천천히 원위치하게만들어준다.Interp Speed에 따라 돌아가는 속도가 달라진다.

대충 위와같은 느낌이 난다. 그러나 여전히 사각지대에서 시야로 들어가면 고개가 휙휙 돌아가기 때문에 앞선 CanSee상황에서도 똑같이 추가해준다.

 

 

그러나 여기서 InterpSpeed가 계속똑같으면 왓다갔다했을경우 고개가 원위치가면서 다시 플레이어에게 휙 돌아가기때문에 순간적으로 Delay를 넣어줘서 원위치까지 가게 만들어줘야한다. 

 

이런식으로 InterpTo가 진행중이면 빠르게 움직이고 아니라면 1초간 천천히움직이게된다.(1초간 다시 시야에 들어와도 플레이어를 쳐다보지않는다.)

대충 이런식으로 플레이어가 시야를 벗어나면 앞으로 보게된다.