Суббота, 27 Апреля 2024, 04:51

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Форум игроделов » Записи участника » ArtemS [124]
Результаты поиска
ArtemSДата: Вторник, 18 Сентября 2018, 05:59 | Сообщение # 61 | Тема: Rigidbody движется не плавно, а рывками, как делать движение
почетный гость
Сейчас нет на сайте
Мало инфы! оч мало инфы!

хуяк, хуяк и в продакшн
ArtemSДата: Четверг, 06 Сентября 2018, 06:36 | Сообщение # 62 | Тема: Ошибка на сервере SignalR
почетный гость
Сейчас нет на сайте
Код
InvalidOperationException: Collection was modified; enumeration operation may not execute.
System.ThrowHelper.ThrowInvalidOperationException (System.ExceptionResource resource) (at <cfc149f8218b496788d8493c87de777a>:0)
System.Collections.Generic.List`1+Enumerator[T].MoveNextRare () (at <cfc149f8218b496788d8493c87de777a>:0)
System.Collections.Generic.List`1+Enumerator[T].MoveNext () (at <cfc149f8218b496788d8493c87de777a>:0)
SignalRClient+<SendAndSyncData>c__Iterator1.MoveNext () (at Assets/Scripts/SignalRClient.cs:83)
UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at C:/buildslave/unity/build/Runtime/Export/Coroutines.cs:17)


Делаю сетевую сервер-клиентскую игру. Сделал передачу координат, все прекрасно работает: координаты передаются, во всех окнах все гладенько двигается у всех, но спустя секунд 5-10 движений происходит вот эта ошибка и все! Связь будто обрывается и прекращается синхроницазия между игроками. Может кто подсказать как эту хрень избежать ?

Делаю с использованием SignalR.

Код

private IEnumerator SendAndSyncData()
    {
  yield return new WaitForSeconds(0.06f); //каждые 60 мс шлет Update

  if (_isPlayerRegister)
  {
   if (_gameHelper.CurrentPlayerGameObject)
   {

    Vector3 pos = _gameHelper.CurrentPlayerGameObject.GetComponent<PlayerController>().SyncPosition;
    Quaternion rot = _gameHelper.CurrentPlayerGameObject.GetComponent<PlayerController>().SyncRotation;
    
    SyncObjectModel syncObjectModel = new SyncObjectModel()
    {
     Id = _gameHelper.CurrentPlayerGameObject.GetComponent<SignalRIdentity>().NetworkID,

     X = pos.x,
     Y = pos.y,
     Z = pos.z,

     aX = rot.x,
     aY = rot.y,
     aZ = rot.z,
     aQ = rot.w
    };
    //отправляет на обновление syncObjectModel
    hubProxy.Invoke("UpdateModel", syncObjectModel);
   }

   //синкаем позицию
   if (_syncObjectPool.Count > 0)
   {

    foreach (var syncObjectModel in _syncObjectPool)
    {
     SignalRIdentity signalRIdentity = _gameHelper.OtherPlayers.FirstOrDefault(p => p.NetworkID == syncObjectModel.Id);
     if (signalRIdentity)
     {
      PlayerController playerController = signalRIdentity.GetComponent<PlayerController>();

      Vector3 pos = new Vector3(syncObjectModel.X, syncObjectModel.Y, syncObjectModel.Z);
      Quaternion rot =  new Quaternion(syncObjectModel.aX,
                    syncObjectModel.aY,
                    syncObjectModel.aZ,
                    syncObjectModel.aQ);

      playerController.SyncPosition = pos;
      playerController.SyncRotation = rot;
     }
    }
   }

  }
  StartCoroutine(SendAndSyncData());
    }


^
Так идет получение позиции в клиенте

Код

//рассылка обновления
  public void BroadcastShape(object state)
  {   
   if (_modelUpdated)
   {
    foreach (var item in _oneFrameSyncModels )
    {
    //если зарегестрирован значит имеет право слать свои координаты
    //шлет всем кроме себя
    if (_players.Any(p => p.ConnectionId == item.Authority))
      //вызывать (AllExcept) у всех, кроме отсылающего (item.Authority) метод  updateGameModels и слать в него item
      _hubContext.Clients.AllExcept(item.Authority).updateGameModels(item);
    }
    //здесть обнуляем список изменений
    _oneFrameSyncModels = new ConcurrentQueue<SyncObjectModel>();
    _modelUpdated = false;
   }
   }

  //обновление модели
  public void UpdateModel(SyncObjectModel clientmodel)
  {
   _oneFrameSyncModels.Enqueue(clientmodel);
   _modelUpdated = true;
  }


^
А это то, что происходит на сервере

