본문 바로가기
가상세계 산사VR

산사VR, 텍스트 채팅내용 인식하기

산사 VR에서도 세컨드라이프처럼 사용자의 텍스트 채팅 내용을 인식할 수 있는데요.

channel 0번을 사용하는 것으로 보아 채널 사용원리는 동일한 것 같습니다.

세컨드라이프에서도 채널 0번은 일반 사용자가 채팅창에서 볼 수 있는 채널이거든요.
0번 채널로부터 메시지를 수신받는 함수는 아래와 같습니다.

ScenePrivate.Chat.Subscribe(0, null, ChatMessage);

다만 ChatMessage 라는 콜백 함수의 이름을 함께 전달해 주는데요.
세컨드라이프와는 달리 콜백 함수의 이름은 자유롭게 정의하실 수 있습니다.

콜백 함수는 아래와 같이 정의하는데요.
여기서 중요한 파라미터는 3개로서 
Channel 은 요청된 채널로서 여기서는 당연히 0이고,
SourceId 는 채팅한 사람 또는 오브젝트(아마도) 의 아이디값으로 추정됩니다.
Message 는 채팅한 메시지 문구를 의미하지요.

    private void ChatMessage(int Channel, string Source, SessionId SourceId, ScriptId SourceScriptId, string Message)
    {
         : 처리할 내용
    }

완성본 소스입니다.

using Sansar.Script;
using Sansar.Simulation;

public class ChatScript : SceneObjectScript
{
    public override void Init()
    {
        // 채팅 채널 0번으로부터 메시지 송신을 대기하고 메시지가 송신되면 
        // ChatMessage 콜백함수를 실행합니다.
        ScenePrivate.Chat.Subscribe(0, null, ChatMessage);
    }

    // ChatMessage 콜백 함수
    private void ChatMessage(int Channel, string Source, SessionId SourceId, ScriptId SourceScriptId, string Message)
    {
        // 채팅 메시지를 전송한 사람을 찾습니다.
        AgentPrivate Agent = ScenePrivate.FindAgent(SourceId);
        // 해당 사용자의 다이얼로그를 변수에 저장.
        ModalDialog Dlg = Agent.Client.UI.ModalDialog;
        // 팝업창에 보여줍니다.
        Dlg.Show(Message + "라고 타이핑하셨군요", "확인", "");
    }
}

위 스크립트를 산사에 업로드, 오브젝트에 적용하고 빌드한 다음,

채팅창을 열고 내용을 타이핑하면,

아래와 같은 팝업창이 뜨는 것이지요.