본문 바로가기
Unity

유니티 멀티플레이 개발

by 민정e 2024. 9. 4.

멀티플레이 

 

엄연히 말하자면 플레이어는 각각 다른게임을 플레이 하고있으나, 서버가 각 게임을 동기화 시켜 같은 화면이 나오도록 설계가 되어있다.

 

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가 정상적으로 생성되는것을 볼 수 있다.