안녕하세요

포톤 코리아(Photon Engine)입니다.




유니티(Unity 3D)에서 채팅을 만들적에

꼭 필요한 스크롤 창을 만들어 보겠습니다.



먼저, Canvas를 추가하세요

Create > UI > Canvas


정리가 필요한 경우,

빈 오브젝트를 추가하여 

폴더처럼 관리해주시면 되고요.

Create > Create Empty



이제 채팅이 보여질 스크롤 뷰를 추가합니다.



오늘은 스크롤 바 중에서 세로만 이용할 거라서

스크롤 바 호리젠탈(Scrollbar Horizontal)은 삭제를 하겠습니다.





뷰포트 \ 컨텐트 에 텍스트를 하나 만들어 주세요.





이 텍스트(Text)에 

컨텐트 사이즈 피터(Content Size Fitter) 컴포넌트를 추가하고


스크롤 뷰에서도 세로만 이용했듯이

사이즈 피터에서도 세로만 설정하면 됩니다.

버티컬 핏(Vertical Fit)을 Preferred Size 로 설정해주세요.







이제 다 하셨습니다.


빌드해보시면

채팅 대화가 위로 올라가면서

스크롤 뷰에서 잘 구현되는 것을 보실 수 있을 겁니다.






포톤 챗 이용하시어

대박 어플리케이션 만드세요!

수고하셨습니다~









Photon 공식 홈페이지 
https://www.photonengine.com/ko-kr/Photon

★Photon Help Center
https://support.photonengine.jp/hc/ko


★Photon Korea 공식 블로그
https://photonkr.tistory.com


채팅필터

채널




안녕하세요!

이 전 포스팅에서는

유니티에 Photon Chat을 임포트하고 간략하게 동작하기까지 해보았습니다.



아직 Unity에 Photon Chat을 임포트 못 해보신 분은

위 포스팅 한번 보고 오세요~



이번 포스팅에서는

채널, 채팅필터 설정 등을 알아보려고 합니다.




접속

함수: Connect()





채널

사용자 그룹 또는 주제별로 채널을 만들 수 있습니다.



채널 구독하기 

함수: Subscribe()

        파라미터에 구독할 채널을 문자열로 넘기면 됩니다.

구독할 채널 수의 상한은 없습니다.



다만, 500 message / sec 제한이 있으니

이 부분 주의해서 개발하시면 됩니다~



메시지

Public 메시지 보내기

함수: PublishMessage()


Private 메시지 보내기

함수: SendPrivateMessage()

        파리미터에 보내고 싶은 유저이름과 내용(메시지)을 각각 넣으면 됩니다.




* 메시지 카운트

RPC 호출이나 메시지 전송 횟수 등으로 카운트합니다.

간략하게 예를 들어 보겠습니다.

4명이 룸에 있는 경우,

A 유저가 룸 퍼블릭 메시지를 보내면(1 send), 

나머지 3명이 그 메시지를 받습니다(3 receive).

그래서 4 메시지로 카운트 됩니다.



더 자세한 내용은 아래 링크에서

'초당 메시지 룸당 메시지는 어떻게 계산되나요' 부분을 참고하세요.

https://doc.photonengine.com/ko-kr/pun/current/troubleshooting/faq





포톤챗은 채팅필터 기능도 있습니다.

이 필터를 이용하는 방법에 대해 알아보겠습니다.


1. 라이센스 동의





2. 필터 설정



3. 채팅 필터 설정 후




챗 유저상태(ChatUserStatus)

int 로 그 상태를 구분하고 있습니다.

0 : offline

1 : invisible 

2 : online

3 : away 방해할 수 없는 상태

4 : DND 게임이나 그룹을 찾고 있는 상태

5 : LFG 방에서만 사용가능하고 게임 중인 상태

6 : Playing 






Photon 공식 홈페이지 
https://www.photonengine.com/ko-kr/Photon


★Photon Help Center
https://support.photonengine.jp/hc/ko



★Photon Korea 공식 블로그
https://photonkr.tistory.com



안녕하세요!
이번 포스팅에서는 포톤 챗을 다뤄보겠습니다.

* 포톤 chat 홈페이지

https://www.photonengine.com/ko-KR/Chat






Photon Chat  확장성 높은 채팅 시스템의 구축에 많은 도움이 되는 솔루션입니다
Photon Chat 자체로도 이용이 가능하며다른 Photon 서비스와 함께 이용하실 수도 있습니다.

그리고 정말 간단하게 프로젝트에 적용할 수 있습니다.

크게 2단계만 거치면 포톤 chat이 동작하는 것을 보실 수 있습니다.
1. UI
2. 스크립트: 인터페이스 구현 (IChatClientListener)

