Files
UltimateFishing2020/Assets/Scripts/Assembly-CSharp/MultiplayerNickUI.cs
2026-03-04 10:03:45 +08:00

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);
}
}
}
}