forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Проблемы разработки от EvilOkta (http://forum.boolean.name/showthread.php?t=17911)

EvilOkta 06.12.2020 00:39

Ответ: Проблемы разработки от EvilOkta
 
Машина состояний постепенно пилится на базе аниматора (спасибо pax за видео), столкнулся со следующей задачкой, видимо туплю где-то.
Есть такой кусок кода:
PHP код:

public Transform SetWalkTarget()
    {
        
System.Random rnd = new System.Random(DateTime.Now.Millisecond);
        return 
GameLogicInit.Points[rnd.Next(0GameLogicInit.Points.Count)].transform;
    }
    } 

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

seaman 06.12.2020 01:38

Ответ: Проблемы разработки от EvilOkta
 
Иметь в игре один rnd (статический), получать там где надо rnd.Next(0,1), приводить к нужному диапазону уже в объекте.

pax 06.12.2020 18:11

Ответ: Проблемы разработки от EvilOkta
 
Есть уже статический рандом в Unity
https://docs.unity3d.com/ScriptRefer...dom.Range.html

EvilOkta 14.12.2020 23:58

Ответ: Проблемы разработки от EvilOkta
 
Немного странный вопрос. Дебаггером сейчас прохожу свой код, внутри аниматора. И вижу что порядок выполнения команд такой, что аниматор как-бы находится одновременно в двух разных State. Я так подозреваю это в момент transition происходит. Как то можно отловить такой момент чтобы отфильтровать? А то получается логика в разных стейтах начинает друг друга перебивать.

pax 15.12.2020 10:30

Ответ: Проблемы разработки от EvilOkta
 
Ну тебе надо настроить транзишн так, чтобы у него Has Exit Time галка была снята и длительность (duration) была 0.

EvilOkta 02.02.2021 13:26

Ответ: Проблемы разработки от EvilOkta
 
Есть еще вопрос, как можно посмотреть через VS какие объекты остаются в памяти?
Dispose вызываю, но такое ощущение что это не помогает.

upd: вроде разобрался, выяснил, что данные файла, загруженные в оперативную память почему то остаются после уничтожения объекта в
Microsoft.IO.RecyclableMemoryStreamManager
ее как то вручную нужно чистить?
upd2: все подозрение падает на строчку
PHP код:

FileInfo XLSXFile = new FileInfo(FilePath); 

в которой загружается файл в оперативную память. Данные дергаю из Excel документа.
Как я понял FileInfo не поддерживает IDisposable и этот объем радостно улетает в LOH даже если уже не нужен и я его превращаю в null
PHP код:

XLSXFile null 

Где можно поискать решение? При множественной загрузке файлов через этот метод происходит утечка памяти, т.к. каждый предыдущий файл остается в LOH...

pax 03.02.2021 08:03

Ответ: Проблемы разработки от EvilOkta
 
Попробуй просто после использования через какое-то время вызвать сборщик мусора GC.Collect(). Память сразу обычно не очищается.


Часовой пояс GMT +4, время: 15:49.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot