[unrealengine4]

2023-05-08 언리얼 수업 내용(입력, camera)

롤링페이퍼 2023. 5. 9. 03:01

본격적으로 캐릭터를 작업해 보자


 

★캐릭터 중심 맞춰주기

Mesh로 들어가 트렌스폼 수치를 위치 z 축 -90, 회전 z 축 -90으로 조절하자.

그리고 툴바로 올려놓아 플레이시켜보면 바닥과 일치하게 서있는 모습이 나올 것이다.

위치 z축 -90, 회전 z축 -90으로하면 얼추 맞게 나온다.


★캐릭터 움직여 보기

다들 게임을 했다시피 캐릭터는 특정 키 입력으로 특정위치로 움직이게 할 수 있다. 우리는 지금 이 기능을 넣어볼 것이다.

 

편집 -> 프로젝트 세팅 -> 입력 -> 축 매핑 오른쪽 + 클릭 -> 축 매핑 이름선언 이후 오른쪽 + 클릭-> 특정 키를 선언(W, S, D, A)

wsda(위,아래,우,좌)

 


★캐릭터 이벤트를 건들어보자

 

그전에 값이 제대로 들어오는지 확인해 보자

 

1) BP_Character의 이벤트로 들어가 MoveFB 이벤트를 추가

이벤트를 클릭

2) 아래 그림처럼 이벤트를 설정 후 클래스 디폴트 클릭 -> Pawn에 있는 Auto Possessplayer에서 Player0으로 설정

- 클래스 디폴트 : 클래스가 가지고 있는 기본값을 편집할 수 있다.

- 클래스 세팅 : 클래스의 대한 내용을 정리한다

3) 플레이 이후 반응 보기

비입력 시 아무 값도 주지 않기에 scale0이 들어가고, w입력 시 1.0 scale을 줬기에 1.0이 출력, s입력 시 -1.0 scale을 줬기에 -1.0이 출력된다.

왼쪽 순으로(비 입력, w입력,s입력)


값이 제대로 들어온다는 것을 확인했으니 본격적으로 움직이는 이벤트를 만들어 보자.

위처럼 만들어 주자

MoveFB는 위아래 이므로 world Direction에 x축을 1.0 준다.

MoveLR는 좌우 이므로 world Direction에 y축을 1.0 준다.

Aadd Movement Input함수 이름이고, Pawn은 Pawn의 맴버함수라는 뜻 이다

이후 실행하면 캐릭터가 움직이는 것을 볼 수 있을 것이다.


★애너미(플레이어 말고 다른 무언가) 생성해 보기

 

1) BP_Character의 이벤트에서 만들었던 것 전체를 잘라온다. 

이후 BP_Character파일을 오른쪽 클릭 후 '자손 블루프린트 클래스 생성'을 클릭한다.

이후 자손으로 생성된 블루프린트 이름을 BP_Player로 바꿔준다.

2)

만들어왔던 BP 두 개의 파일에 들어가 클래스 디폴트 클릭 -> Pawn에 있는 Auto Possessplayer를 설정해줘야 한다.

BP_Character는 DIsabled, BP_Player는 Player 0로 해주자

그리고 BP_Character로 돌아가 클래스 세팅을 클릭 후 Generate Abstract class를 클릭해 주자.

 

- Generate Abstract class : 구체적으로 완성하지 않는 추상클래스이다. 플레이어와 에너미를 분할하기 위한 기능. 하나의 인스턴스 생성을 불가능하게 한다.

 


★camera(카메라) 만들어 보기

 

BP_Player를 레벨에 올려놓고 플레이해 보면 잘 움직이는 것을 확인할 수 있다. 추가적으로 플레이 중 F8를 누르면 Character 시점을 벗어나서 자유롭게 볼 수 있게 해 준다. 이것을 탈출, 빙의로도 가능하다.

플레이중 활성화 된다.

그런데 실행을 하면 카메라의 위치가 캐릭터의 머리가 아닌 몸에 있는 것을 확인할수있다.

