|
|
|
Канал Игры Мечты: «Unity -- учим вместе» |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Просмотрел планы на конференцию предстоящую. Невооружённым глазом как-то не видно ECS.
Чтобы быть в теме предметной области контекста Unity.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
пожалуй поясню чего я так вдруг за ECS
в игровой механике ООП приводит к нескольким негативным вещам:
- все иерархии искусственны потому как отношение "является" (is A) крайне сильно, например получилось что заградительные аэростаты это наземные модели хоть они и в воздухе, буи это корабли т.к. тоже умеют плавать, сами корабли так же наземные модели, ну не летают же
- вся функциональность норовит сместиться в базовый класс непомерно его раздувая
- код сильно зацеплен, правя что-то в одном месте можно поломать сразу в трёх, из-за этого удерживать "реакцию" на грани управляемой цепной требует усилий
- код исполняется неэффективно, любая виртуальная функция это автоматически кэш-промах, любая раздутая структура из которой нужно лишь несколько полей это сразу много кэш-промахов, указатели которыми связаны классы туда же
_________________ This is what you get ...
(c) Radiohead
Последний раз редактировалось: Sh.Tac. (12:30 16-06-2018), всего редактировалось 1 раз |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Sh.Tac. : |
пожалуй поясню чего я так вдруг за ECS
|
Ну, я как бы тоже за ECS и остальной пакет ништяков. Например, мне уже лет 10 назад не нравились однопоточные cyclic-executive приложения. Но проблема в том, что ECS это experimental package. Если бы он вышел в релиз пару лет назад, то я бы даже не сомневался в выборе.
_________________ μηδείς αγεωμέτρητος εισίτω
Последний раз редактировалось: Minx (23:54 16-06-2018), всего редактировалось 1 раз |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Minx : |
А оно сейчас как experimental package .. is not production ready?
|
да, пока не стоит в проде использовать. желательно в hybrid mode. просто потому что ECS пока не дружит с редактором (только базовый просмотрщик есть)
Sh.Tac. : |
в рамках нового здравого подхода переписывать нужно практически все подсистемы, некоторые из которых не самые тривиальные, UI, сеть, физика, да и рендер тоже
|
в процессе
Minx : |
Так вопрос - стоит ли изучать легаси и когда эксперимент перестанет быть таковым?
|
Это еще не легаси. Так что изучать стоит я думаю. Хотя там изучать то и нечего - все просто.
Sh.Tac. : |
ECS может использовать прежние GameObject'ы как реализацию компонента
GameObject наследует от MonoBehaviour
|
Это вот и есть hybrid mode, он далеко не такой производительный как чистый ECS, но лучше чем то что было до ECS
_________________ MOV topka, C++ |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Есть оказывается с десяток курсов на Coursera, связанных с Unity. Не обязательно gamedev, но и он тоже.
Есть даже специализация Unity. Но вроде за деньги, или неделя триала.
Полгода назад ещё рассматривал варианты на itvdn, там подписка.
Подборка курсов от IGN на тему, среди которых и Unity.
_________________ μηδείς αγεωμέτρητος εισίτω
Последний раз редактировалось: Minx (19:40 24-06-2018), всего редактировалось 2 раз(а) |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Прошёл курс Introduction to Game Development на Coursera.
Ушло на него где-то часов 12-15. У не-программиста и без опыта Unity должно быть побольше, но не намного. Если опыт Unity есть, то вероятно будет скучно.
Все материалы доступны забесплатно, за $ только возможность сдать тесты и получить диплом.
По содержанию хорошо подойдёт для изучения Unity с нуля, а также начинающим в геймдеве.
В отличие от других и то, что понравилось:
- все что внутри качественно, ненапряжно и воспроизводимо;
- английский простой и чёткий, но может быстрый;
- идёт базовое концептуальное изложение сути вещей (а не так, что "тык, я тут пык, смотрите как оно, вау!, у нас охренительная игра, .." )
- демонстритует использование стандартных наборов, как можно быстро из них собирать прототипы;
- приучивание к "философии Unity" - параметризация, сборка как конструктор, компоненты и пр.
- затрагивание базовых best practice.
Чтобы пройти опыта программирования не нужно, вообще. В курсе даются готовые скрипты, которые потом описываются, и далее по желанию можно с ними поиграться. Под капотом сборка эмуляции солнечной системы и пары игрушек (где-то таких).
Лично мне помогло восстановить то, с чем возился полгода назад и понять ряд базовых вещей.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Shirson
1605 EGP
           Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002
 |
