Unity
유니티 멀티플레이 개발
민정e
2024. 9. 4. 10:50
멀티플레이
엄연히 말하자면 플레이어는 각각 다른게임을 플레이 하고있으나, 서버가 각 게임을 동기화 시켜 같은 화면이 나오도록 설계가 되어있다.
Photon Fusion2
https://doc.photonengine.com/fusion/current/tutorials/multi-climb
Fusion 2 Multi Climb Tutorial | Photon Engine
The sample is a first-person parkour racing game which demonstrates how to make use of client prediction, lag compensation, the
doc.photonengine.com
2.2.0버전 539 기준으로 작성
설치 후 유니티 > tools > fusion > dashboard 한 후 app cloude 를 fusion으로 생성한 후 app id 입력
Player스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Fusion; // Fusion 사용
public class Player : NetworkBehaviour
{
}
GameLogic 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Fusion; // Fusion 사용
public class GameLogic : NetworkBehaviour, IPlayerJoined, IPlayerLeft
{
[SerializeField] private NetworkPrefabRef playerPrefab;
[Networked, Capacity(12)] private NetworkDictionary<PlayerRef, Player> Players => default; // 사전용량속성. 플레이어의 절대한도 12
public void PlayerJoined(PlayerRef player)
{
if (HasStateAuthority)
{
NetworkObject playerObject = Runner.Spawn(playerPrefab, Vector3.up, Quaternion.identity, player); // 호스트 플레이어 생성
Players.Add(player, playerObject.GetComponent<Player>());
}
}
public void PlayerLeft(PlayerRef player)
{
if (!HasStateAuthority)
{
return;
}
if (Players.TryGet(player, out Player playerBehaviour))
{
Players.Remove(player);
Runner.Despawn(playerBehaviour.Object);
}
}
}
Settings > Menu Config => Max Players를 12로 바꾸어준다.
Prefab > Player에 player 스크립트를 넣어주고 Network Object를 생성해준다.
마찬가지로 Scene > Game 씬을 선택 후, Course > finish에 GameLogic 스크립트를 넣어주고 Network Object를 생성해준다. 그리고 GameLogic스크립트항목에 Player에 Player 프리팹을 넣어준다.
게임을 실행하면 Player가 정상적으로 생성되는것을 볼 수 있다.