Пятница, 23 Апреля 2021, 10:54

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Форум игроделов » Записи участника » killing002 [93]
Результаты поиска
killing002Дата: Вторник, 23 Марта 2021, 17:58 | Сообщение # 1 | Тема: Что то не так с системой корутин..
почетный гость
Сейчас нет на сайте
Цитата BOOM ()
Подожди, а где у тебя прерывания корунтина командой yield?
Короче, как я понял, у тебя просто функция корунтина заканчивается и он, естественно, сборщиком тупо удаляется.

То есть ты считаешь, что у меня в корутинах нет yield.. Ты же понимаешь, что мне фреймворк не даст не прописать yield в Ienumerator.

Цитата BOOM ()
Советую сделать цикл в функции корунтина:

Не понял причем тут циклы..

Цитата BOOM ()
Лучше познакомься с корунтинами. И вообще, думаю, тебе они в твоём случае не нужны

А как ты предлагаешь еще реализовать выполнение последовательных действий нпс, если не брать в счет корутины и UniRx?

Цитата BOOM ()
И функции передвижения запрятал бы в простом FixedUpdate - рассмотри этот вариант.

Дело то не в самих методах..) А в выполнении последовательности методов .. Ты видимо не дочитал мои "объяснения, которые я запостил отдельными кусками"..))


123

Сообщение отредактировал killing002 - Вторник, 23 Марта 2021, 17:58
killing002Дата: Воскресенье, 21 Марта 2021, 15:35 | Сообщение # 2 | Тема: Что то не так с системой корутин..
почетный гость
Сейчас нет на сайте
Цитата maker-rus ()
Если у вас скрипты по 1к строк

Это гипербола, товарищ рэббит. Если вы не заметили диалог завелся в общем ключе, извольте не проецировать это на определенную душу.

По поводу новостей, прошу вас, оставьте их при себе).

Цитата maker-rus ()
что решением было не смена структуры хранения

И какая же "структура хранения данных" должна быть, позвольте узнать.

Цитата maker-rus ()
Могли бы просто процитировать сюда свое решение.

Поступать просто - мое табу


123

Сообщение отредактировал killing002 - Воскресенье, 21 Марта 2021, 15:43
killing002Дата: Среда, 17 Марта 2021, 18:02 | Сообщение # 3 | Тема: Что то не так с системой корутин..
почетный гость
Сейчас нет на сайте
А что, люди любят ковыраться в целых скриптах в 1к строк?

123
killing002Дата: Среда, 17 Марта 2021, 13:07 | Сообщение # 4 | Тема: Оптимизация графики. Прорисовка объектов на расстоянии. Свет
почетный гость
Сейчас нет на сайте
Хм, да ты прав. У меня почему с понятием "динамические объекты" ассоциируется все то, что управляется скриптами.

123
killing002Дата: Среда, 17 Марта 2021, 11:58 | Сообщение # 5 | Тема: Оптимизация графики. Прорисовка объектов на расстоянии. Свет
почетный гость
Сейчас нет на сайте
Цитата drcrack ()
юнити и так не будет рисовать обьекты за его пределами

Отрисовываться не будут, это верно. Но скрипты то просчитываться продолжат.


123
killing002Дата: Вторник, 16 Марта 2021, 17:29 | Сообщение # 6 | Тема: Оптимизация графики. Прорисовка объектов на расстоянии. Свет
почетный гость
Сейчас нет на сайте
Уменьшать уровень детализации объектов можно при помощи LOD'ов.
Скрывай динамические объекты скриптом, проверяя находится ли объект в пределах камеры или нет.

Юнити скорее всего работает с треугольниками и поэтому тебе кажется, что полигоны увеличились. Полигонов столько же, просто юнити считает треугольники.
С запеканием света давно не работал, но там все должно быть нормально, потыкай тщательнее. Если не помогает качай новую версию юнити


123
killing002Дата: Вторник, 16 Марта 2021, 15:22 | Сообщение # 7 | Тема: Что то не так с системой корутин..
почетный гость
Сейчас нет на сайте
Приветствую всех.

Написал микро менеджер последовательных действий, через корутины. Хотя это даже менеджером нельзя назвать, но суть не в этом.
Ситуация такая -
Нпс при старте заполняет лист ienumerator'ов действиями которые он хочет последовательно производить(это как бы его цикл действий по уровню) и вызывает StartCoroutine (Это обертка на обычный запуск корутин, но перед этим он делает кое-что)
Код

