ãããŸã§ã¯ããã¬ã€ã€ãŒãæ¢ã«ã«ãŒã ã«åå ããŠããããšãåæã«ããŠãåãã«ãŒã å ã®ä»ãã¬ã€ã€ãŒãšã®åæïŒðïŒæ¹æ³ã«ã€ããŠè§£èª¬ããŠããŸãããããããã¯ããã®åæã«ãªã£ãŠããæ¥ç¶ïŒð€ïŒæ¹æ³ã«ã€ããŠè§£èª¬ããŠãããŸãã
ãŸãããã®ãã£ãã¿ãŒã§ã¯ãæ¥ç¶ããããã¡ã€ãã³ã°ã§äœ¿çšããPUN2ã®æ©èœã詳ãã玹ä»ããŸãã
æ¥ç¶
ãã¹ã¿ãŒãµãŒããŒãžæ¥ç¶
Photonã®ãµãŒããŒã«æ¥ç¶ããã«ã¯ãPhotonNetwork.ConnectUsingSettings()
ã䜿çšããŸããæåãããšããã¹ã¿ãŒãµãŒããŒãžæ¥ç¶ãããç¶æ
ã«ãªããŸãã
// PhotonServerSettingsã®èšå®å
容ã䜿ã£ãŠããã¹ã¿ãŒãµãŒããŒãžæ¥ç¶ãã
PhotonNetwork.ConnectUsingSettings();
çµæ | åŒã°ããã³ãŒã«ãã㯠|
---|---|
æå | OnConnectedToMaster() |
倱æ | OnDisconnected() |
Photonã®ãµãŒããŒããåæ
Photonã®ãµãŒããŒããåæããã«ã¯ãPhotonNetwork.Disconnect()
ã䜿çšããŸãããã¹ã¿ãŒãµãŒããŒãšã²ãŒã ãµãŒããŒã®ã©ã¡ãã«æ¥ç¶ããŠããç¶æ
ã§ããæ£ããåäœããŸãã
// Photonã®ãµãŒããŒããåæãã
PhotonNetwork.Disconnect();
çµæ | åŒã°ããã³ãŒã«ãã㯠|
---|---|
å®äº | OnDisconnected() |
æ¥ç¶é¢é£ã®ã³ãŒã«ããã¯
MonoBehaviourPunCallbacks
ãç¶æ¿ããŠããã¹ã¯ãªããã¯ããã¹ã¿ãŒãµãŒããŒãžæ¥ç¶ããæããPhotonã®ãµãŒããŒããåæãããæã®ã³ãŒã«ããã¯ãåãåãããšãã§ããŸããPhotonã®ãµãŒããŒããåæãããæã«ã¯ãã³ãŒã«ããã¯ã®åŒæ°ããåæãããåå ïŒDisconnectCause
ïŒãååŸã§ããŸãã
using Photon.Pun;
using Photon.Realtime;
using UnityEngine;
public class ConnectionCallbacksSample : MonoBehaviourPunCallbacks
{
// ãã¹ã¿ãŒãµãŒããŒãžã®æ¥ç¶ãæåããæã«åŒã°ããã³ãŒã«ããã¯
public override void OnConnectedToMaster() {
Debug.Log("ãã¹ã¿ãŒãµãŒããŒã«æ¥ç¶ããŸãã");
}
// Photonã®ãµãŒããŒããåæãããæã«åŒã°ããã³ãŒã«ããã¯
public override void OnDisconnected(DisconnectCause cause) {
Debug.Log($"ãµãŒããŒãšã®æ¥ç¶ãåæãããŸãã: {cause.ToString()}");
}
}
ã«ãŒã äœæ
ã«ãŒã ã®äœæ
æ°èŠã§ã«ãŒã ãäœæããã«ã¯ãPhotonNetwork.CreateRoom()
ã䜿çšããŸããã«ãŒã ã®äœæãæåãããšãäœæãããã¬ã€ã€ãŒã¯èªåçã«ãã®ã«ãŒã ãžåå ããŸãã
// "Room"ãšããååã®ã«ãŒã ãäœæãã
PhotonNetwork.CreateRoom("Room");
çµæ | åŒã°ããã³ãŒã«ãã㯠|
---|---|
æå |
OnCreateRoom() ãOnJoinedRoom()
|
倱æ | OnCreateRoomFailed() |
第äžåŒæ°ã«ã¯äœæããã«ãŒã åãæž¡ããŸãããæ¢ã«åãã«ãŒã åã®ã«ãŒã ãååšããå Žåã«ã¯ãã«ãŒã ã®äœæã倱æããŸããã«ãŒã åã«null
ã""
ãæž¡ããšããŠããŒã¯ãªã«ãŒã åãèªåçæãããããã«ãªã£ãŠããã®ã§ãã«ãŒã ã®äœæã®å€±æããªãã¹ãåé¿ãããæã«æŽ»çšã§ããã§ãããã
// ãŠããŒã¯ãªã«ãŒã åãèªåçæããŠã«ãŒã ãäœæãã
PhotonNetwork.CreateRoom(null);
ã«ãŒã äœæã®ã³ãŒã«ããã¯
MonoBehaviourPunCallbacks
ãç¶æ¿ããŠããã¹ã¯ãªããã¯ãã«ãŒã äœæé¢é£ã®ã³ãŒã«ããã¯ãåãåãããšãã§ããŸããã«ãŒã ã®äœæã倱æããæã«ã¯ãã³ãŒã«ããã¯ã®åŒæ°ãããšã©ãŒã¡ãã»ãŒãžãååŸããããšãã§ããŸãã
using Photon.Pun;
using UnityEngine;
public class CreateRoomCallbacksSample : MonoBehaviourPunCallbacks
{
// ã«ãŒã ã®äœæãæåããæã«åŒã°ããã³ãŒã«ããã¯
public override void OnCreatedRoom() {
Debug.Log("ã«ãŒã ã®äœæã«æåããŸãã");
}
// ã«ãŒã ã®äœæã倱æããæã«åŒã°ããã³ãŒã«ããã¯
public override void OnCreateRoomFailed(short returnCode, string message) {
Debug.Log($"ã«ãŒã ã®äœæã«å€±æããŸãã: {message}");
}
}
ã«ãŒã èšå®
PhotonNetwork.CreateRoom()
ã®ç¬¬äºåŒæ°ãããã«ãŒã èšå®ïŒRoomOptions
ïŒãæž¡ãããšãã§ããŸãã
// ã«ãŒã ã®ã«ã¹ã¿ã ããããã£ã®åæå€
var initialProps = new ExitGames.Client.Photon.Hashtable();
initialProps["DisplayName"] = $"{PhotonNetwork.NickName}ã®éšå±";
initialProps["Message"] = "誰ã§ãåå OKïŒ";
// ãããŒã®ã«ãŒã æ
å ±ããååŸã§ããã«ã¹ã¿ã ããããã£ïŒããŒã®é
åïŒ
var propsForLobby = new[] { "DisplayName", "Message" };
// äœæããã«ãŒã ã®ã«ãŒã èšå®ãè¡ã
var roomOptions = new RoomOptions();
roomOptions.MaxPlayers = 4;
roomOptions.CustomRoomProperties = initialProps;
roomOptions.CustomRoomPropertiesForLobby = propsForLobby;
PhotonNetwork.CreateRoom("Room", roomOptions);
ã«ãŒã äœææã«ãã䜿ãã«ãŒã èšå®ã®å€ãã以äžã®è¡šã«ç€ºããŸãã
åå | ããã©ã«ãå€ââââ | 説æ |
---|---|---|
roomOptions.MaxPlayers |
0 ïŒç¡å¶éïŒ |
ã«ãŒã ã«åå ã§ããæå€§ãã¬ã€ã€ãŒæ° |
roomOptions.IsOpen |
true |
ã«ãŒã ãžã®åå ãèš±å¯ãããŠãããã©ãã |
roomOptions.IsVisible |
true |
ã«ãŒã ãå ¬éãããŠããïŒãããŒããã«ãŒã æ å ±ãååŸã§ããïŒãã©ãã |
roomOptions. CustomRoomProperties
|
null |
ã«ãŒã ã®ã«ã¹ã¿ã ããããã£ã®åæå€ |
roomOptions. CustomRoomPropertiesForLobby
|
new string[0] |
ãããŒã®ã«ãŒã æ å ±ããååŸã§ããã«ã¹ã¿ã ããããã£ïŒããŒã®é åïŒ |
ã«ãŒã åå
ã«ãŒã ãžåå ããæ©èœã¯è€æ°çšæãããŠããã®ã§ãçšéã«å¿ããŠäœ¿ãåããŸãããã
ã«ãŒã åãæå®ããŠã«ãŒã ãžåå
æããæè»œã«ã«ãŒã ãžåå ãããªããPhotonNetwork.JoinOrCreateRoom()
ã䟿å©ã§ãã第äžåŒæ°ã§æå®ããã«ãŒã åã®ã«ãŒã ããæ¢ã«ååšããŠãããªãåå ãååšããªããã°æ°èŠã§ã«ãŒã ãäœæããŠããåå ããŸããæ¢ã«ã«ãŒã ãååšããŠããŠããã«ãŒã ãæºå¡ããŸãã¯ãã«ãŒã ãžã®åå ãèš±å¯ãããŠããªãå Žåãªã©ã¯ãã«ãŒã ã®åå ã«å€±æããŸãã
// "Room"ãšããååã®ã«ãŒã ã«åå ããïŒã«ãŒã ãååšããªããã°äœæããŠåå ããïŒ
PhotonNetwork.JoinOrCreateRoom("Room", new RoomOptions(), TypedLobby.Default);
çµæ | åŒã°ããã³ãŒã«ãã㯠|
---|---|
æåïŒæ¢ã«ååšããã«ãŒã ãžåå ïŒ | OnJoinedRoom() |
æåïŒæ°èŠã§ã«ãŒã ãäœæããŠåå ïŒ |
OnCreateRoom() ãOnJoinedRoom()
|
倱æ | OnJoinRoomFailed() |
ã«ãŒã ãæ¢ã«ååšããŠããããšãããã£ãŠãããªããPhotonNetwork.JoinRoom()
ã䜿çšããŠã«ãŒã ãžåå ã§ããŸããåœç¶ã§ãããã«ãŒã ãååšããªããã°å€±æããŸããPhotonNetwork.JoinOrCreateRoom()
ãšåãããã«ãã«ãŒã ãæºå¡ããŸãã¯ãã«ãŒã ãžã®åå ãèš±å¯ãããŠããªãå Žåãªã©ã§ã倱æããŸãã
// "Room"ãšããååã®ã«ãŒã ã«åå ããïŒã«ãŒã ãååšããªããã°å€±æïŒ
PhotonNetwork.JoinRoom("Room");
çµæ | åŒã°ããã³ãŒã«ãã㯠|
---|---|
æå | OnJoinedRoom() |
倱æ | OnJoinRoomFailed() |
ã©ã³ãã ãªã«ãŒã ãžåå
PhotonNetwork.JoinRandomRoom()
ã§ãæ¢ã«ååšããŠããã«ãŒã ã®äžã®äžã€ã«ã©ã³ãã ã«åå ã§ããŸããã«ãŒã ãæºå¡ãã«ãŒã ãžã®åå ãèš±å¯ãããŠãªããã«ãŒã ãéå
¬éããããã®äžã€ã§ãåœãŠã¯ãŸãã«ãŒã ã¯ãã©ã³ãã ã®å¯Ÿè±¡ããé€å€ãããŸããã©ã³ãã ã®å¯Ÿè±¡ã«åœãŠã¯ãŸãã«ãŒã ãäžã€ãååšããªãå Žåã¯ãã«ãŒã ã®åå ã«å€±æããŸãã
// æ¢ã«ååšããã©ã³ãã ãªã«ãŒã ã«åå ãã
PhotonNetwork.JoinRandomRoom();
çµæ | åŒã°ããã³ãŒã«ãã㯠|
---|---|
æå | OnJoinedRoom() |
倱æ | OnJoinRandomFailed() |
PhotonNetwork.JoinRandomRoom()
ã®ç¬¬äžåŒæ°ãšç¬¬äºåŒæ°ã§ãã«ãŒã ã®ã«ã¹ã¿ã ããããã£ãšãæå€§åå 人æ°ã®çµãèŸŒã¿æ¡ä»¶ãæå®ããããšãã§ããŸããçµãèŸŒã¿æ¡ä»¶ãæå®ãããšãæ¡ä»¶ãšäžèŽããã«ã¹ã¿ã ããããã£ã®å€ãšãæå€§åå 人æ°ãèšå®ãããŠããã«ãŒã ã®ã¿ããã©ã³ãã ã®å¯Ÿè±¡ã«ãªããŸãã
// ã«ãŒã ã®ã«ã¹ã¿ã ããããã£ã®çµãèŸŒã¿æ¡ä»¶
var expectedProps = new Hashtable();
expectedProps["Mode"] = "TeamDeathmatch";
// æ¢ã«ååšããã©ã³ãã ãªã«ãŒã ã«ïŒæ¡ä»¶ãçµã蟌ãã§ïŒåå ãã
PhotonNetwork.JoinRandomRoom(expectedProps, 8);
ãŸãã第äžåŒæ°ã«null
ãã第äºåŒæ°ã«0
ãæž¡ããšãçæ¹ã®çµãèŸŒã¿æ¡ä»¶ã®ã¿ãæå®ã§ããŸãã
// ã«ãŒã ã®ã«ã¹ã¿ã ããããã£ã®çµãèŸŒã¿æ¡ä»¶ã®ã¿æå®ãã
PhotonNetwork.JoinRandomRoom(expectedProps, 0);
// æå€§åå 人æ°ã®çµãèŸŒã¿æ¡ä»¶ã®ã¿æå®ãã
PhotonNetwork.JoinRandomRoom(null, 8);
ã«ãŒã åå ã®ã³ãŒã«ããã¯
MonoBehaviourPunCallbacks
ãç¶æ¿ããŠããã¹ã¯ãªããã¯ãã«ãŒã åå é¢é£ã®ã³ãŒã«ããã¯ãåãåãããšãã§ããŸããã«ãŒã ãžã®åå ã倱æããæã«åŒã°ããã³ãŒã«ããã¯ã¯ãã«ãŒã åãæå®ããæãšãã©ã³ãã ã®æãšã§ãå¥ã«çšæãããŠããŸããã©ã³ãã ãªã«ãŒã ãžã®åå ã倱æããã®ã¯ãã©ã³ãã ã§åå ã§ããã«ãŒã ãååšããªãå Žåãã»ãšãã©ãªã®ã§ãã³ãŒã«ããã¯ããæ°èŠã§ã«ãŒã ãäœæããåŠçãªã©ãå
¥ããŠãããšè¯ãã§ãããã
using Photon.Pun;
using UnityEngine;
public class JoinRoomCallbacksSample : MonoBehaviourPunCallbacks
{
// ã«ãŒã ãžã®åå ãæåããæã«åŒã°ããã³ãŒã«ããã¯
public override void OnJoinedRoom() {
Debug.Log("ã«ãŒã ãžåå ããŸãã");
}
// ã«ãŒã åãæå®ããã«ãŒã ãžã®åå ã倱æããæã«åŒã°ããã³ãŒã«ããã¯
public override void OnJoinRoomFailed(short returnCode, string message) {
Debug.Log($"ã«ãŒã ãžã®åå ã«å€±æããŸãã: {message}");
}
// ã©ã³ãã ãªã«ãŒã ãžã®åå ã倱æããæã«åŒã°ããã³ãŒã«ããã¯
public override void OnJoinRandomFailed(short returnCode, string message) {
// ã©ã³ãã ã§åå ã§ããã«ãŒã ãååšããªããªããæ°èŠã§ã«ãŒã ãäœæãã
PhotonNetwork.CreateRoom(null);
}
}
ã«ãŒã éåº
ã«ãŒã ããéåº
ã«ãŒã ããéåºããã«ã¯ãPhotonNetwork.LeaveRoom()
ã䜿çšããŸããã«ãŒã ããéåºããåŸã¯ãå
ã®ãã¹ã¿ãŒãµãŒããŒãžåã³è»¢éãããã®ã§ãOnConnectedToMaster()
ã³ãŒã«ããã¯ãåŒã°ããŸãã
// ã«ãŒã ããéåºãã
PhotonNetwork.LeaveRoom();
çµæ | åŒã°ããã³ãŒã«ãã㯠|
---|---|
å®äº |
OnLeftRoom() ãOnConnectedToMaster()
|
ã«ãŒã éåºã®ã³ãŒã«ããã¯
MonoBehaviourPunCallbacks
ãç¶æ¿ããŠããã¹ã¯ãªããã¯ãã«ãŒã éåºã®ã³ãŒã«ããã¯ãåãåãããšãã§ããŸãã
using Photon.Pun;
using UnityEngine;
public class LeftRoomCallbacksSample : MonoBehaviourPunCallbacks
{
// ã«ãŒã ããéåºããæã«åŒã°ããã³ãŒã«ããã¯
public override void OnLeftRoom() {
Debug.Log("ã«ãŒã ããéåºããŸãã");
}
}
ãããŒ
ãããŒãžåå
PhotonNetwork.JoinLobby()
ã§ããããŒãžåå ã§ããŸãããããŒãžåå ããŠããéã¯ãã«ãŒã ãªã¹ããæŽæ°ãããæã«åŒã°ããã³ãŒã«ããã¯ïŒOnRoomListUpdate()
ïŒãåãåãããšãã§ããŸãã
// ãããŒãžåå ãã
PhotonNetwork.JoinLobby();
çµæ | åŒã°ããã³ãŒã«ãã㯠|
---|---|
å®äº | OnJoinedLobby() |
ãããŒããéåº
ãããŒããéåºããã«ã¯ãPhotonNetwork.LeaveLobby()
ã䜿çšããŸããã«ãŒã ãžåå ããæã«ã¯ãèªåçã«ãã¹ã¿ãŒãµãŒããŒãåæããããšã«ãªããããæç€ºçã«ãããŒããéåºããå¿
èŠã¯ãããŸããã
// ãããŒããéåºãã
PhotonNetwork.LeaveLobby();
çµæ | åŒã°ããã³ãŒã«ãã㯠|
---|---|
å®äº | OnLeftLobby() |
ãããŒé¢é£ã®ã³ãŒã«ããã¯
MonoBehaviourPunCallbacks
ãç¶æ¿ããŠããã¹ã¯ãªããã¯ããããŒé¢é£ã®ã³ãŒã«ããã¯ãåãåãããšãã§ããŸããã«ãŒã ãªã¹ããæŽæ°ãããæã«åŒã°ããã³ãŒã«ããã¯ã®åŒæ°ã«ã¯ãæŽæ°ãããã«ãŒã æ
å ±ïŒRoomInfo
ïŒã®å·®åã®ã¿ã远å ãããŠããŸãã
using System.Collections.Generic;
using Photon.Pun;
using Photon.Realtime;
using UnityEngine;
public class LobbyCallbacksSample : MonoBehaviourPunCallbacks
{
// ãããŒãžåå ããæã«åŒã°ããã³ãŒã«ããã¯
public override void OnJoinedLobby() {
Debug.Log("ãããŒãžåå ããŸãã");
}
// ã«ãŒã ãªã¹ããæŽæ°ãããæã«åŒã°ããã³ãŒã«ããã¯
public override void OnRoomListUpdate(List<RoomInfo> roomList) {
foreach (var info in roomList) {
if (!info.RemovedFromList) {
Debug.Log($"ã«ãŒã æŽæ°: {info.Name}({info.PlayerCount}/{info.MaxPlayers})");
} else {
Debug.Log($"ã«ãŒã åé€: {info.Name}");
}
}
}
// ãããŒããéåºããæã«åŒã°ããã³ãŒã«ããã¯
public override void OnLeftLobby() {
Debug.Log("ãããŒããéåºããŸãã");
}
}
ð¶ ãªãã©ã€ã³ã¢ãŒã
PUN2ã§ã¯ãªãã©ã€ã³ã¢ãŒãïŒOffline ModeïŒãæå¹ã«ããããšã§ãPhotonNetwork
ãPhotonView
ãªã©ã®æ©èœãããµãŒããŒã«æ¥ç¶ããã«ããŒã«ã«ã§åäœãããããšãã§ããŸãããã®æ©èœã䜿ãã°ãã·ã³ã°ã«ãã¬ã€ã¢ãŒããå®è£
ããæã§ããªã³ã©ã€ã³ããªãã©ã€ã³ãã§æ¡ä»¶åå²ãããããªåŠçãã»ãŒäžèŠã«ãªããåãã³ãŒãããã®ãŸãŸåå©çšã§ããŸãã
using Photon.Pun;
using UnityEngine;
public class OfflineModeSample : MonoBehaviour
{
public bool isOffline = false;
public void Connect() {
if (!isOffline) {
PhotonNetwork.ConnectUsingSettings();
} else {
PhotonNetwork.OfflineMode = true;
}
}
public void Disconnect() {
if (!isOffline) {
PhotonNetwork.Disconnect();
} else {
PhotonNetwork.OfflineMode = false;
}
}
}
ããã¯ãããŸã§ããªã³ã©ã€ã³ã§åé¡ãªãåäœããã³ãŒãããªãã©ã€ã³ã§ãåäœããããã«ãªãæ©èœã§ãããªãã©ã€ã³ã¢ãŒãäžã§åäœããã³ãŒããå®è£ ãããšããŠãããªã³ã©ã€ã³ã§åäœããããšãä¿èšŒãããããã§ã¯ãªãããšã«æ³šæããŠãã ããããªã³ã©ã€ã³ã§ã¡ãããšåããã©ããã®ç¢ºèªã»ãã¹ãã¯ãå¿ ããªã³ã©ã€ã³ã§è¡ãããã«ããŸãããã