728x90
Unity Photon Pun2 통신
public class _ConnectionManager : MonoBehaviourPunCallbacks
{
public InputField chatInput;
public Text chatText;
void Start()
{
PhotonNetwork.ConnectUsingSettings();
}
public override void OnConnectedToMaster()
{
Debug.Log("Connected to Photon master Server");
PhotonNetwork.JoinRandomRoom();
}
public overrid void OnJoinRandomFailed(short returnCode, string message)
{
Debug.Log("Failed to join a room. Creating a new room");
PhotonNetwork.CreateRoom(null, new RoomOptions{ MaxPlayers = 4 });
}
public override void OnJoinedRoom()
{
Debug.Log("Joined Room Successful");
string joinMessage = $"{PhotonNetwork.LocalPlayer.NickName} has Joined";
foreach (string message in PhotonNetwork.LocalPlayer.CustomProperties.Keys)
{
chatText.text += message + "\n";
}
}
public void SendChatMessage(string message)
{
photonView.RPC("ReceiveChatMessage", RpcTarget.All, message);
}
/// <summary>
/// RPC ( 원격 프로시저 호출)
/// 이 속성은 해당 메서드가 Photon의 RPC 시스템을 사용하여 원격으로 호출되어야 함을 표기
/// </summary>
[PunRPC]
public void ReceiveChatMessage(string message, PhotonMessageInfo info)
{
string senderName = info.Sender.NickName;
string formattedMessage = $"{senderName}: {message}";
chatText.text += formattedMessage + "\n";
ExitGames.Client.Photon.Hashtable customProperties = new ExitGames.Client.Photon.Hashtable();
customProperties.Add(message, true);
info.Sender.SetCustomProperties(customProperties);
}
public void OnSendButtonClicked()
{
string message = chatInput.text;
if(!string.IsNullOrEmpty(message))
{
SendChatMessage(message);
chatInput.text = string.Empty;
}
}
}
실행순서
1. Start() / Phton 서버에 연결 시도
2. OnConnectedToMaster() / 서버연결에 성공하면 OnConnectedToMaster() 콜백 메서드 호출
/ PhotonNetwork.JoinRandomRoom() 호출하여 랜덤한 방에 참여 시도
3. OnJoinRandomFailed() / 랜덤방에 참여 실패시 OnJoinRandomFailed() 콜백 메서드 호출
/ PhotonNetwork.CreateRoom() 호출하여 새로운 방 생성, 최대 플레이어 수 지정
4. OnJoinedRoom() / 방 참여에 성공하면 OnJoinedRoom() 콜백 메서드 호출
/ 플레이어가 방에 참여 했다는 메시지를 SendChatMessage() 를 통해 전송
/ 플레이어의 CustomProperties에 저장된 기존 채팅 메시지를 foreach 루프를 사용하여 UI에 표시
5. SendChatMessage() / SendChatMessage() 메서드가 호출되면 현재 플레이어의 RPC를 통해 모든 플레이어에게 채팅 메시지를 보낸다
/ ReceiveChatMessage() / RPC가 호출된다
6. ReceiveChatMessage() / 다른 플레이어가 채팅 메시지를 보내면 ReceiveChatmessage() RPC가 호출된다
728x90
'c#' 카테고리의 다른 글
DesignPatterns (0) | 2023.09.22 |
---|---|
비주얼 스튜디오 코드에서 새 프로젝트 생성하기 (0) | 2023.08.31 |
[gitlab] 커밋오류 Another git process seems to be running in this repository 어쩌고.. (0) | 2023.06.07 |
[C#] LINQ Join (0) | 2023.02.11 |
C# 연습문제 모음 (0) | 2023.02.06 |