countOfPoints = targets.Length;

        for (int i = 0; i < countOfPoints; i++)
        {
            nativeQueueEnumerators.Add(goToPoint(aipath, setter, targets[i]));
            nativeQueueEnumerators.Add(rotateToTarget(setter, targets[i]));
            nativeQueueEnumerators.Add(waitAFewMoment(setter, _waitingTime));
        }

        StartCoroutine(setter); // вызов функции

Тут происходит заполнение этого листа. Из названий методов, которые добавляются в очередь (в реальности же, эта очередь реализована листом), видно что происходит. Тут присутствует цикл, из-за того, что точек к которым нпс идет - несколько. То есть, нпс подошел -> повернулся в определенную сторону -> подождал и поновой, но только с другой точкой уже. Все эти действия реализованы через запуски корутин. То есть, каждое действие при окончании себя, вызывает следующее из очереди.

Код

   protected List<IEnumerator> nativeQueueEnumerators = new List<IEnumerator>();
   protected Queue<IEnumerator> queueEnumerators = new Queue<IEnumerator>();

queueEnumerators является очередью, с которым взаимодействую все действия. nativeQueueEnumerators это лист, который хранит все действия на которые подписался нпс изначально(при старте). Нужен он затем, что вызов происходит следующим образом:
Код


StartCoroutine(queueEnumerators.Dequeue());


То есть вызывается корутина, но при этом удаляется это действие из очереди, и в итоге при проходе одного цикла, то есть когда нпс пройдет все точки сделает все повороты и т.д, ему нужно вернуться в первую точку и начать все с начало, и для этого и нужен nativeQueueEnumerators, в очередь queueEnumerators, опять можно засунуть все те действия и опять начать цикл без нашего вмешательства. Надеюсь понятно объяснил, теперь к проблеме, а она заключается в следующем ->
Проблема в том, что первый цикл работает нормально, нпс проходит все точки и т.д, и когда приходит время возвращаться в начало, то есть происходит добавление всех начальных действий в queueEnumerators из nativeQueueEnumerators .
Код

   protected void MoveNext(AIDestinationSetter setter)
    {
        if (queueEnumerators.Count == 0) // произошел глобальный цикл
        {
            SetStartsValues();
        }

        Coroutine cor = setter.StartCoroutine(queueEnumerators.Dequeue());

        if (cor == null)
            Debug.Log("2 цикл не начинается по причине, что не запускается корутина ");
        
    }


Эта функция и запускает следующую корутину из очереди . Setter нужен, так как класс не наследует monobehavior, Условие cor == null, я вставил, что отследить, что происходит, и это условие активируется как после того, как queueEnumerators.Count станет равным нулю(условие выше), после чего произойдет SetStartsValues(),
Код

private void SetStartsValues()
    {
        for (int i = 0; i < nativeQueueEnumerators.Count; i++)
        {
            queueEnumerators.Enqueue(nativeQueueEnumerators[i]);
           
        }
    }


Дальше корутина не вызовется, не понятно почему, то есть cor будет равен null, в консоль выдаст это сообщение и выйдет из функции и нпс просто остановится и все. Фуу, надеюсь вам понятно. Так вот в чем вопрос, почему корутина не вызывается, он просто проходит по ней и выдает null и все.

Добавлено (17 Марта 2021, 11:26)
---------------------------------------------
Что то форум погибает по-моему, либо все знающие заняты делами. В общем решение предложили на другом ресурсе и оно работает. Кому интересно почему корутины не вызываются дважды, то вам сюда: cyberforum.ru


123

Сообщение отредактировал killing002 - Вторник, 16 Марта 2021, 15:26
killing002Дата: Воскресенье, 14 Марта 2021, 12:04 | Сообщение # 8 | Тема: CustomRange в SpriteMask и аналог оператора в Lua
почетный гость
Сейчас нет на сайте
Цитата alexsilent ()
1) можно ли кодом менять CustomRange в SpriteMask (скрипт спрайтовой маски)?
Я нашёл в документации только isCustomRangeActive - как бы проверять активна ли эта опция,
но как кодом сделать её активной не могу найти...


isCustomRangeActive является свойством и у него public set, через него и можно выставить в true Custom Range.
Код

IsCustomRangeActive = true;


Цитата alexsilent ()
2) В Lua на Tic-80 был удобный оператор floor деления с float составляющей "//", есть ли аналог в юнити?
Это записывалось так в Tic-80 на Lua:


Не понял, что значит деление с флоат составляющей.. Просто используй явное преобразование - (float). Если у тебя возникла ситуация под типу этой ..
Код

int a = 5;

void Awake()
{
float c = a / 2;
// c = 2
}


