가입하고
dashboard.photonengine.com/ko-KR/
여기에 들어가서
Photon PUN은 VRChat같은거 만들때 씀, 전부 간접통신임
Photon BOLT는 오버워치 같은거 만들때 쓰고 직접통신, NAT나 방화벽등으로 인해 직접연결이 불가한경우 릴레이를 통한 간접연결이 됨, 방장이 나가면 방이 닫힌다
설정한다
어플리케이션 ID 필요함
유니티로 가서
PUN1
assetstore.unity.com/packages/tools/network/photon-unity-networking-classic-free-1786
다운로드해
펀 ID를 넣자
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PhotonInit : Photon.PunBehaviour
{
public string serverName = "Default0001";
public int roomNumber = 0;
public Transform spawnPoint;
public GameObject playerPrefab;
// Start is called before the first frame update
void Start()
{
PhotonNetwork.ConnectUsingSettings(serverName);
PhotonNetwork.ConnectToBestCloudServer(serverName);
}
/// <summary>
/// 로비에 들어가기 성공했을때
/// </summary>
public override void OnConnectedToPhoton()
{
Debug.Log("ConnectedToPhoton");
}
/// <summary>
/// 로비에 들어가기 성공했을때
/// </summary>
public override void OnJoinedLobby()
{
Debug.Log("JoinedLobby");
PhotonNetwork.JoinRandomRoom();
}
/// <summary>
/// PhotonNetwork.autoJoinLobby 이 false 인 경우에만 마스터 서버에 연결되고 인증 후에 호출
/// </summary>
public override void OnConnectedToMaster()
{
Debug.Log("ConnectedToMaster");
PhotonNetwork.JoinLobby(); //로비접속
}
/// <summary>
/// 룸입장실패
/// </summary>
/// <param name="codeAndMsg"></param>
public override void OnPhotonRandomJoinFailed(object[] codeAndMsg)
{
Debug.LogError("PhotonRandomJoinFailed");
PhotonNetwork.CreateRoom(roomNumber.ToString());
}
/// <summary>
/// 룸생성실패
/// </summary>
/// <param name="codeAndMsg"></param>
public override void OnPhotonCreateRoomFailed(object[] codeAndMsg)
{
Debug.LogError("PhotonCreateRoomFailed");
PhotonNetwork.JoinRandomRoom();
}
/// <summary>
/// 룸생성 성공
/// </summary>
public override void OnCreatedRoom()
{
Debug.Log("CreatedRoom");
}
/// <summary>
/// 룸접속 성공
/// </summary>
public override void OnJoinedRoom()
{
Debug.Log("JoinedRoom");
CreatePlayer();
}
void CreatePlayer()
{
var pos = Vector3.zero;
var rot = Quaternion.identity;
if (spawnPoint != null)
{
pos = spawnPoint.position;
rot = spawnPoint.rotation;
}
string objName = "Player";//플레이어 프리팹이 없으면 기본 플레이어가 호출됨
if (playerPrefab != null)
{
objName = playerPrefab.name; //프리팹 이름은 Player로 하면 안됨
}
PhotonNetwork.Instantiate(objName, pos, rot);
}
// Update is called once per frame
void Update()
{
}
}
PUN2
https://assetstore.unity.com/packages/tools/network/pun-2-free-119922
다운로드해
펀 ID를 넣자
using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PhotonInit : MonoBehaviourPunCallbacks
{
public string serverName = "Default0001";
public int roomNumber = 0;
public Transform spawnPoint;
public GameObject playerPrefab;
// Start is called before the first frame update
void Start()
{
PhotonNetwork.ConnectUsingSettings();
PhotonNetwork.ConnectToBestCloudServer();
}
/// <summary>
/// 로비에 들어가기 성공했을때
/// </summary>
public override void OnJoinedLobby()
{
Debug.Log("JoinedLobby");
//PhotonNetwork.JoinRandomRoom(); //로비사용시
}
/// <summary>
/// PhotonNetwork.autoJoinLobby 이 false 인 경우에만 마스터 서버에 연결되고 인증 후에 호출
/// </summary>
public override void OnConnectedToMaster()
{
Debug.Log("ConnectedToMaster");
PhotonNetwork.JoinRandomRoom();
//PhotonNetwork.JoinLobby(); //로비접속 (로비사용시)
}
/// <summary>
/// 룸입장실패
/// </summary>
/// <param name="codeAndMsg"></param>
public override void OnJoinRandomFailed(short returnCode, string message)
{
Debug.LogError("PhotonRandomJoinFailed");
PhotonNetwork.CreateRoom(roomNumber.ToString());
}
/// <summary>
/// 룸생성실패
/// </summary>
/// <param name="codeAndMsg"></param>
public override void OnCreateRoomFailed(short returnCode, string message)
{
Debug.LogError("PhotonCreateRoomFailed");
PhotonNetwork.JoinRandomRoom();
}
/// <summary>
/// 룸생성 성공
/// </summary>
public override void OnCreatedRoom()
{
Debug.Log("CreatedRoom");
}
/// <summary>
/// 룸접속 성공
/// </summary>
public override void OnJoinedRoom()
{
Debug.Log("JoinedRoom");
CreatePlayer();
}
void CreatePlayer()
{
var pos = Vector3.zero;
var rot = Quaternion.identity;
if (spawnPoint != null)
{
pos = spawnPoint.position;
rot = spawnPoint.rotation;
}
string objName = "My Robot Kyle -done-";//플레이어 프리팹이 없으면 기본 플레이어가 호출됨
if (playerPrefab != null)
{
objName = playerPrefab.name; //프리팹 이름은 Player로 하면 안됨
}
PhotonNetwork.Instantiate(objName, pos, rot, 0);
}
// Update is called once per frame
void Update()
{
}
}
이렇게 만들어서
씬에 넣는다.
PUN2
api는 여기 참조
PUN1
doc-api.photonengine.com/ko-kr/pun/current/class_photon_1_1_pun_behaviour.html
실행하면 이렇게 나온다
PUN1
로그를 보면 이렇게
빨간줄이 있지만 단지 방이 없어서 뜬것이니 쫄지 말자 정상이다
PUN2
로그를 보면 이렇게
빨간줄이 있지만 단지 방이 없어서 뜬것이니 쫄지 말자 정상이다
시작하면 이렇게 나올것이다.
1. 포톤서버에 연결하고
2. 로비에 들어가서
3. 룸에 들어가는것이다
기본적인 네트워킹 시스템은 완성했다
'Unity > Photon' 카테고리의 다른 글
포톤 챗 (0) | 2021.07.07 |
---|---|
포톤 볼트 (0) | 2021.07.06 |
포톤 커스텀 플레이어 만들기 (0) | 2021.07.04 |