미니게임 Scene들을 InGameScene_1, InGameScene_2으로 생각하면 이외에 크게 3가지 Scene으로 구성
- IntroScene(타이틀)
- LobbyScene
- BoardGameScene
1. IntroScene
- 시작하면 뜨는 화면, 각 클라이언트는 네트워크 연결 기능이 구현돼있는 Singleton 객체 생성받음. ⇒ Scene간 이동 시 네트워크 연결을 담당하는 오브젝트가 소멸하므로 계속 context를 유지해줄 필요가 있음
- 진행할 세션 내에서 사용할 이름 입력, 해당 이름은 서버 내에서 고유 Client ID와 매칭.
- Join을 누르면은 정한 이름을 패킷에 담아서 서버 연결 시도, 연결에 성공 시 LobbyScene으로 이동
2. LobbyScene
- 클라이언트 입장 시, 해당 클라이언트의 캐릭터 인스턴스 생성(검은 캐릭터). 그리고 미리 LobbyScene에 입장된 캐릭터들의 인스턴스(파란 캐릭터)도 생성
- 위 세 오브젝트 모두 같은 Controller 코드로 동작. 패킷에는 Position이 아닌 키보드 입력 값을 담아서 주고 받음. ⇒ 엔진에서 구현 된 자연스러운 충돌처리를 이용하기 위해 Position Update가 아닌 키보드 입력 값으로 이동 함수 실행.
- bool isSimulated; 참/거짓으로 씬 내에 있는 캐릭터 오브젝트가 내가 조종하는 객체인지 아니면 친구의 객체인지 구분.
- 서버의 simulateMove()로 누가 어디로 움직였는지 받아서 로컬 PC에서 해당 클라이언트 인스턴스를 update
🥴 Ongoing Problem
-
Scene 마다 캐릭터를 조종하는 방식이 다 다를 예정. 어캐 구현해야 할까?
⇒ Abs_Controller 라는 추상 클래스를 만들고 코어 기능들을 정의 한 다음에 각 Scene 컨트롤러 별로 Abs_Controller를 상속해서 각자 입맛에 맞게 override해서 정의 하면 될 듯.