Но тебе нужен float на выходе..
Код

int a = 5;

void Awake()
{
float c = a / 2.0f;
// c = 2.5
}


Каких то специальных операторов в юнити нет. Не знаю помог ли или нет..


123

Сообщение отредактировал killing002 - Воскресенье, 14 Марта 2021, 16:51
killing002Дата: Воскресенье, 14 Марта 2021, 11:42 | Сообщение # 9 | Тема: Автоматическая инициализация спрайтов в Unity
почетный гость
Сейчас нет на сайте
Как вариант юзать атласы.
Код

public SpriteAtlas atlas;
Sprite[] sprites = atlas.GetSprites();

Но тут придется drag n drop'ать атлас, но это лучше чем делать это со всем массивом спрайтов


123

Сообщение отредактировал killing002 - Воскресенье, 14 Марта 2021, 12:12
killing002Дата: Суббота, 13 Марта 2021, 19:36 | Сообщение # 10 | Тема: Проблема при рисовании изометрии
почетный гость
Сейчас нет на сайте
В любой непонятной ситуации качай другую версию юнити.

123
killing002Дата: Суббота, 13 Марта 2021, 11:43 | Сообщение # 11 | Тема: UniRx и Job system, дайте советов..
почетный гость
Сейчас нет на сайте
Цитата drcrack ()
Нет смысла делать многопоточность просто ради многопоточности, когда ты еще не знаешь, что именно будет тормозить игру

Это многопоточность ради оптимизации. То, что будет тормозить очевидно - > всякие рейкасты и проверки и логика нпс.

Вот, что по поводу JobSystem.. Я тут некоторые тесты проводил над игрой, игрался с профайлером и т.д. И заметил, что без моего собственного вмешательства , а именно добавления Job'ов и тд. Некоторые процессы сами распараллеливаются.


Тут можно наблюдать во вкладке Job, что уже существуют worker'ы. То есть Job System уже потихоньку внедряется в Unity. Как видно из скрина или нет, но там распараллеливаются процессы аниматоров, канвасов , в общем не очень понятно ..

Начитался документации по UniRx, в общем нужен для асинхронных действий какого либо характера. Как понял, на треды тоже можно распределить определенный код, но все это окутано пока тайной для меня.. И что интересно UniRx и Job System друг с другом не совместимы.


123

Сообщение отредактировал killing002 - Суббота, 13 Марта 2021, 11:54
killing002Дата: Суббота, 13 Марта 2021, 11:14 | Сообщение # 12 | Тема: Оптимизация скрипта. Update. Как правильно скриптовать?
почетный гость
Сейчас нет на сайте
Столько проверок в Update и еще такой скрипт в нескольких экземплярах в 1 кадре, да еще и на мобилки -> ну фпс 20-25 если не меньше обеспеченно. Для теста, просто заспавни штук 10 на сцене таких GO и запусти на мобилке своей и делай выводы, есть ли смысл существования этого скрипта или нет.. Если мобилки, то это сразу событийное программирование, чтобы избавиться от этих проверок в update, чем меньше проверок , да и в принципе кода в Update , тем лучше. Читай там про ивенты , делегаты..

123
killing002Дата: Четверг, 11 Марта 2021, 15:05 | Сообщение # 13 | Тема: UniRx и Job system, дайте советов..
почетный гость
Сейчас нет на сайте
Всех приветствую!
При разработке проекта возникла ситуация.. Нужно, чтобы в кадре было много нпс, например возьмем толпы зомби. Очевидно, что все это будет тормозить, и я сразу подумал о многопоточности. Много статей перечитал, часто видел такие фразы как: "юнити не потокобезопасный", "все игры на юнити тормозят" и все в этом духе. Но тем не менее я наткнулся на такие термины как UniRx и Job system. Как я понял, система заданий все же позволяет разделить код на потоки, не весь код конечно, но все же. Читая о реактивном программировании, а именно о UniRx, я так понял, что оно тоже предполагает деление на потоки. И я теряюсь в том аспекте, - что же использовать, на что способен UniRx и тд. Документацию по UniRx пока не читал, хотелось бы узнать с начало об общих положениях. Заранее спасибо за ответ.