본격적으로 들어가기에 앞서
유니티 에셋 스토어에서 포톤 chat 을 다운받아주세요!



유니티 어셋 링크 ->
https://assetstore.unity.com/packages/tools/network/photon-chat-45334






그리고
Photon 엔진 홈페이지에서 App ID를 생성해주세요.


Photon 엔진 홈페이지 ->

https://www.photonengine.com/ko-KR/Photon







그리고나서

생성한 APP ID를 프로젝트에 적용시키면 됩니다.
위치 : Resources\ChatSettingFile






이제 준비는 다 되었습니다.
본격적으로 같이 만들어보죠.







첫단계는 'UI 화면구성'입니다.
요약을 하자면,
터치를 받을 수 있는 이벤트 시스템을 만들기
텍스트 입력하는 텍스트 필드
텍스트를 보여주는 스크롤 뷰 를 구성하는 겁니다.

1.1 EventSystem
: 게임오브젝트에 
EventS ystem, Standalone Input Module, Touch Input Module 컴포넌트 추가








1.2 대화를 입력할 텍스트 필드






1.3 대화를 보여줄 스크롤 뷰
: Content 에 Content Size Filter 의 Vertical Fit 을 Preferred Size 로 설정






첫단계는 끝났습니다.







두번째 단계인 약간의 코딩만 하면 Photon Chat이 동작합니다.
즉,  IChatClientListener 인터페이스만 구현하면 됩니다.
:
        void DebugReturn(DebugLevel level, string message);
        "void OnDisconnected();"
        "void OnConnected();"
        void OnChatStateChange(ChatState state);
        "void OnGetMessages(string channelName, string[] senders, object[] messages);"
        void OnPrivateMessage(string sender, object message, string channelName);
        "void OnSubscribed(string[] channels, bool[] results);"
        "void OnUnsubscribed(string[] channels);"
        void OnStatusUpdate(string user, int status, bool gotMessage, object message);

이 중
OnDisconnected(), OnConnected(), OnGetMessages(string channelName, string[] senders, object[] messages), OnSubscribed(string[] channels, bool[] results),
OnUnsubscribed(string[] channels)
이 5개를 중점으로 다뤄보겠습니다.


2.1 적당한 곳에 ChatTest.cs 파일을 생성합니다.

2.2 코딩
: 중요한 2개 함수만 코드로 적어놓겠습니다.
나머지는 아래 첨부파일을 다운 받아보세요.


public void OnConnected () { AddLine ("서버에 연결되었습니다."); chatClient.Subscribe(new string[]{currentChannelName}, 10); }



public void OnGetMessages(string channelName, string[] senders, object[] messages) { for (int i = 0; i < messages.Length; i++) { AddLine (string.Format("{0} : {1}", senders[i], messages[i].ToString())); } }




참고하실 cs파일

ChatTest.cs



포톤 chat 구현을 위한 2단계를 다 하셨습니다.



이제 마지막으로 변수 연결만하면 chat 이 동작하는 것을 볼 수 있습니다.







Photon 공식 홈페이지 
https://www.photonengine.com/ko-kr/Photon

★Photon Help Center
https://support.photonengine.jp/hc/ko






* 한국 이용사례

- 콜 오브 라스트 에이전트

https://play.google.com/store/apps/details?id=com.funmagic.cola&hl=ko





필터 사용시 비용 별도로 추가됩니다.





* 채팅 데이터 저장을 위해 외부 DB를 구축 후 발생 비용
->없습니다.


* 채팅 데이터 
->ToStringMessages() channel 속에 캐시된 메시지를 읽는것은 가능하지만,
 이것은 일시적인 데이터에 불과하고 과거 모든 정보는 저장하고 있지 않습니다.
별도의 DB 서버를 구축하시는 것을 권장합니다.



* 채팅 로그
1. DB 서버를 별도로 준비한다
2.  DB 서버에 접속하기 위한 Web Service기동한다
3. 클라이언트 측에서 메시지를 송신할 때마다 Web Service 호출하여 로그로써 저장한다 
4. 필요할 , Web Service에서 로그 정보를 불러온다

cf) 로컬캐시는 앱 측에서 캐시된 것으로, ChatChannel.MessageLimit로 수량이 제한되어 있습니다.
클라우드측의 캐시는100통으로, Channel에 있는 마지막 플레이어가 이탈한 5초 후에 클리어됩니다.





Photon 공식 홈페이지 
https://www.photonengine.com/ko-kr/Photon

★Photon Help Center
https://support.photonengine.jp/hc/ko






+ Recent posts