• Ошибка unity c# локальная переменная как исправить?

    @Mixer1111
    Ты в void OnCollisionEnter2D фигурную скобку в конце перед void OnCollisionExit2D не закрыл
    Ответ написан
    1 комментарий
  • Как правильно сделать открытие кейсов как в бравл старсе?

    @Mixer1111
    Я бы предложил бы генерировать рандомное число от 0 до 100, а потом по шансам проверять на то, меньше ли выпавшее число числа шанса. Например:
    Шанс на выпадение героя в целом 20%. Выкидываешь рандомное число от 0 до 100, а потом проверяешь - "выпавшее рандомное число меньше шанса (по примеру, 20) на выпадение героя?" и если нет - герой не выпал, но если да, то выбрасываешь новое число от 0 до количества героев всего, что решит, какой герой тебе выпадет
    Если нужна редкость - то то рандомное число, которое от 0 до 100 проверяй последовательно, от самой редкой до самой частой редкости
    Как-то так
    Ответ написан
    2 комментария
  • Синхронизация выбранного оружия для каждого из игроков в мультиплеерном шутере на Unity?

    @Senture Автор вопроса
    Проблема решена, это было из за того что 2 приложения клиент и сервер были запущены на 1пк, после того как сервер и клиент были запущены на разных пк, почти все заработало, но почему то клиент видит как сервер меняет оружие, а сервер не видит как клиент меняет оружие. Есть у кого варианты решения данной задачки?

    Что никто не знает как это сделать? Я уже весь инет перерыл по поводу смены оружия в мультиплеере и его синхронизацию но пусто!!! Помогите -_- пожалуйста)

    Решение:
    spoiler
    using UnityEngine;
    using UnityEngine.Networking;
    
    public class PlayerScrolWeapon : NetworkBehaviour
    {
        public GameObject[] weapon;
        [SyncVar] int syncWeaponIndex;
        private int weaponIndex = 0;
    	
        [Client]
    	void FixedUpdate()
        {
            ScrolWeapon();
            if(isLocalPlayer)
                CmdSendToServerSyncWeapon(weaponIndex);
            SendToClientSyncWeapon();
    	}
    
        void ScrolWeapon()
        {
            if(isLocalPlayer)
            {
                if(Input.GetAxisRaw("Mouse ScrollWheel") > 0f)
                {
                    if (weaponIndex > 3)
                        weaponIndex = 0;
                    else
                        weaponIndex++;
                }
                else if(Input.GetAxisRaw("Mouse ScrollWheel") < 0f)
                {
                    if (weaponIndex < 0)
                        weaponIndex = 3;
                    else
                        weaponIndex--;
                }
    
                for (int i = 0; i < 4; i++)
                    if (i == weaponIndex)
                        weapon[i].SetActive(true);
                    else
                        weapon[i].SetActive(false);
            }
        }
    
        void SendToClientSyncWeapon()
        {
            if(!isLocalPlayer)
            {
                for (int i = 0; i < 4; i++)
                    if (i == syncWeaponIndex)
                        weapon[i].SetActive(true);
                    else
                        weapon[i].SetActive(false);
            }
        }
    
        [Command]
        void CmdSendToServerSyncWeapon(int _weaponIndex)
        {
            syncWeaponIndex = _weaponIndex;
        }
    }



    Это 1 скрипт который отвечает и за смену оружия и за его синхронизацию, может кому то пригодится.

    P.S. Тема закрыта!
    Ответ написан
    Комментировать