123
killing002Дата: Вторник, 08 Сентября 2020, 14:05 | Сообщение # 14 | Тема: iTextSharp и юнити...
почетный гость
Сейчас нет на сайте
Да, вы правы. На ином ресурсе предложили один рабочий вариант. Если кому интересно, то вот, что в итоге получилось
Код
path = System.IO.Path.Combine(Application.streamingAssetsPath, "test.pdf");

  IEnumerator request()
    {
        UnityWebRequest www = UnityWebRequest.Get(path);
        yield return www.SendWebRequest();
        if (www.isNetworkError || www.isHttpError)
        {
            Debug.Log(www.error);
        }
        else
        {
            print(www.downloadHandler.data.Length);
            mm = new MemoryStream(www.downloadHandler.data);
            PdfReader reader = new PdfReader(mm);
            ITextExtractionStrategy strategy;
            testText.text = "IN";

            Rectangle rect = new Rectangle(45, 0, 135, 150);
            RenderFilter filter = new RegionTextRenderFilter(rect);
            int q;
            for (int i = 1; i <= reader.NumberOfPages; i++)
            {
                strategy = new FilteredTextRenderListener(new SimpleTextExtractionStrategy(), filter);
                print(PdfTextExtractor.GetTextFromPage(reader, i, strategy));
                testText.text = PdfTextExtractor.GetTextFromPage(reader, 1, strategy);

            }
            mm.Close();
        }
    }


123
killing002Дата: Воскресенье, 06 Сентября 2020, 21:23 | Сообщение # 15 | Тема: iTextSharp и юнити...
почетный гость
Сейчас нет на сайте
path = System.IO.Path.Combine(Application.streamingAssetsPath, "test.pdf");
path = Application.persistentDataPath + "/" + "test.pdf";
path = System.IO.Path.Combine(Application.temporaryCachePath, "test");

ПРобовал все 3 варианта, пока ничего не происходит..

Добавлено (08 Сентября 2020, 00:46)
---------------------------------------------
Вопрос все еще актуален..


123

Сообщение отредактировал killing002 - Воскресенье, 06 Сентября 2020, 21:56
killing002Дата: Воскресенье, 06 Сентября 2020, 17:52 | Сообщение # 16 | Тема: iTextSharp и юнити...
почетный гость
Сейчас нет на сайте
Приветствую. ВОзникла проблема.. буду краток , поэтому сразу к делу.
Код

#using iTextSharp.text;

PdfReader reader = new PdfReader(path);
            ITextExtractionStrategy strategy;

            Rectangle rect = new Rectangle(45, 0, 135, 150);
            RenderFilter filter = new RegionTextRenderFilter(rect);
            for (int i = 1; i <= reader.NumberOfPages; i++)
            {
                strategy = new FilteredTextRenderListener(new SimpleTextExtractionStrategy(), filter);
                print(PdfTextExtractor.GetTextFromPage(reader, i, strategy));
                testText.text = PdfTextExtractor.GetTextFromPage(reader, i, strategy);
                q = 5 / (i - 1) ;
            }


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

Объясню код:
с помощью сдк(или не сдк) iTextSharp, я считываю информацию с pdf файла(это уже заранее созданный файл). И после чего эту информацию записываю в обычный текст, который позиционируется на экране. При запуске в эдиторе, повторюсь, все ок, но при билде под андроид, как была надпись "new text", так и осталась.. ПОмогите.


123
killing002Дата: Воскресенье, 06 Сентября 2020, 17:42 | Сообщение # 17 | Тема: Сборка приложения под андроид
почетный гость
Сейчас нет на сайте
Цитата geralex ()
есть какой-то правильный подход к реализации внутреннего сохранения прогресса на мобильных устройствах?

Воспользуйся просто иным методом сохранения.. ссылка Это точно работает на андроиде, лично проверял..


123
killing002Дата: Пятница, 24 Июля 2020, 14:08 | Сообщение # 18 | Тема: Нужен совет по cloth
почетный гость
Сейчас нет на сайте
Ну да , логично. Я бы наверно так же ответил)).

123
killing002Дата: Четверг, 23 Июля 2020, 23:49 | Сообщение # 19 | Тема: Нужен совет по cloth
почетный гость
Сейчас нет на сайте
Всем хай.
Недавно стало интересно, как симуляция ткани влияет на фпс приложения под мобилки. Читал статьи как изъебыв**сь разрабы shadow fight 3, и они там призывали не использовать коллизию с другими объектами, а аккуратно настроить surface penetration у ткани и тд. Что скажите? Мб есть еще советы от знающих?


123
killing002Дата: Среда, 24 Июня 2020, 13:13 | Сообщение # 20 | Тема: Пилю видосики Unity
почетный гость
Сейчас нет на сайте
Кодить под музон конечно классно, только кто объяснять его будет..

123
Форум игроделов » Записи участника » killing002 [93]
  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск:

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