using System.Collections.Generic; using Google.Protobuf; using UnityEngine; public class PlayerManager : MonoBehaviour { public GameObject playerPrefab; public Transform playerScene; private Dictionary _players = new(); public static PlayerManager Instance { get; private set; } private void Awake() { if (Instance != null) { Destroy(gameObject); return; } Instance = this; } private void Start() { SocketMessageManager.Instance.Subscribe(MessageID.EnterInstance, OnEnterInstance); SocketMessageManager.Instance.Subscribe(MessageID.Position, OnPosition); SocketManager.Instance.Connect(); } private GameObject AddPlayer(PositionInfo info) { var player = Instantiate(playerPrefab, playerScene); player.GetComponent().uid = info.UID; var move = player.GetComponent(); move.SetPosition(info.X, info.Y); _players.Add(info.UID, move); return player; } private void OnEnterInstance(ByteString msg) { var enterInstance = S2C_EnterInstance.Parser.ParseFrom(msg); var player = AddPlayer(enterInstance.Info); player.AddComponent(); } private void OnPosition(ByteString msg) { var position = S2C_Position.Parser.ParseFrom(msg); foreach (var info in position.Info) { if (!_players.ContainsKey(info.UID)) { AddPlayer(info); } else { _players[info.UID].SetPosition(info.X, info.Y); } } } }