화면구성
ChatUI를 꾸미고 ChatManager.cs 작성한다
PhotonView는 PUN 컴포넌트로써 네트워크 객체를 식별하고 관리하는 얘다 따라서 꼭 추가해줘야한다.
코드에서 주의 깊게 본 부분은 [PunRPC] 였다. 해당 메소드 위에 쓰면 다른 클라이언트에게도 전송되어진다.
전체코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
using Photon.Realtime;
using Photon.Pun;
public class ChatManager : MonoBehaviourPunCallbacks
{
[SerializeField]
private InputField _msgInput; // 메시지 입력 필드
[SerializeField]
private Text _chatLog; // 채팅 로그를 표시할 텍스트 UI
[SerializeField]
private Text _chattingList; // 접속 중인 플레이어 목록을 표시할 텍스트 UI
[SerializeField]
private Button _sendBtn; // 메시지 전송 버튼
[SerializeField]
private ScrollRect _scrollRect; // 채팅 로그의 스크롤을 제어하는 ScrollRect
private string _chatters; // 접속 중인 플레이어 목록 문자열
void Start()
{
// Photon의 메시지 큐가 작동하도록 설정
PhotonNetwork.IsMessageQueueRunning = true;
// 버튼 클릭 이벤트에 연결
_sendBtn.onClick.AddListener(SendButtonOnClicked);
}
// 메시지 전송 시 호출
public void SendButtonOnClicked()
{
// 메시지 입력 필드가 비어 있는지 확인
if (string.IsNullOrEmpty(_msgInput.text))
{
Debug.Log("메시지가 비어있습니다.");
return;
}
// 메시지 형식을 지정하여 문자열로 만듦
string msg = string.Format("[{0}]: {1}", PhotonNetwork.LocalPlayer.NickName, _msgInput.text);
// 다른 클라이언트들에게 메시지 전송
photonView.RPC("ReceiveMsg", RpcTarget.OthersBuffered, msg);
// 자신 메시지 수신 처리
ReceiveMsg(msg);
// 입력 필드 초기화
_msgInput.text = "";
}
void Update()
{
// 플레이어 목록 업데이트
chatterUpdate();
// 엔터 키가 눌리고 입력 필드가 포커스되지 않은 경우 메시지 전송
if (Input.GetKeyDown(KeyCode.Return) && !_msgInput.isFocused)
{
SendButtonOnClicked();
}
}
// 접속 중인 플레이어 목록을 업데이트
void chatterUpdate()
{
_chatters = "*접속 플레이어 리스트*\n";
// 현재 접속 중인 모든 플레이어 닉네임을 리스트에 추가
foreach (Player p in PhotonNetwork.PlayerList)
{
_chatters += p.NickName + "\n";
}
_chattingList.text = _chatters;
}
// RPC 메서드: 메시지를 수신하여 채팅 로그에 추가하는 메서드
// 네트워크 상의 다른 클라이언트에서 호출하는 메서드
[PunRPC]
public void ReceiveMsg(string msg)
{
// 메시지 추가
_chatLog.text += "\n" + msg;
// 스크롤을 가장 아래로 내림
if (_scrollRect != null)
{
_scrollRect.verticalNormalizedPosition = 0.0f;
}
}
}
영상보면 잘 되는 것을 확인할 수 있다.
실행영상
'공부 좀 해라★彡 > Unity' 카테고리의 다른 글
FixedUpdate 의 Time 수정 방법 (1) | 2024.12.09 |
---|---|
Unity URP 핑크색 깨짐 문제 해결 (0) | 2024.08.21 |
Unity PlayFab 적용시키기 (1) | 2024.07.21 |
Unity Photon 포톤 서버 적용 시키기 (0) | 2024.07.21 |
Unity Photon 포톤 서버 준비하기 (1) | 2024.07.20 |
댓글