유니티/PUN2

채팅 구현

잼잼재미 2024. 6. 11. 06:30

 

 

구현 방법


1. 기본 셋팅

 

Scroll View 생성

 

 

 

Scroll View의 Width, Height, Color, Anchors, Position 등 설정 (A 값 : 30)

 

 

 

Scrollbar Horizontal 삭제

 

 

 

Content의 자식에 Text(TMP) 추가하고 Font Asset, Font Size, Width 설정

 

 

 

Text를 복사해서 12개를 생성

 

 

 

Content에 Vertical Layout Group과 Content Size Fitter 컴포넌를 추가하고 위와 같이 설정

* Content의 크기에 맞게 Bottom 값을 수정해야 함!

 

 

 

Anchors를 Shift를 클릭하고 좌측 아래로 설정 (하나의 Text의 길이가 Width를 초과할 때, 좌측 아래를 기준으로 먼저 작성한 Text가 위로 올라감)

 

 

Input Field - TextMeshPro 추가

 

 

 

  • Placeholder : Text 입력이 없을 때, 보이는 Text
  • Text : Text 입력 시, 보이는 Text

각각 게임에 맞게 설정

 

 

 

Button - TextMeshPro 추가

 

 

 

각각 위치를 적절히 설정

 

 

2. 스크립트 작성

public override void OnPlayerEnteredRoom (Player newPlayer)
{
    if (_photonView.IsMine)
        _photonView.RPC("ChatRPC", RpcTarget.All, "<color=yellow>" + newPlayer.NickName + "님이 참석하셨습니다.</color>");
}

public override void OnPlayerLeftRoom(Player otherPlayer)
{
    if (_photonView.IsMine)
        _photonView.RPC("ChatRPC", RpcTarget.All, "<color=yellow>" + otherPlayer.NickName + "님이 퇴장하셨습니다.</color>");
}

private void SendChat()
{
    if (_photonView.IsMine)
    {
        string chat = PhotonNetwork.NickName + " : " + _networkManager.ChatInputText.text;
        _photonView.RPC("ChatRPC", RpcTarget.All, chat);
        _networkManager.ChatInputText.text = "";
    }
}

[PunRPC]
public void ChatRPC(string str)
{
    bool isInput = false;

    for (int i = 0; i < _chatTexts.Length; i++)
    {
        if (_chatTexts[i].text == "")
        {
            isInput = true;
            _chatTexts[i].text = str;
            break;
        }
    }

    if (!isInput)
    {
        for (int i = 1; i < _chatTexts.Length; i++)
        {
            _chatTexts[i - 1].text = _chatTexts[i].text;
        }

        _chatTexts[_chatTexts.Length - 1].text = str;
    }
}

 

 

설명


  • SendButton에 SendChat 함수를 연결
  • 생성한 Content안의 Text들을 배열로 인스펙터에 연결
  • 생성한 InputField를 인스펙터에 연결
  • RPC를 통해, ChatRPC 함수를 Room에 있는 모든 Player가 실행

 

'유니티 > PUN2' 카테고리의 다른 글

멀티 씬 이동  (1) 2024.06.15
Player 동기화 (PhotonTransformView, OnPhotonSerializeView , PhotonAnimatorView)  (0) 2024.06.13
동기화 방법  (0) 2024.06.06
서버, 로비 접속 및 방 생성  (0) 2024.06.06
PUN2 준비하기  (0) 2024.06.04