8년차 모션그래픽디자이너의 고군분투
[Unity] 포톤네트워크를 활용해서 닉네임 다른 사람들에게도 보이게 하기 본문
반응형
안녕하세요 오늘은 제가 며칠동안 꽤 애먹었던 포톤네트워크 닉네임에 대한 스크립트를 공유하겠습니다.
using Photon.Pun;
using Photon.Pun.Demo.Cockpit;
using Photon.Realtime;
using UnityEngine;
using UnityEngine.SceneManagement;
using Hashtable = ExitGames.Client.Photon.Hashtable;
public class PhotonManager : MonoBehaviourPunCallbacks
{
string _nickname; // 사용자들의 닉네임을 받을 변수명
public static PhotonManager Instance;
[HideInInspector]
public string NextRoomName = string.Empty; // 방 이동할 때 쓰일 변수명
private void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
private void Start()
{
StartButton?.SetActive(false);
_nickname = PlayerPrefs.GetString("LoggedInId", "Player"); // 로그인 할 때 기억할 닉네임
PhotonNetwork.GameVersion = "0.0.1";
PhotonNetwork.NickName = _nickname; // 로그인 할 때 닉네임을 받겠다는 의미
// Custom Properties 설정
Hashtable customProperties = new Hashtable { { "Nickname", _nickname } };
PhotonNetwork.LocalPlayer.SetCustomProperties(customProperties);
PhotonNetwork.AutomaticallySyncScene = false;
if (!PhotonNetwork.IsConnected)
{
PhotonNetwork.ConnectUsingSettings();
}
PhotonNetwork.SendRate = 50;
PhotonNetwork.SerializationRate = 30;
}
원래는 포톤네트워크.닉네임 = 닉네임; 으로 해두면 된다고 했는데 이게 저는 보이는데 남들은 보이지가 않아서 커스텀프로퍼티까지 썼었습니다. 커스텀 프로퍼티로 해도 되긴 하지만 그전에 간단하게 끝내는 방법도 있어서 일단 두개를 알려드릴게요.
using Photon.Pun;
using UnityEngine;
using Hashtable = ExitGames.Client.Photon.Hashtable;
public class PlayerAbility : MonoBehaviourPunCallbacks
{
protected Player _owner { get; private set; }
protected void Awake()
{
_owner = GetComponentInParent<Player>();
}
public override void OnPlayerPropertiesUpdate(Photon.Realtime.Player targetPlayer, Hashtable changedProps)
{
// 이 메서드는 PlayerCanvasAbility에서 오버라이드 됩니다.
}
}
플레이어 스크립트에 포톤뷰를 넣었었고 그걸 플레이어 어빌리티에서 소환하는 방식을 사용했었습니다.
반응형
using Photon.Pun;
using Photon.Realtime;
using TMPro;
using UnityEngine;
using Hashtable = ExitGames.Client.Photon.Hashtable;
public class PlayerCanvasAbility : PlayerAbility
{
public Canvas PlayerCanvas;
public TextMeshProUGUI NicknameTextUI;
private void Start()
{
// 커스텀프로퍼티 없이 사용할 수 있는 코드
SetNickname(_owner.photonView.Owner.NickName);
return;
/*if (_owner.photonView.IsMine) // 사용하지 않는 코드
{
SetNickname(PhotonNetwork.LocalPlayer.NickName);
}
else
{
SetNickname(_owner.photonView.Owner.NickName);
}*/
}
private void Update()
{
transform.forward = Camera.main.transform.forward;
}
public void SetNickname(string nickname)
{
NicknameTextUI.text = nickname;
}
// 커스텀 프로퍼티는 사용하지 않으나 이렇게 사용해도 실행은 됨
public override void OnPlayerPropertiesUpdate(Photon.Realtime.Player targetPlayer, Hashtable changedProps)
{
if (changedProps.ContainsKey("Nickname") && targetPlayer == _owner.photonView.Owner)
{
//SetNickname((string)changedProps["Nickname"]);
}
}
}
이런식으로 사용하면 두개의 방식을 사용할 수 있는데 커스텀 프로퍼티 사용 없이도 다른 사용자들의 닉네임이 보이고 제 닉네임이 보일수 있도록 할 수 있습니다.
반응형
'코자이너 > Unity' 카테고리의 다른 글
Comments