|
Засмотрел видео про суть ECS, с примерами.
Не оставляет ощущение, что Юнити пришли к тому, что я делал, когда писал игры на конкурсы. У меня было полное отдеделние данных от методов из обработки. И тут в демке натыкаюсь на пример, как теперь нужно хранить transformation и rotation как поля в struct и обрабатывать их из другого объекта, то бишь в System...
Странные чуЙства - то, что ты делал десять лет назад, теперь получается передовой технологией?
_________________ У меня бисера не доxеpа.
Последний раз редактировалось: Shirson (06:26 24-09-2018), всего редактировалось 1 раз |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Ширсон, я тебе открою страшную весч... Все новое - хорошо забытое старое.
Я вообще в последнее время думаю что мир IT сошел с ума, после того как туда пришли потребители смузи.
Вообще я Перловик, когда прочел про DI, я ржал в голос. До сих пор не понимаю зачем они паттерн Factory переименовали. Судя по названию - это должен был быть аналог перлового "push в ISA" (задание родителей на этапе рантаймовой инициализации). А в результате костыли и велосипеды...
Насчет ECS - первый вариант ECS (прообраз) был... в Ultima Online, внезапно.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Shirson
1605 EGP
           Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002
 |
|
Устойчивое (навязчивое) ощущение, что для Unity это будет... если не губительно, то сильно не в лучшую сторону. IMHO.
_________________ У меня бисера не доxеpа. |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Shirson : |
Устойчивое (навязчивое) ощущение, что для Unity это будет... если не губительно, то сильно не в лучшую сторону. IMHO.
|
Это сильно поднимет планку сложности разработки, конечно. Но все это ради самого главного - производительности. Подготовил данные, прошелся по ним с минимальными затратами на чтение ненужного.
Скоро будет новая демка ECS, поймете о чем я говорю
_________________ MOV topka, C++ |
|
|
Shirson
1605 EGP
           Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002
 |
