반응형
UI에 관한 건 스킵하겠다. 각자 본인 마다 원하는 UI 배치가 있을꺼니깐.
나는 이 포스팅에선 모바일 전용이니깐 키보드로 입력하는 것이 아닌
미리 정해진 구문을 누르면 메세지를 보낼 수 있게 했다.
RPC가 아닌 RaiseEvent 기능을 이용한 채팅 시스템
RaiseEvents에는 4가지 특징이 있다
- PhotonView가 필요없다
- Unreliable하게 이벤트를 보낼 수 있다
- 한 오브젝트에서 다른오브젝트로 보내거나 받을 수 있다
- 특정 플레이어에게만 보낼 수 있다
두 가지 종류의 이벤트가 있는데 Reliable한 이벤트와 Unreliable한 이벤트가 있다
- Reliable : 매우 중요한 이벤트고 어떠한 경우에서라도 전달되어야 한다. 네트워크가 얼마나 바쁘든지 간에 이 이벤트는 전달되야한다
- Unreliable : 별로 중요한 이벤트가 아닌 경우이며, 만약 네트워크가 바쁘다면 필수적으로 전달될 필요는 없다
또한 유니티의 OnEnable()과 OnDisable()를 사용해서 이벤트를 받아준다.
일단 여기 스크립트에는 RecevierGroup.All 이므로 나를 포함한 모든 클라이언트가 채팅을 받는다
ChatMessageHandler.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using ExitGames.Client.Photon;
using Photon.Pun;
using Photon.Realtime;
public class ChatMesseageHandler : MonoBehaviour
{
public Text messageReceived;
enum EventCodes//다른이벤트에 다른 코드를 가질 수 있다
{
chatmessage ,
}
private void OnEnable()
{
PhotonNetwork.NetworkingClient.EventReceived+=OnEvent;
}
private void OnDisable()
{
PhotonNetwork.NetworkingClient.EventReceived-=OnEvent;
}
public void OnEvent(EventData photonEvent)//포톤이벤트를 받는다
{
byte eventCode=photonEvent.Code;
object content=photonEvent.CustomData;//메세지 내용을 받는다
EventCodes code=(EventCodes)eventCode;
if(code==EventCodes.chatmessage)//일어난 이벤트가 chatmessage라면
{
object[] datas=content as object[];
messageReceived.text=(string)datas[0];
}
}//여기서 메세지를 받아준다
public void SendMsg(string msg)//메세지를 보낸다
{
object[] datas=new object[] {msg};
RaiseEventOptions options = new RaiseEventOptions
{
CachingOption=EventCaching.DoNotCache,//캐시를 허용하지않는다
//이렇게 안해두면 플레이어가 들어올 때마다 계속 이벤트를 받아낸다
Receivers = ReceiverGroup.All
//모든 플레이어가 받게
};
SendOptions sendOp=new SendOptions();
sendOp.Reliability=true;//Reliable한 송신 옵션
PhotonNetwork.RaiseEvent((byte)EventCodes.chatmessage,datas,options,sendOp);
//이벤트를 일으킨다
}
}
실행영상
출처 : https://doc.photonengine.com/pun/current/gameplay/rpcsandraiseevent
반응형
'유니티 > 모바일 멀티플레이 Shooting Game' 카테고리의 다른 글
Udemy 유니티 모바일 멀티플레이 TPS 슈팅게임 강의 리뷰 (1) | 2023.05.16 |
---|---|
유니티 RaiseEvent를 이용한 준비 완료 시스템 (2) | 2023.03.18 |
유니티 3D 멀티플레이 RPC이용법(플레이어 체력 깎기) (0) | 2023.02.24 |
유니티3D OnPhotonSerializeView() 사용법 (0) | 2023.02.05 |
유니티 Photon으로 간단하게 핑 확인법 (0) | 2023.01.28 |