Добавлено (06 Сентября 2018, 07:03)
---------------------------------------------
Все нашел ошибку. Забыл чистить лист на обновление


хуяк, хуяк и в продакшн

Сообщение отредактировал ArtemS - Четверг, 06 Сентября 2018, 06:51
ArtemSДата: Понедельник, 09 Апреля 2018, 18:07 | Сообщение # 63 | Тема: Проблема со сценами || Android
почетный гость
Сейчас нет на сайте
Myrkonianin, и лучше писать
Код
if (health <= 0)


хуяк, хуяк и в продакшн

Сообщение отредактировал ArtemS - Понедельник, 09 Апреля 2018, 18:07
ArtemSДата: Суббота, 07 Апреля 2018, 17:40 | Сообщение # 64 | Тема: Проблема со сценами || Android
почетный гость
Сейчас нет на сайте
а перед этой строчкой

Код
if (health == 0) {
   isRestart ();
  }


у тебя чему health равны если черед Debug.Log вывести?


хуяк, хуяк и в продакшн
ArtemSДата: Суббота, 07 Апреля 2018, 17:27 | Сообщение # 65 | Тема: Button проблема
почетный гость
Сейчас нет на сайте
ты похоже в Options кнопку перекидываешь, а не панель. ну либо надо проект смотреть.

хуяк, хуяк и в продакшн
ArtemSДата: Пятница, 06 Апреля 2018, 04:13 | Сообщение # 66 | Тема: Button проблема
почетный гость
Сейчас нет на сайте
По сути все должно работать, если ты правильно раскидал действия.

вешаешь на какой-нибудь объект скрипт,
добавляешь в public GameObject свою panel,
в кнопке с открытием панели добавляет онклик этот метод,
кнопку "язык" закинул в panel,
сделал панель не активной, чтобы кнопка "язык" была активна.


хуяк, хуяк и в продакшн
ArtemSДата: Четверг, 05 Апреля 2018, 04:07 | Сообщение # 67 | Тема: Button проблема
почетный гость
Сейчас нет на сайте
а что у тебя в Options закинуто ?

хуяк, хуяк и в продакшн
ArtemSДата: Четверг, 29 Марта 2018, 18:30 | Сообщение # 68 | Тема: Не работают кнопки GUI
почетный гость
Сейчас нет на сайте
Я надеюсь проблема не в том, что он у тебя всегда Test01 выводит ?))

в он клик какой метод вставляешь ?

если надо чтобы актив менял значение сделай что-то типа

Код

void isActive()
{active = !active}


и добавь в онклик, должно работать


хуяк, хуяк и в продакшн

Сообщение отредактировал ArtemS - Четверг, 29 Марта 2018, 18:39
ArtemSДата: Четверг, 22 Февраля 2018, 18:58 | Сообщение # 69 | Тема: Как исправить систему проверки на касание к земле?
почетный гость
Сейчас нет на сайте
Цитата drcrack ()
OnTriggerStay2D


drcrack, предполагаю, что он будет выходить из него при смене платформы


хуяк, хуяк и в продакшн
ArtemSДата: Четверг, 22 Февраля 2018, 18:09 | Сообщение # 70 | Тема: Как исправить систему проверки на касание к земле?
почетный гость
Сейчас нет на сайте
Пробовал объединят платформы через V или делать один общий коллайдер ?

хуяк, хуяк и в продакшн
ArtemSДата: Пятница, 16 Февраля 2018, 13:26 | Сообщение # 71 | Тема: Как сделать физику гранатомета?
почетный гость
Сейчас нет на сайте
Цитата Goganoid ()
как задать угол выстрела


делаешь пушку, задаешь ей какую-то механику движения ( стрелочками там чтобы вертелась относительно низа или за мышкой следила). на кончик вешаешь невидимый объект который порождает снаряд.


Цитата Goganoid ()
снаряд вращался


делаешь снаряд трехмерным и rotation вращаешь вокруг какой тебе нужно оси. либо можешь задать анимацию вращения. типа блик на пульке движется сверху вниз


хуяк, хуяк и в продакшн
ArtemSДата: Пятница, 16 Февраля 2018, 13:17 | Сообщение # 72 | Тема: Система частиц.
почетный гость
Сейчас нет на сайте
Цитата BlazeCruzer ()
 if (Time.timeSinceLevelLoad > 0.1f)
        {
            Nebula.Pause();
            StarField.Pause();
        }


в Invoke запихни это в низу Start, чтобы в Update чего попало не было


