Closed AliceOfSNU closed 2 years ago
채팅방 새로 생성 가능 with options -> Create Channel
내 채팅방 목록 페이지 -> 채팅방 간 이동
채팅방 생성시 private channel과 public channel 선택 가능
월드 안에 존재하는 public 채팅방 목록 -> 여기서 subscribe, join 가능
Room 안에 있는 사람들과는 채팅방 생성단계 없이 쉽고 빠르게 소통하기 위해 룸과 라이프사이클이 같은 룸 기본 채팅방 존재
room subscriber list도 확인할 수 있도록 구현
.
half version은 1) 유저가 subscribe하고 있는 채팅방 목록, 2) 해당 채팅방(Chat Room)의 기능만 구현하여 게임 도중 빠르게 chat을 할 수 있도록 하는 것을 목적으로 함.
이 외의 기능(초대, 방 나가기...)을 사용하고자 한다면, 확대 버튼을 눌러 Lobby에서 실행되는 chat과 동일한 original version으로 구현되도록 함.
.
Canvas . ㄴ Room Chat Panel . . . . ㄴ Default chat (*) . . . . ㄴ Room Subscriber List Button . ㄴ World Chat Panel . . . . ㄴ World Chat On/Off Button . . . . ㄴ Original ver Panel . . . . . . . . ㄴ (*) . . . . ㄴ Half ver Panel . . . . . . . . ㄴ ToOriginal Button ( := 확대 버튼) . . . . . . . . ㄴ Main Panel . . . . . . . . . . . . ㄴ ChattingRooms Info . . . . . . . . ㄴChat Room Panel . . . . . . . . . . . . ㄴDefault chat ()
.
(*) := 기본 채팅 View (**) := UI팀의 기능 명세서를 따르도록 함. 저번 회의에서 말했던 대로 구현. 아직 완전한 구체화 X.
.
위의 아이디어 중 acceptable한 범위 내에서 해당 Canvas Hierarchy를 기반으로 Chat Canvas 구현.
1/12
두 가지 기능을 완성해보려고 합니다.
1/12
- 내 채팅과 상대방의 채팅을 구분
- 각 채널별로 올라오는 채팅을 말풍선 모양으로 띄우기 (Instantiate)
두 가지 기능을 완성해보려고 합니다.
사용자의 메시지 분류는 저번에 시도했던 것과 비슷한 방식으로 진행해 Public Chat, Private Chat에서 각각 분류를 성공했고 이와 함께 자잘한 오류가 나는 부분들을 수정했습니다.
이후로 시간이 많지 않고 생각보다 생각해 보아야 할 부분들이 꽤 있어 이를 말풍선으로 화면에 띄워주는 과정은 완료하지 못했습니다.
내일도 다른 일정을 비우고 계속 진행할 예정입니다.
해당 기능이 완성되면 Public Chat과 Private Chat은 완성되고 특정 인원만 가입해 대화하는 단톡방, 친구 초대 기능(UI 작업된 것을 보면 프로필 사진과 닉네임이 필요할 거 같은데 일단 Public Chat에서 목록을 받아와 띄워주는 정도로) 개발을 진행해보려고 합니다.
22.01.11.에 구성한 Canvas Hierarchy를 바탕으로 Room에서 실행되는 chat먼저 구현을 시작해보았습니다. Room Chat에서는 현재 방에 들어와 있는(Subscribe한) 사람들의 목록을 볼 수 있게 하는 버튼을 구현하여, 버튼을 누르면 목록이 띄워지고 다시 누르면 사라지도록 하였습니다.
현재 Room에 들어올 수 있는 정원이 10명이기에, 기본object를 UserInfo를 포함하는 10개의 clone을 버튼으로 구현하여 들어온 인원 수에 맞게 활성화/비활성화되도록 하였습니다. (아직, room subscriber의 정보를 받아 활성화 여부를 결정할 수 있는 작업을 진행하지는 않았음.) 해당 유저의 정보나, 해당 유저에게 private message를 보내는 등의 기능을 추가할 수 있도록 '버튼'으로 구현하였습니다.
추가 Room에 접속한 Subscriber를 List로 저장하고, 그 정보를 읽어와서 UserInfo 버튼을 활성화/비활성화하고, 정보를 해당 버튼이 포함하도록 구현하려고 합니다. UserInfo 버튼을 눌렀을 때 발생할 수 있는 사항에 관하여 추가 사항에 대하여 논의한 후 추가하면 좋을 듯합니다.
할 일 오늘 진행된 회의 내용을 참고하여, World에서의 Chat 구현을 먼저 하는 것을 목표로 함. 오늘 진행한 작업은 잠시 멈춤. (World Chat에서의 기능 구현이 비슷하여 추후에 더 빠르게 작업을 진행할 수 있을 것으로 예상) UI팀의 자료를 바탕으로, 1) 캔버스 및 씬 구현 후, 2) 유저 정보, 3) chatting group의 정보, 4) chatting group의 유저 정보, 5) 기타(추후 결정) 순으로 World Chat 구현을 목표로 함.
UI팀의 기획서(pdf 13p)를 기반으로 <채팅방 만들기> View 구현을 첫 번째 과제로 삼고 작업을 진행했습니다.
방에 들어온 임의의 유저 List
할 일 오늘 진행한 작업은 아직 방 생성의 단계 이전이므로, 선택한(using Button) 유저와 입력 정보를 기반으로 새로운 채팅방을 구성할 수 있도록 할 예정입니다. 이후부터는 순규님 작업과 합치면 될 것 같습니다.
1/14
말풍선 구현이 좀 어려워 일단 유저를 직접 초대하는 채팅방부터 만들어보기로 했습니다. (승연님 UI도 마침 나온 덕분에)
현재 새 채널을 생성하고 특정 인원들을 해당 채널의 channel.Subscribers에 추가하는 코드를 작성했습니다. (특정 인원들 채널에 초대, 해당 채널로 메시지를 Publish하면 해당 유저들이 받게될 것)
또한 ChatChannel api를 아래와 같이 수정했습니다.
protected set으로 설정되어있는 maxSubscribers를 set으로 바꿔 클래스나 상속된 클래스 외부에서 maxSubscribers를 수정 가능하게 함. 이를 통해 UI에서 초대인원을 설정해주면 해당 초대인원에 맞게 maxSubscribers가 설정됨.
channel.CurrentUsers(이름은 바꿀수도 있습니다)라는 method를 만들어 현재 유저 수를 나타내도록 했고 나중에 초대 받지 않은 유저가 해당 채널을 Subscribe하려고 할 때 maxSubscribers와 비교해 해당 유저가 초대됨으로써 maxSubscribers를 초과하면 구독 요청을 거부하도록 구현할 예정임. 이 과정에서 반복문을 썼는데 혹시 C# HashSet에서 length나 Size를 바로 얻을 수 있는 메소드가 있는지 궁금합니다. (문서를 읽어보았는데 전 안보이더라고요...)
컴파일 에러는 나지 않는데 UI랑 코드가 따로 작성되고 있어서 한번 합쳐보고 돌아가는지 확인하는 시간을 가져보도록 하겠습니다.
그리고 지금 유저가 채널을 Subscribe하는 코드를 수정해 특정 룸에 들어갈 때는 제약을 주려고 하는데 초대받지 않은 유저가 특정 채널을 구독하고자 할 때 어떤 방식으로 구현할지 얘기해보면 좋을 것 같습니다. 일단 생각나는 것은
말풍선 어려운만큼 일단은 간단하게 네모로 해도 괜찮을 것 같습니다. (Vertical layout group에서 ... 각 box의 height만 text양에 따라 - 자동 스케일... 그게 어렵네요 ㅋㅋㅋ)
set 개수는 count 아닐까요. 일단 코드 리뷰 해보겠습니다!
수정했습니다!
목적