오늘은 Photon Pun2를 이용하여
멀티플레이 게임의 기초 플로우를 구현해 보겠다.
타이틀 -> 로비(방 생성/입장) -> 룸(게임 시작) -> 인게임 동기화 -> 퇴장
으로 이어지는 전체적인 네트워크 게임의 흐름을 구현하는 데 초점을 맞춰서 진행
IPunObservable)와 함수 동기화(RPC)의 차이코드 구현 전, 오늘 배운 PUN2의 핵심 개념들을 정리
true: 내가 조종하는 캐릭터. (입력 처리 O)false: 다른 사람의 캐릭터. (입력 처리 X, 위치 동기화만 받음)멀티플레이에서 데이터를 동기화 하는 방법은 크게 두 가지.
| 구분 | IPunObservable (변수 동기화) | RPC (함수 동기화) |
|---|---|---|
| 방식 | 데이터 스트리밍 (계속 보냄) | 원격 함수 호출 (한 번 명령) |
| 사용처 | 체력, 애니메이션 상태, 지속형 스킬(레이저) | 총알 발사, 채팅, 아이템 획득, 사운드 재생 |
| 함수 | OnPhotonSerializeView | [PunRPC] 붙은 함수 |
| 활용 | SendNext / ReceiveNext로 값을 덮어씌움 | RpcTarget.All 등으로 모두에게 실행 명령 |

타이틀에서 마스터 서버에 접속(ConnectUsingSettings)한 후
로비에 진입하여 방을 생성하거나 입장
OnRoomListUpdate 에서 별도의 스크립트 없이
람다식을 활용해 버튼 연결
// LobbyManager.cs
public override void OnRoomListUpdate(List<RoomInfo> roomList)
{
foreach (Transform child in roomListPanel) Destroy(child.gameObject);
foreach (RoomInfo roomInfo in roomList)
{
if (roomInfo.RemovedFromList) continue; // 삭제된 방 패스
GameObject room = Instantiate(roomPrefab, roomListPanel);
room.GetComponentInChildren<Text>().text = roomInfo.Name;
string currentRoomName = roomInfo.Name;
room.GetComponent<Button>().onClick.AddListener(() =>
{
PhotonNetwork.JoinRoom(currentRoomName);
});
}
}

룸에선 간단한 시작 버튼

연습 끝
간단한 개념 정리 후 따로 연습해 본 시간이 더 긴 듯
내일은 DataBase