구현 방법
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 |