2017
04.18


언리얼 네트워크 게임을 만들 때


GameMode : 게임의 전체적인 일을 처리

PlayerController : 플레이어 개인적인 일을 처리

GameState : 게임의 전체 점수 등을 저장.

PlayerState : 플레이어 개인의 점수 등을 저장. 자동으로 리플리케이트된다고함

GameInstance : 모든 맵을 통틀에서 존재함. 가장 비싼놈인듯.


다섯가지 요소를 잘 사용해야함.


GameMode는 서버에만 존재함.


#. GameMode 와 PlayerController


 - 모든 플레이어에게 처리해줘야 하는 일은 GameMode에서 처리하는게 적합하다.

 - GameMode에서 Get All Actor of Class를 통해 플레이어 컨트롤러를 전부 가지고 있고, 루프를 돌려가면서 처리하면 된다. 

 - 주의할 점은 Run On Server로 Player Controller를 루프돌려가며 실행해도 리플리케이트는 일어나지않고

   서버에있는 PC끼리만 돌아간다. Multicast나 Run Owning Client 로 해줘야 리플리케이트됨. 

 - 클라이언트는 서버를 경유하지 않으면 GameMode를 접근할 수 없다

 - 같은 맥락으로 GameMode에서는 Multicast를 호출해도 클라이언트에는 GameMode가 없기때문에 fail.



#. PlayerController 와 Pawn


- 플레이어 캐릭터에 해당하는 Pawn에 Player Controller가 빙의해서 게임이 진행된다.

- 플레이어캐릭터 사망 시 Pawn은 삭제되기 때문에 안에있던 정보는 모두 날아가버림. 

   하지만 PlayerController는 플레이어가 접속을 끊지않는 한 유지된다. 



#. 플레이어의 점수는 어디에 저장하면 될까? PlayerController VS PlayerState


- 플레이어 컨트롤러는 보안상의 이유로 리플리케이트되지않고, PlayerState는 리플리케이트 된다고한다.

- PlayerController가 중심이 되어 서버에 저장되어야할것들은 PlayerState로 넘겨주는게 맞을듯.



#. GameInstance


- 어느 맵에서나 존재하기 때문에, 전역 변수와 같이 사용할 수 있다.

- UI등을 GameInstance에서 레퍼런스로 가지고 있다면, 쉽게 호출할 수 있음.

- 클라이언트에서 호출해도 된다.

- 변수들은 클라이언트 -> 서버 로 공유되는듯. 클라-클라 끼리는 값이 다름.




COMMENT