맵에 퍼즐을 배치하고, 퍼즐의 내용과 힌트를 멀티플레이로 연결해주었습니다.
퍼즐의 경우 협업한 팀원이 제작한 내용이며, 퍼즐 결과를 만든 뒤, 정답 내용을 ServerRpc 로 송신하도록 만들어주었습니다.
Rpc의 특성상, 정답을 int값 배열로 변환하여 전달하도록 만들어주었습니다.
//다시 시작하거나 라운드를 통과하였을 때 리스트를 다시 배정하는 코드
private void SetRound()
{
if (curRound >maxRound || Activatables.Count == curRound) return; //퍼즐이 모두 끝났거나 현재 라운드의 활성화될 오브젝트 수가 같다면 반환
List<int> numbers = new List<int>();
for (int i = 0; i < curRound + addtionalRound; i++)
{
if (i == 0)
{
lastNumber = -1;
}
int randomNumber = (Random.Range(0, Alters.Length));
if (randomNumber == lastNumber)
{
i--;
continue;
}
else
{
lastNumber = randomNumber;
Activatables.Add(Alters[randomNumber]); //선정된 석상이 리스트안에 없는 석상이면 리스트에 집어넣는다.
Observables.Add(candles[randomNumber]); //석상의 순서와 같게 같이 리스트에 집어넣는다.
numbers.Add(randomNumber);
}
}
if(isNetwork)
{
int[] ints = numbers.ToArray();
GameManager.Instance.repeater.SynchronizePuzzle1ServerRpc(ints);
Debug.Log("힌트 송신");
}
}
public void SetPuzzleByNetwork(int[] numbers)
{
if (GameManager.Instance.networkGameManager.StudentId == NetworkManager.Singleton.LocalClientId) return;
Debug.Log("힌트 수신");
for(int i = 0; i < numbers.Length; i++)
{
Activatables.Add(Alters[numbers[i]]);
Observables.Add(candles[numbers[i]]);
}
StartHintCoroutine();
}
전달받는 플레이어는 int 배열을 받은 뒤, 그 내용을 저장하여 동기화 시켜줍니다.
퍼즐 내용을 동기화할 때 사용하는 클래스입니다.
public class NetworkPuzzleRepeater : NetworkBehaviour
{
public override void OnNetworkSpawn()
{
GameManager.Instance.repeater = this;
}
[ServerRpc(RequireOwnership = false)]
public void SynchronizePuzzle1ServerRpc(int[] numbers)
{
SynchronizePuzzle1ClientRpc(numbers);
}
[ClientRpc]
public void SynchronizePuzzle1ClientRpc(int[] numbers)
{
//TODO : 게임 매니저 싱글톤에 Puzzle 올려서 퍼즐에 이 내용 넣어주고 작동시키기
Puzzle1 puzzle = (Puzzle1)PuzzleManager.Instance.subPuzzleList[0];
puzzle.SetPuzzleByNetwork(numbers);
}
}
현재 퍼즐의 정답을 보내어 동기화시켜주는 작업만 하고있으며,
이후 정답을 맞추었을때 보낼 Rpc등을 추가 작업할 예정입니다.
'내일배움캠프 > 프로젝트' 카테고리의 다른 글
팀 프로젝트 - 퍼즐 정보 관련 인터페이스화 (0) | 2024.12.23 |
---|---|
팀 프로젝트 - 유령 배치, Navmesh 동적 생성 (0) | 2024.12.17 |
팀 프로젝트 - 맵 데이터, 맵 생성 (0) | 2024.12.16 |
팀 프로젝트 - 아이템 기반 (1) | 2024.12.13 |
팀 프로젝트 - 맵 에디터 기반 제작 (0) | 2024.12.11 |