хуяк, хуяк и в продакшн
ArtemSДата: Пятница, 16 Февраля 2018, 13:10 | Сообщение # 73 | Тема: Эффект свечения
почетный гость
Сейчас нет на сайте
Есть мысль запомнить расстояние от камеры до объекта (distMax) , и делить на нее текущее расстояние (distCur). Собственно переменную свечения приравнивать к полученному результату
Код
emission = distCur / distMax
. Можешь делить/умножать (не знаю что там лучше подойдет) на какую-нибудь переменную для усиление эффекта


хуяк, хуяк и в продакшн
ArtemSДата: Пятница, 09 Февраля 2018, 08:23 | Сообщение # 74 | Тема: DoT заклинания, да и вообще заклинания
почетный гость
Сейчас нет на сайте
Цитата drcrack ()
Лично я вот вообще ничего не понял, что именно ты делаешь в этом куске кода и зачем


чтобы два одинаковых ДоТ/баф/дебаф ненакладывалось, я удаляю старый по ID, у новых ID всегда больше (ну я надеюсь :D )

Цитата drcrack ()
Правда я бы удалял other.gameObject.


а как я определю тот ли это баф или кто был раньше ?

Цитата defGMDefeloper ()
есть корутины.Можно запускать несколько одинаковых сразу с разными параметрами,а это что вы делаете ,как по мне гемор


я думал над этим... создать лист заклинаний и добавлять туда все произнесенные, потом удалять их из списка если оно закончилось. но мне опыта не хватает как это сделать и посмотреть не знаю где. Как понимаю нужно вешать какой-то скрипт на врага который будет собирать принеменные на нем заклинания


хуяк, хуяк и в продакшн
ArtemSДата: Четверг, 08 Февраля 2018, 07:46 | Сообщение # 75 | Тема: DoT заклинания, да и вообще заклинания
почетный гость
Сейчас нет на сайте
Пасаны, использую заклинания бафы/дебафы/доты как некие невидимые тригера Go которые следуют за целью.
И чтобы у цели не было 2ух одинаковых заклинаний использую такую механику.
1. Определяю такой же это спелл или нет
2. Сравниваю что было реализовано раньше и удаляю его

Код
void OnTriggerEnter2D(Collider2D other)
    {
        if ((other.gameObject.name == gameObject.name) && (other.gameObject.transform.GetInstanceID() > gameObject.transform.GetInstanceID()))            
                Destroy(gameObject);
    }


Вот собственно вопрос в том, что правильно ли я это делаю ?


хуяк, хуяк и в продакшн
ArtemSДата: Воскресенье, 07 Января 2018, 19:37 | Сообщение # 76 | Тема: Вопрос по освещению
почетный гость
Сейчас нет на сайте
Kolsefer, а коллайдеры есть на стенах ?

хуяк, хуяк и в продакшн
ArtemSДата: Понедельник, 11 Декабря 2017, 19:57 | Сообщение # 77 | Тема: Создание префаба
почетный гость
Сейчас нет на сайте
При переносе со сцены объекта в префаб с него пропадают все ссылки на канвас (слайдеры , панели и прочее). Как можно это избежать ?

Добавлено (11 декабря 2017, 19:57)
---------------------------------------------
Нашел способ, делать канвас дочерним. А можно как-то сохранять ссылки на внешние канвасы ?


хуяк, хуяк и в продакшн
ArtemSДата: Среда, 15 Ноября 2017, 17:25 | Сообщение # 78 | Тема: Аналог Start но после Update
почетный гость
Сейчас нет на сайте
pixeye, drcrack, alexsilent, да понятное дело что так можно, но есть же LateUpdate , почему не может быть Exit какой-нибудь)

хуяк, хуяк и в продакшн

Сообщение отредактировал ArtemS - Среда, 15 Ноября 2017, 17:34
ArtemSДата: Вторник, 14 Ноября 2017, 18:31 | Сообщение # 79 | Тема: Аналог Start но после Update
почетный гость
Сейчас нет на сайте
Нужен метод на подобии Start(), только чтобы выполнялся в конце первого цикла программы, ну либо хотя бы после Update() и лишь один раз ?

https://docs.unity3d.com/ru/530/Manual/ExecutionOrder.html

тут нечего подходящего не обнаружил..либо в глазки долблюсь нещадно)


хуяк, хуяк и в продакшн

Сообщение отредактировал ArtemS - Вторник, 14 Ноября 2017, 18:32
ArtemSДата: Пятница, 27 Октября 2017, 04:49 | Сообщение # 80 | Тема: Террейны.
почетный гость
Сейчас нет на сайте
CleverRus, скрин в студию!!! crazy

хуяк, хуяк и в продакшн
Форум игроделов » Записи участника » ArtemS [124]
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг