채팅 데모
이 채팅 데모는 채팅 api의 통합을 간단하게 보여주는 것이 목표입니다.
이 문서에서는 PUN 패키지에 들어있는 채팅 데모를 기반으로 동작 방식에 대해 간략하게 설명합니다.
채팅 API는 2가지의 중요 부분인 IChatClientListenerInterface
와 ChatClient
클래스를 중심으로 진행됩니다.
두 가지 모두 ChatGui
라고 하는 단일 컴포넌트내에서 처리됩니다.
ChatGui
ChatGui
는 이 데모의 전용 컴포넌트로, 게임에 맞도록 수정을 하기 위한 좋은 출발점입니다.
채팅의 모든 콜백을 얻기 위해 IChatClientListener
인터페이스를 중심으로 관리되며, 채팅 시스템을 실행하고 활성상태로 유지하기 위해 ChatClient
인스턴스를 유지한다는 것을 이해하는 것이 중요합니다.
IChatClientListener
IChatClientListener
인터페이스를 통해, 연결 상태, 사용자 상태 변경, 구독 및 수신 메시지와 같은 모든 콜백에 접근할 수 있습니다.
간단하기 때문에 이해하는데에는 큰 무리가 없을 것 입니다.
컴포넌트 내의 IChatClientListener
에 대한 아래 구현을 확인해보십시오.
C#
using UnityEngine;
using System.Collections;
using ExitGames.Client.Photon.Chat;
public class ChatTest : MonoBehaviour, IChatClientListener
{
#region IChatClientListener implementation
public void DebugReturn (ExitGames.Client.Photon.DebugLevel level, string message)
{
throw new System.NotImplementedException ();
}
public void OnDisconnected ()
{
throw new System.NotImplementedException ();
}
public void OnConnected ()
{
throw new System.NotImplementedException ();
}
public void OnChatStateChange (ChatState state)
{
throw new System.NotImplementedException ();
}
public void OnGetMessages (string channelName, string[] senders, object[] messages)
{
throw new System.NotImplementedException ();
}
public void OnPrivateMessage (string sender, object message, string channelName)
{
throw new System.NotImplementedException ();
}
public void OnSubscribed (string[] channels, bool[] results)
{
throw new System.NotImplementedException ();
}
public void OnUnsubscribed (string[] channels)
{
throw new System.NotImplementedException ();
}
public void OnStatusUpdate (string user, int status, bool gotMessage, object message)
{
throw new System.NotImplementedException ();
}
#endregion
}
ChatClient
먼저 컴포넌트는 ChatClient
를 인스턴스화하고 그 인스턴스의 참조를 간직해야 합니다.
그러면 컴포넌트가 매 업데이트 마다 연결을 계속 유지하고 수신 메시지 처리를 위해 ChatClientInstance.Service()
를 호출해 주어야 합니다.
프로젝트에서 채팅 동작에 대하여 보다 효과적이며, 중요한 성능 제어를 제공합니다.
ChatClient
인스턴스는 연결, 연결 해제, 메시지 보내기, 채널 구독 및 취소, 친구 추가, 사용자 상태 변경 등의 주요 진입점이 됩니다.
PUN과의 통합
PUN과 Chat SDK는 상호 보완적이며, 프로젝트에서 두 가지 모두 사용하는 것을 권장합니다. 이렇게 하는 것은 아무런 문제가 없으며 동일한 룸에 있지 않더라도 Photon 플레이어가 다른 플레이어들과 커뮤니케이션을 할 수 있도록 해주며 Chat SDK가 PUN 게임과 어떻게 통합을 하는 가에 대한 아주 좋은 예입니다.
해야할 것과 하지 말아야 할 것
이 SDK 덕택에 게임에서 채팅 서비스를 생성할 수 있습니다.
하지만 여기에서 고려해야할 중요한 사항들이 있습니다.
해야할 것
- 채팅 시스템의 모든 정보와 로그를 얻을 수 있도록
DebugReturn()
API 콜백을 적절하게 구현해야 합니다. - 플레이어의 모든 친구들과 정보를 공유하려면
SetOnlineStatus()
객체 'Message
를 잘 활용하십시오.
이는 매우 강력하며 공개 채널을 오픈하거나 글로벌 커뮤니케이션 시스템을 고안하는 것보다 훨씬 더 효과적입니다. - 채팅에서 사용되는 메모리를 현명하게 제한하기 위해
ChatClient.MessageLimit
사용을 고려하십시오. - Chat SDK는 단순히 문자열을 전송하는 데 그치지 않으며 사용자에서 사용자에게로만이 아닌 앱 엔진에서 앱 엔진으로 강력한 커뮤니케이션을 위해 복잡한 객체를 전달하는 창의적인 것을 만들 수 있습니다.
하지 말아야 할 것
Update()
에서Chatclient.Service()
를 실행하거나 필요에 따라 당신의 컴포넌트에서 이를 실행해 주어야 한다는 것을 잊지 마십시오.- 호환 플랫폼의 경우 PhotonServerSettings에서 "백그라운드에서 실행"을 사용하도록 설정해야 합니다.
이렇게 해 주지 않을경우 어플리케이션이 백그라운드로 전환되면 연결이 끊어집니다.