[Unreal] 31일차 - 무기 UI, 미니맵, 미니맵에 플레이어 표시, 적 패트롤

2024. 9. 14. 18:46Unreal Engine

728x90
반응형

무기 UI 계속

WBP_UIScreen의 Grahp로 넘어가서 코드를 이용해 ZOrder를 조절하도록 만들어야 한다.

ChangeGun 이름의 Custom Event 생성

 

 

다시 Designer 창으로 넘어간다.

두 이미지를 선택한 후 Details 창 최상단에 Is Variable을 체크한다.

 

 

다시 Graph 창으로 넘어가면 변수에 두 이미지가 추가된 것을 볼 수 있다.

 

 

해당 변수를 가져와서 Is Grenade가 True 또는 False일 때 각 이미지의 Z Order 값을 변화시킬 수 있다.

 

 

BP_Player의 ChangeGun 함수로 간다.

맨 뒤에 ChangeGun 커스텀 이벤트를 연결한다.

 

 

BP_Player의 BeginPlay 중간에 있는 ChangeGun을 UIScreen을 불러오는 부분 뒤로 옮겨야 한다.

 

 

잘 작동한다!

 

 


 

 

미니맵 만들기

RenderTarget을 이용한다.

UI 폴더에 Render Target 생성

 

 

그리고 Viewport에 Scene Caputre 2D 카메라를 배치한다.

 

 

Player Start의 Location 값을 복사해서 Scene Capture 2D 카메라에 붙여넣어 같은 Location을 설정했다.

 

 

그리고 Z 값을 480으로 높인다. 그리고 Orthographic 설정, Ortho Width는 2000.

 

 

그 아래 Texture Target에 RT_Minimap을 넣는다.

 

 

WBP_UIScreen으로 돌아가서 기본 Canvas Panel 아래에 Border 추가

 

 

Border의 설정은 앵커는 오른쪽 아래, 포지션은 아래와 같다.

 

 

Border의 자식으로 Image 하나를 끌어다 놓는다.

 

 

UI 폴더에 메테리얼 하나 생성

 

 

메테리얼을 더블클릭하여 들어가서 Domain을 User Interface로 변경한다.

 

 

Render Target을 끌어놓고 잇는다.

 

 

그리고 이미지에 방금 만든 메테리얼을 넣는다.

 

 

SceneCapture2D 카메라를 바닥을 보도록 -90도 돌린다.

 

 

미니맵이 잘 나온다.

 

 


 

 

미니맵 카메라가 플레이어를 따라오도록 설정

카메라가 지금은 고정이지만 플레이어를 따라오도록 설정해야 한다.

BP_Player 자체에 컴포넌트를 추가하면 된다.

SpringArm 아래에 SceneCaptureComponent2D를 놓고 위치는 초기화하고 Ortho, 2000 설정, Render Target도 넣는다.

 

 

SpringArm은 아래를 보게 -90 각도를 준다.

 

 

SpringArm의 Inherit Yaw, Inherit Pitch 체크 해제

 

 

의도한대로 미니맵이 잘 작동한다.

 

 


 

 

미니맵에 플레이어 표시

BP_Player에서 플레이어 머리 위에 표시가 보이도록 한다.

Mesh 아래에 Paper Sprite 추가, PlayerIndicator로 이름 변경

 

 

미니맵 표시용 png 다운로드해서 UI 폴더에 넣기

 

lifeunreal5/자료실/3장/arrow.png at main · araxrlab/lifeunreal5

인생 언리얼 5 프로젝트 교과서 . Contribute to araxrlab/lifeunreal5 development by creating an account on GitHub.

github.com

 

 

Sprite로 쓰기 위해서 Create Sprite 해야 한다.

 

 

BP_Player로 와서 만든 스프라이트를 넣는다.

 

 

플레이어 방향에 맞게 크기와 회전 수정

 

 

미니맵에 화살표가 잘 표시는 되지만 머리위에도 너무 잘 보인다.

 

 

PlayerIndicator에서 see를 검색한 후 Owner No See를 체크하면 나에게 보여지지 않는다.

 

 

잘 작동한다.

 

 


 

 

적 패트롤

현재는 적이 맵 전체를 인식해서 멀어도 플레이어에게 온다.

BP_Enemy에서 NavigationInvoker 값을 300, 600 정도로 줄인다.

 

 

BP_EnemyFSM안에 새로운 함수를 만든다.

 

 

Pure를 체크하여 Get으로만 쓰도록 설정한다.

 

 

함수의 Inputs와 Outputs를 설정한다.

 

 

노드는 아래와 같이 연결한다.

 

 

BP_EnemyFSM의 MoveState로 가서 이동 부분을 수정해야 한다.

 

 

Invoker 값은 500으로 올렸다.

 

 

이렇게 실행하면 적이 매 프레임 길을 찾기 때문에 떨리는 현상을 볼 수 있다.

 

 

RandomDestination 이름의 변수를 하나 만들어서 연결한다.

 

 

원래 있었던 노드는 잘라서 IdleState 맨 끝에 붙여넣는다.

 

 

여기까지 실행하면 처음 목적지까지만 이동하고 아직 그 다음 목적지로는 가지 못한다.

728x90
반응형