뭐야...내몸 돌려줘요..

이런 이유는 렌더링 파이프라인 중에 RS단계에서 진행되는 BackFace Culling 때문이다.

 

하지만 팔이라 다리 쪽을 보면 내부까지 렌더링 되어있는 것을 볼 수 있는데(관절 부분), 이는 내부가 아닌 앞면으로 감싸져 있기 때문에 내부가 보이는 것이다.


 

잠시 렌더링 파이프라인을 정리하자

 

※렌더링 파이프라인※

- IA(Input Assembler) : 투입된 정보 처리

input layout : 정점 형식

primitive topology : 연결 방식

vertex buffer : 실제 정보

index buffer : 연결 순서

 

- VS(Vertex Shader Stage) : 공간 변환. 각 정점에 대해서 GPU에서 사용되는 사용자 정의 함수 

Shader란? GPU에서 수행되는 사용자 정의 함수

 

- RS(Rasterizer Stage) : 픽셀화 시킴

캐릭터 뒷면의 Render가 날아가는 위치는 이곳에서 날아간다.

~izer : ~화 시키다. 즉 레스터화 시키다

 

이미지의 출력 방식 : Raster / Vecter

  • Rater(jpg, gif, png) : 모니터의 출력 방식.
  • Vecter(svg) : 점과 점 사이의 내용을 수식으로 표현. 관계로써 저장. 확대 축소하여도 변하지 않음. 인쇄 등

 

픽셀화 시키는 비용이 많이 든다. 때문에 안 나올 내용은 픽셀화 시키지 않는 방법으로 최적화한다.

이는 두 가지의 방법이 있다.

  • Clipping : 화면 밖의 보이지 않는 것들은 픽셀화시키지 않음, NDC공간 안에 들어오지 않는 대상들을 다 잘라낸다.
  • Backface Culling :  사용자가 보지 못하는 뒷면을 픽셀화 시키지 않음

- NDC(Normalized Device Coordinate) : 정규화된 장치 좌표

 

이를 통해 픽셀화가 되지 않는 부분은 보이지 않는다.

위의 캐릭터 내부에서 안쪽 면이 보이지 않는 이유(Backface Culling)이기도 하다.

 

 

- PS(Pixel Shader Stage) : 픽셀의 색상 결정

 

- OM(Output Merger)


 

 

본격적으로 카메라를 추가해 보자

 

1) BP_Player 블루프린터의 컴포넌트에서 camera 추가하기

camera라고 검색하면 된다.

그리고 카메라 위치를 조정해 주자

실행을 해보면 캐릭터의 등짝이 보일 것이다.

 

이번에는 마우스로 시점회전을 가능하도록 해보자

 

1) 이 것 또한 프로젝트 세팅 -> 입력 -> 축매핑 2개 추가를 해두도록 하자

마우스 X,Y는 직접 찾아 줘야한다.

2) BP_Player 이벤트로 들어가 아래와 똑같이 추가해 주자

위, 아래가 Yaw , 좌, 우가 Pitch이며 add yaw, add pitch로 추가할 수 있다.

 

하지만 이 상태에서 플레이를 해두면 마우스 좌우는 돼지만 위아래는 안 되는 것 을 볼 수 있다.

 

3) 좌우도 할 수 있게 해 두자

BP_Player의 뷰포트 -> 컴포넌트의 camera -> 오른쪽에 Camera Options에서 Use Pawn Control Rotation을 클릭해 준다.

이제 좌우도 정상적으로 작동하는 것을 확인할 수 있을 것이다.

 

하지만 우리가 카메라를 만든 목적은 시점을 바꿔도 캐릭터가 보이도록 하기 위해서 만든 것이지만 위와 같은 방법으로 했을 때는 시점 변화는 돼지만 캐릭터는 보이지 않는 현상이 있다. 이것은 다음 수업 때 정리하는 것으로 하겠다.