Skip to content

ImSoloSinceBirth

KarmoDDrine edited this page Jun 18, 2025 · 1 revision

Chat

1

프로젝트에 Woodon 임포트 + '나는 모솔' 샘플 받아주세요. (여기 확인)
샘플에 포함된ISSB_Trigger - OnlyChat 프리팹 참고. '나는 모솔' 기능 중 채팅만 남겼습니다.

1-1. 프리팹 구조

  • [ChattingManager]: 채팅 관리 (아래 설명 참고)
  • [WSCanvas]: [ChattingManager]를 위한 캔버스 (비활성화)
  • Chat [Chat]: 단체 익명 채팅방 (채팅방 번호 0)
  • Chat [1-1 DM]: 1대1 대화 채팅방 (채팅방 번호 1)

2. 기능 설명

2-1. 채팅 데이터

  1. message: 채팅 내용
  2. chatRoom: 채팅방 번호
  3. additionalData: 추가로 보낼 데이터 (채팅 내용과 구분하기 위함)

여기에 추가로 플레이어 닉네임, 보낸 서버 시간, 고유한 Udon Index을 붙여 전송.

2-2. 채팅방 구별

  • 숫자로 구별.
    • '나는 모솔'에서는 0이 익명 채팅방, 1이 1대1 대화 채팅방을 의미합니다.
    • UI 업데이트 할 때 이 chatRoom을 기준으로 채팅 데이터 필터링 함. (UIChat 참고)

2-3. Chat Manager

  • Chat Manager 에서 모든 채팅 데이터 관리
  • Chat Seat으로부터 채팅을 받아 저장하고, 저장한 채팅 데이터를 UIChat에 전달함.

2-4. Chat Seat

  • Chat Manager로 메시지를 전송. (SendChatMessage(~)).
  • 자식 오브젝트로 있는 [WInt] ChatRoom의 Default Value로 전송할 Chat Room (채팅방 번호)를 설정 가능. (런타임 변경 가능)

참고: 로컬 기능만 있음. 그래서 여러 명이 같이 써도 됨. 단순히 플레이어 위치 분산시키기 위해 여러 개를 만들어 사용.
참고: InputField 클릭 시 플레이어 이동 고정되는 기능 있음.

2-5. 채팅 저장 방식

일단 플레이어 별로 WJson이 하나씩 할당됨. (WJson: [UdonSynced] string 변수가 들어 있음)
플레이어 한 명의 채팅 데이터는 해당 플레이어의WJson 우동에 저장됨.
WJson의 string 값이 바뀔 때 마다 ChattingManager에서 이를 감지하여 UI Update.

참고: 하나씩 할당하기 위해 WPlayerUdonIndex를 씁니다. (플레이어 별 고유 우동 번호 부여)

Clone this wiki locally