구현 내용
1. 멀티 플레이 캐릭터 동기화
캐릭터 프리팹에 PhotonView 컴포넌트와 PhotonTransformView 컴포넌트를 추가해서 캐릭터 동기화
Position과 Rotation를 동기화하기 위해 PhotonTransformView를 다음과 같이 설정
RoomManager
private void Update()
{
if(PhotonNetwork.IsMasterClient)
{
if (_myIsReady && _enemyIsReady && !_isGameStart)
{
_isGameStart = true;
PhotonNetwork.LoadLevel("MultiBattleScene1");
}
}
}
Room의 두 Player가 모두 Ready 상태라면 PhotonNetwork.LoadLevel() 함수를 통해 씬 이동. PhotonNetwork.LoadLevel() 함수는 마스터 클라이언트에서만 실행 가능하기 때문에 위 코드와 같이 조건문 작성.
https://kkln2486.tistory.com/433
NetworkManager
private void Start()
{
if (GameManager.I.ScenesManager.CurrentSceneName == "MultiBattleScene1")
{
if (PhotonNetwork.IsMasterClient)
{
GameObject playerPrefab = PhotonNetwork.Instantiate("Prefabs/Characters/" + _playerData.Tag, _startposition1.position, Quaternion.identity);
GameManager.I.PlayerManager.Player = playerPrefab;
}
else
{
GameObject playerPrefab = PhotonNetwork.Instantiate("Prefabs/Characters/" + _playerData.Tag, _startposition2.position, Quaternion.identity);
GameManager.I.PlayerManager.Player = playerPrefab;
}
}
}
마스터 클라이언트라면 왼쪽, 아니라면 오른쪽에 PhotonNetwork.Instantiate() 함수를 통해 프리팹 생성
https://kkln2486.tistory.com/429
회고
오늘은 멀티 플레이의 배틀맵에서 캐릭터 동기화를 구현했다. PhotonView 컴포넌트와, PhotonTransformView 컴포넌트를 통해 동기화하는 가장 간편한 방법을 선택했다. Room에서 Ready를 하면 씬을 이동하도록 게임을 설계했기 때문에 일반적인 씬 이동을 사용하면 한번씩 상대 player가 입장하지 못하는 버그가 발생했다. 그래서 PhotonNetwork.LoadLevel() 함수를 통해 씬 이동을 했다. 그리고 DataManager의 저장된 Data가 PC1, PC2가 동일해지는 버그가 발생했다. 그래서 다른 캐릭터를 선택해도 동일한 캐릭터가 선택되서 멀티 대전이 시작됐다. 이유는 아마도 같은 PC에서 게임을 실행했기 때문에 저장된 Json이 중복되기 때문에 생긴 버그라고 예상된다. 아마도 개발을 완료하고 모바일과 PC로 테스트를 하면 해결 될 것 같다. 아직 캐릭터의 Position과 Rotation만 동기화를 했고, 애니메이션이나 점프, 스킬 등 동기화도 따로 진행해야 한다. 아직 갈 길이 멀지만 열심히해서 다음주까지 구글 스토어에 출시할 수 있도록 노력해보겠다!
'1인 개발 > Push And Slash' 카테고리의 다른 글
푸쉬앤슬래시 개인 프로젝트 24일차 (0) | 2024.06.13 |
---|---|
푸쉬앤슬래시 개인 프로젝트 23일차 (0) | 2024.06.13 |
포톤의 씬 이동 (0) | 2024.06.12 |
푸쉬앤슬래시 개인 프로젝트 21일차 (0) | 2024.06.11 |
푸쉬앤슬래시 개인 프로젝트 20일차 (1) | 2024.06.09 |