|
Да я то как раз понимаю, учитывая что у себя я сам это всё на пузе прополз от и до - я эту систему сам для себя и придумал. Плюшки этой схемы мне понятны целиком и полностью, как и её минусы. А минусы это как раз сложность разработки и её длительность.
Сейчас начал смотреть обучалки по Юнити - куча вещей, которые приходилось самому кодить, в Юнити работают просто линковкой нужного объекта к нужному объекту. Гениально! Быстро, просто, надёжно. Просто бери и делай.
А вот с ECS будет не так просто всё и сильно в разрез с тем, к чему народ привык. Надеюсь, старую систему они тоже оставят (да, hybrid mode, все дела), иначе беда будет.
_________________ У меня бисера не доxеpа.
Последний раз редактировалось: Shirson (17:12 24-09-2018), всего редактировалось 1 раз |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Старая останется, конечно. Но медленно ECS будет заменять все что есть сейчас, такая идея. MonoBehaviour и ООП - это сильно большой оверхед
_________________ MOV topka, C++ |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
Shirson : |
что ты делал десять лет назад, теперь получается передовой технологией?
|
оно передовое потому что ECS органично переплетено с DOD посредством Burst compiler
сейчас в CPU полно длинных регистров (SSE/AVX) и никто их толком не использует
плюшки от SIMD в вычислениях много больше чем от многопоточки той же
добавлено спустя 12 минут:
и такое положение дел сложилось благодаря упоротости Intel как ни странно, читал сей блог и проникался
https://pharr.org/matt/blog/2018/04/30/ispc-all.html
_________________ This is what you get ...
(c) Radiohead
Последний раз редактировалось: Sh.Tac. (23:02 24-09-2018), всего редактировалось 2 раз(а) |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
нет, ECS это DOD потому что это в первую очередь организация данных в памяти. чтение данных из памяти это самая дорогая операция.
потом JobSystem сделал использование многопоточности намного проще. посмотри на threadripper, там очень большой буст будет от многопоточности, куда больший чем просто от simd.
а burst это не только векторизация (simd'ификация). векторизацию на самом деле много где используется - llvm на -O3 сам умеет векторизировать код довольно неплохо.
burst в целом берет сабсет c# кода, без референс типов (никаких строк, динамических массивов и все такое) и с большим кол-вом дополнительных знаний, с гарантией отсутствия aliasing'а (самая серьезная проблема которую решает burst, по факту) - передает все это в llvm, который уже может автовекторизировать и делать другие оптимизации намного круче чем даже с++
_________________ MOV topka, C++ |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
Jurec : |
в первую очередь организация данных в памяти
|
в первую безусловно,
но как оно полезет в регистр тоже важно, я когда увидел interleaving тогда всё встало на свои места, так я не особо втыкал, ну клади всё в линейный массив, делов-то
Цитата: |
burst это не только векторизация (simd'ификация)
|
да, но в связке с шарпом просто идеально из-за JIT, в том же ispc приходится складировать в объектнике все реализации под разные таргеты
Цитата: |
с гарантией отсутствия aliasing'а
|
ну вот Мэтт просто поленился реализовывать алиасинг у себя
а по мне так иммутабельность и RVO уже снижают остроту проблемы
Цитата: |
посмотри на threadripper
|
да, пожалуй надо мне глянуть прежде чем огульно рассуждать
_________________ This is what you get ...
(c) Radiohead |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Sh.Tac. : |
ну клади всё в линейный массив, делов-то
|
так когда тебе надо все поля классов класть в массив - это невозможно в ооп. поэтому нужен новый способ дизайна приложений - ecs
Sh.Tac. : |
но в связке с шарпом просто идеально из-за JIT
|
никакого JIT. компиляция происходит через llvm в машинный код (ну на самом деле в llvm ir, но это детали). То есть еще раз - C# компилируется в машинный код во время компиляции burst'ом. это il2cpp 2.0
_________________ MOV topka, C++ |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
да уж, не угадал ни одной буквы
вот только не понятно
Cкрытый текст (кликните здесь для просмотра)
|
по мне так товарищ Jonathan Blow идёт более верным путём
https://github.com/BSVino/JaiPrimer/blob/master/JaiPrimer.md
_________________ This is what you get ...
(c) Radiohead |
|
|
WandererX
77 EGP
 Рейтинг канала: 1(6) Репутация: 2 Сообщения: 243
Зарегистрирован: 05.12.2007
 |
|
Есть вопросы по работе с данным в юнити.
Вот например есть астероид, у него соответственно есть общая масса и содержание полезных ресурсов. Где лучше хранить эти данные?
Вопрос второй как к этим данным обращаться? Через GetComponent или вообще напрямую имяскрпита.параметр ?
А самое главное как их в файл сохранения записывать? Я смотрел пару видео на ютубе, там вроде всё просто, но такой подход годится для какой-нибудь PUBG где надо сохранять не так много параметров. А если это старкрафт например, как эти данные в одну кучу собрать или можно всю сцену целиком в файл закинуть?
|
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
При попытке сделать резиновый дизайн столкнулся с некоторыми проблемами после развертывания на устройстве или запуска из сборки. Поиск гуглами как-то результатов не принёс.. Может кто знает.
В интерфейсе Unity при изменении размеров все работает, а после сборки нет.
Есть ортографическая камера, и есть игровое поле 40х30 (т.е. пропорция 4:3 в этом примере). Хочется вписать поле в экран в зависимости от разрешения.
Пробую сделать так:
Cкрытый текст (кликните здесь для просмотра)
Код: |
// Camera adjusting.
_camera.orthographicSize = Screen.height / 2 / 100.0f;
Debug.Log("_camera.orthographicSize:" + _camera.orthographicSize);
Debug.Log("Screen.height:" + Screen.height);
Debug.Log("Screen.width:" + Screen.width);
// Field Plane - back of allplane with drag events.
{
var t = _fieldPlane.GetComponent<Transform>();
var l = t.localScale;
l.y = Screen.height / 100.0f;
l.x = l.y * Env._instance._fieldWidth / Env._instance._fieldHeight;
if (l.x > Screen.width / 100.0f)
{
float k = l.x / (Screen.width / 100.0f);
l.x /= k;
l.y /= k;
}
t.localScale = l;
Debug.Log("t.localScale:" + t.localScale);
_one_cell_x = l.x / Env._instance._fieldWidth;
_one_cell_y = l.y / Env._instance._fieldHeight;
Debug.Log("_one_cell_x:" + _one_cell_x);
Debug.Log("_one_cell_y:" + _one_cell_y);
var pos = t.localPosition;
pos.y = 0;
pos.x = 0;
t.localPosition = pos;
} |
|
_fieldPlane - фоновый компонент, т.е. он должен получиться размером в поле и вписываеым в экран; _one_cell_x, _one_cell_y - это размеры получаемой ячейки.
Код запускается на GameObject сцены, в его методе Start. Настройки камеры:
Cкрытый текст (кликните здесь для просмотра)
|
Например, запускаю на iPhone 8:
Cкрытый текст (кликните здесь для просмотра)
Код: |
_camera.orthographicSize:3.75
Screen.height:750
Screen.width:1334
t.localScale:(10.0, 7.5, 1.0)
_one_cell_x:0.25
_one_cell_y:0.25 |
|
Т.о. есть ортографическая камера, её настраиваем по высоте экрана, как по книжке. На телефоне разрешение 1334x750, совпадает с документцией.
Получаем localScale 10х7.5 - т.е. 750 в высоту, 1000 в ширину, должно вписаться по высоте и две полосы без поля от неё по бокам, по (1334 - 1000)/2 слева и справа. Ячейка 0.25, для поля 40х30.
При запуске на телефоне получается, что поле оказывается больше, чем камера. Т.е. камера видит только часть поля. Аналогичное явление наблюдается если запустить сборку под Win.
Может кто-нибудь знает как правильнее настраивать камеру для произвольного разрешения?
Через сутки добавил тжс на форум юнити.
_________________ μηδείς αγεωμέτρητος εισίτω
Последний раз редактировалось: Minx (17:01 27-03-2019), всего редактировалось 3 раз(а) |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Исследование принесло некоторые результаты. Это или непонимание работы префабов, или даже глюк движка, или одно из трёх.
Особенность в том, что в реализации выше камера сделана в виде префаба, и заранее инстанцирована в синем объекте на сцену. Для настройки на сцене есть GameObject со скриптом, и код выше запускается в его Start().
"_camera" в коде это ссылка на камеру, которая прописана в поле скрипта и видна в инспекторе:
Код: |
[SerializeField] public Camera _camera; |
Если перетащить на ссылку (_camera) префаб который оригинальный префаб в директории со всеми префабами, то глюк есть. Если перетащить инстанцированный префаб, то глюка нет.
Т.е. если работа идёт в среде юнити, то изменение оригинального префаба приводит к изменению синей камеры на сцене, если же после развертывания приложения, то изменения инстанцированных объектов не происходит.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
|
|
|
Канал Игры Мечты: «Unity -- учим вместе» |
|