Overview
Unity
VChatCloud sdk
는 채팅 클라이언트 구현을 쉽게 할 수 있도록 도와줍니다.
Unity에서 VChatCloud sdk
를 이용하여 실시간 채팅을 빠르고 효율적으로 사용해보세요.
퀵 가이드에서는 VChatCloud sdk
의 구조 및 기능에 대한 간략한 내용을 안내하고 있고,
각 항목에서는 자세한 설명을 바탕으로 실무 프로젝트에 적용하기위한 가이드를 제공하고 있습니다.
채팅방 진입
데모 화면
에서 채팅방으로 진입하기 위해서는 CMS에 생성된 채널키를 포함시켜야 합니다.
만약 채팅방 개설 전 상태라면 QuickStart를 통해 채팅방 생성 및 채널키를 확인하는 방법을 습득해 주세요.
채팅 하기
채팅은 텍스트 입력박스에 전송할 메시지를 입력후 전송버튼을 누르거나 엔터키를 눌러 전송하세요.
메시지전송이 정상적으로 진행되고 있다면, 다른 디바이스나, PC로 채팅방을 입장해보세요.
다른 사용자로 진입시에 채널키를 동일하게 입력하여 동일한 채팅방으로 진입후, 채팅을 메시지를 주고 받아보세요.
구현코드 확인
cs
// UnityVChat.cs
public class UnityVChat : MonoBehaviour
{
[SerializeField]
private TextField chatInput;
[SerializeField]
private Button sendButton;
[SerializeField]
private ScrollView chatScrollView;
public string deviceUuid;
private string room_id;
private string nick_name;
private string profile;
private static JObject userInfo = null;
private static Channel channel = null;
private ChannelOptions options;
private async void OnEnable()
{
var root = GetComponent<UIDocument>().rootVisualElement;
chatInput = root.Q<TextField>("chatInput");
sendButton = root.Q<Button>("sendButton");
chatScrollView = root.Q<ScrollView>("chatScrollView");
sendButton.clicked += OnSendButtonClicked;
await ConnectAndJoinRoomAsync();
}
private async Task ConnectAndJoinRoomAsync()
{
// 방 접속을 위한 값 생성
room_id = "YOUR_ROOM_ID";
nick_name = "U-User";
profile = DateTime.Now.ToString("HHmmss");
Guid originalGuid = Guid.NewGuid();
deviceUuid = originalGuid.ToString("D").Substring(0, 8);
userInfo = new JObject();
userInfo["profile"] = profile;
options = new ChannelOptions();
options.SetChannelKey(room_id).SetClientKey(deviceUuid).SetNickName(nick_name).SetUserInfo(userInfo);
// 채팅서버 접속
SocketManager.Instance.OnConnectionOpened += () => ReceiveOpenEventAsync().GetAwaiter();
SocketManager.Instance.OnConnectionFailed += ex => UnityEngine.Debug.Log("접속실패 " + ex.Message);
SocketManager.Instance.OnConnectionClosed += () => UnityEngine.Debug.Log("접속종료");
SocketManager.Instance.OnMessageReceived += async message => await ReceiveJoinMessagesAsync(message);
VChatCloud.GetInstance().SetSocketStatus(SocketSet.CLOSED);
try
{
SocketManager.Instance.Connect(StringSet.SERVER);
}
catch (Exception ex)
{
UnityEngine.Debug.Log(ex.ToString());
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
채널객체 이벤트 처리
메시지 전송
cs
sendMsg(param, new ChannelCallbackImp((o, e) => {
if (e == null)
{
// 성공 시 처리 로직
UnityEngine.Debug.Log("ChannelCallbackImp Message sent successfully. " + o);
}
else
{
// 예외 처리 로직
UnityEngine.Debug.LogError($"Error: {e}");
}
}));
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
채팅방에 메시지가 올라올 경우 발생되는 이벤트
cs
public override void OnNotifyMessage(JObject data)
{
UnityEngine.Debug.Log("MessageHandlerEx :: OnNotifyMessage " + data);
UnityMainThreadDispatcher.Instance().Enqueue(() =>
{
_unityVChat.AddMessageToChat(data["nickName"] + " " + data["message"]);
});
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
채팅방에 신규 유저가 접속 시 발생되는 이벤트
cs
public override void OnNotifyJoinUser(JObject data)
{
UnityEngine.Debug.Log("MessageHandlerEx :: OnNotifyJoinUser " + data);
UnityMainThreadDispatcher.Instance().Enqueue(() =>
{
_unityVChat.AddMessageToChat(data["nickName"] + "님이 입장하셨습니다.");
});
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
채팅방에 유저가 나간 경우 발생되는 이벤트
cs
public override void OnNotifyLeaveUser(JObject data)
{
UnityEngine.Debug.Log("MessageHandlerEx :: OnNotifyLeaveUser " + data);
UnityMainThreadDispatcher.Instance().Enqueue(() =>
{
_unityVChat.AddMessageToChat(data["nickName"] + "님이 나가셨습니다.");
});
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9