90 lines
2.5 KiB
C#
90 lines
2.5 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class MultiplayerNickUI : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
private CanvasGroup canvasGroup;
|
|
|
|
[SerializeField]
|
|
private Text nickTemplate;
|
|
|
|
private Dictionary<Text, MultiplayerAvatarControler> currentNicks = new Dictionary<Text, MultiplayerAvatarControler>();
|
|
|
|
private void MultiplayerAvatarControler_OnUpdateRemote(MultiplayerAvatarControler mac)
|
|
{
|
|
foreach (KeyValuePair<Text, MultiplayerAvatarControler> currentNick in currentNicks)
|
|
{
|
|
if (currentNick.Value == mac)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
Text text = Object.Instantiate(nickTemplate, canvasGroup.transform);
|
|
text.gameObject.SetActive(value: true);
|
|
text.text = mac.photonView.Owner.NickName;
|
|
currentNicks.Add(text, mac);
|
|
}
|
|
|
|
private void MultiplayerManager_On_EnterRoomLocation()
|
|
{
|
|
canvasGroup.alpha = 1f;
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
nickTemplate.gameObject.SetActive(value: false);
|
|
MultiplayerAvatarControler.OnUpdateRemote += MultiplayerAvatarControler_OnUpdateRemote;
|
|
MultiplayerManager.On_EnterRoomLocation += MultiplayerManager_On_EnterRoomLocation;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
MultiplayerAvatarControler.OnUpdateRemote -= MultiplayerAvatarControler_OnUpdateRemote;
|
|
MultiplayerManager.On_EnterRoomLocation -= MultiplayerManager_On_EnterRoomLocation;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
List<Text> list = new List<Text>();
|
|
foreach (KeyValuePair<Text, MultiplayerAvatarControler> currentNick in currentNicks)
|
|
{
|
|
if (currentNick.Value == null)
|
|
{
|
|
list.Add(currentNick.Key);
|
|
}
|
|
}
|
|
foreach (Text item in list)
|
|
{
|
|
currentNicks.Remove(item);
|
|
Object.Destroy(item.gameObject);
|
|
}
|
|
foreach (KeyValuePair<Text, MultiplayerAvatarControler> currentNick2 in currentNicks)
|
|
{
|
|
Text key = currentNick2.Key;
|
|
MultiplayerAvatarControler value = currentNick2.Value;
|
|
if (Camera.main != null && GameManager.Instance.addectiveSceneLoaded == "none")
|
|
{
|
|
float num = Vector3.Distance(value.transform.position, Camera.main.transform.position);
|
|
float num2 = Vector3.Angle(value.transform.position - Camera.main.transform.position, Camera.main.transform.forward);
|
|
if (num <= 50f && num2 > -90f && num2 < 90f)
|
|
{
|
|
key.gameObject.SetActive(value: true);
|
|
Vector3 position = value.transform.position + Vector3.up * 2f;
|
|
Vector3 position2 = Camera.main.WorldToScreenPoint(position);
|
|
currentNick2.Key.transform.position = position2;
|
|
}
|
|
else
|
|
{
|
|
key.gameObject.SetActive(value: false);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
key.gameObject.SetActive(value: false);
|
|
}
|
|
}
|
|
}
|
|
}
|