taurus2790
@taurus2790
Я не программер я только учусъ

Как синхронизировать объекты при использовании UNET?

Всем привет, подскажите как синхронизировать PlayerLobby.

Есть NetworkLobbyManager, есть прифаб LobbyPlayer, так вот есть задача, чтобы когда игрок нажимает "Готово" объект изменялся. Так вот изменения вносятся, но изминений не видно у второго игрока.

Картинка
5c1510eae87ef488958348.png
Вот скрипт игрока
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;

namespace Assets.Scripts.Controller.MainMenu
{
    public class LobbyPlayerController : NetworkLobbyPlayer
    {
        private Text _name;
        private GameObject _status;
        private GameObject _readyBtn;
        private GameObject _notReadyBtn;
        private GameObject _expelBtn;
        [SerializeField] private Sprite[] _statusImages;

        public Text Name
        {
            get
            {
                return _name;
            }
        }
        public GameObject Status
        {
            get
            {
                return _status;
            }
        }
        public GameObject ReadyBtn
        {
            get
            {
                return _readyBtn;
            }
        }
        public GameObject NotReadyBtn
        {
            get
            {
                return _notReadyBtn;
            }
        }
        public GameObject ExpelBtn
        {
            get
            {
                return _expelBtn;
            }
        }
        public Sprite[] StatusImages
        {
            get
            {
                return _statusImages;
            }
        }

        public void Awake()
        {
            _name = transform.Find("PlayerName").gameObject.GetComponent<Text>();
            _status = transform.Find("PlayerStatus").gameObject;
            _readyBtn = transform.Find("PlayerReadyBtn").gameObject;
            _notReadyBtn = transform.Find("PlayerNotReadyBtn").gameObject;
            _expelBtn = transform.Find("PlayerExpelBtn").gameObject;
        }

        void Start()
        {
            Name.text = GetInstanceID().ToString();

            if (isLocalPlayer)
            {
                ReadyBtn.SetActive(true);
            }

            if (isServer)
            {
                ExpelBtn.SetActive(true);
            }
        }

        public void OnClickReady()
        {
            ReadyBtn.SetActive(false);
            NotReadyBtn.SetActive(true);
            Status.GetComponent<Image>().sprite = StatusImages[1];
        }

        public void OnClickNotReady()
        {
            NotReadyBtn.SetActive(false);
            ReadyBtn.SetActive(true);
            Status.GetComponent<Image>().sprite = StatusImages[0];
        }

        public override void OnClientEnterLobby()
        {
            base.OnClientEnterLobby();
            transform.SetParent(GameObject.FindGameObjectWithTag("Respawn").transform);
        }
    }
}



По идее я просто заменяю спрайт у компонента Image по нажатию на кнопку.

OnClickReady и OnClickNotReady висят на кнопке.

Буду очень благодарен.
  • Вопрос задан
  • 16 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
LEVEL Москва
от 100 000 до 200 000 руб.
Rightway Games Москва
от 80 000 до 200 000 руб.
Playneta Санкт-Петербург
от 150 000 до 300 000 руб.
22 янв. 2019, в 00:48
60 руб./за 1000 зн.
22 янв. 2019, в 00:09
120000 руб./в месяц
21 янв. 2019, в 23:37
1000 руб./за проект