3) ChatWidget 노드 연결
텍스트 입력 후 Enter키를 누르면 String으로 변환해서 Client Controller에 보내고 입력창은 다시 공백으로 전환
PlayerController를 캐스팅하여 연결
4) Controller 노드
시작 시 ChatWidget을 Controller에 연결하고 화면상에 띄우기
Client가 보낸 메시지를 서버에 전송(GameMode에서 처리)
Server에서 Client에게 메시지를 다시 뿌리기
Has Authority : 현재 권한이 있는지(서버인지) 판단하는 역할
5) GameMode
GameMode에서 메시지를 처리하는 로직 구현
6) 오류
실행을 해본 결과 위젯은 뜨지만 전송한 메시지가 뜨지않고 종료하니 이 2가지 오류가 발생
- Only Local Player Controllers can be assigned to widgets. ChatPlayerController_C_1 is not a Local Player Controller.
-> ChatPlayerController_C_1”이 로컬 컨트롤러가 아니여서 화면상에(Add to Viewport)띄울 수 없다는 뜻(뜨긴 하던데;)- Blueprint Runtime Error: "Accessed None trying to read property ChatWidgetRef". Node: Add to Viewport Graph: EventGraph Function: Execute Ubergraph Chat Player Controller Blueprint: ChatPlayerController
-> ChatWidgetRef가 None(초기화X)상태인데 Add to Viewport를 호출하려고 해서 생긴 문제Local Controller일때 생성되게 하여 해결
채팅을 입력해도 화면상에 채팅이 뜨지 않는 문제가 발생
ChatWidget에서 설정한 커스텀 델리게이트 이벤트인 Set Message to Client Controller가 불려오지 않아서 생긴 문제라고 생각해 Bind Event를 연결
드디어 채팅활성화
7) 정리
블루프린트로 로직을 만드는 방법에 대해 조금이나마 알게 되었고 서버의 작동 방식을 스스로 학습할 수 있었던 것 같음. 추후에 추가를 한다면 각각의 이름을 설정하고 필터링방식을 대입해 보는 것도 좋을 것 같고 시간 여유가 된다면 이 파일을 바탕으로 야구게임도 블루프린트로 구현해보고싶음.
Delegate란
- 어떤 이벤트가 일어나면 이 이벤트를 등록해둔 함수들을 모두 실행하는 구조로 동작.
- 느슨한 결합(Loose Coupling)방식으로 이벤트를 발생시키는 쪽과 이벤트를 처리하는 쪽이 직접적으로 서로를 몰라도 된다고 함
- 델리게이트를 선언 -> 이벤트 발생 -> 델리게이트 바인딩