Вы видите копию треда, сохраненную 18 ноября 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Допустим, есть entity с компонентом BulletComponent. Сейчас я в сообщении коллизии в этом компоненте просто использую SendMessage для отправки сообще об уроне и все. Остальные компоненты на столкнувшемся объекте обрабатывают сообщение как угодно. В этом гениальная простота ООП.
А вот как это сделать с ECS? Не понимаю.
может ты зайдешь в гугл хотя бы на 1 сек? прежде чем задавать даунский вопрос по фреймворку нужно его хотя бы ЧУТЬ изучить и понять принцип работы?
>ко-ко-ко
Я уже в ECS не один месяц пытаюсь разобраться вообще-то.
Если ты такой гуру, то поделись знаниями.
С использованием SendMessage это делает добавлением одного(!) компонента без изменения существующей системы.
Всплывающие циферки над врагами или что? Для этого создаёшь отдельную систему, которая не будет ломать текущую структуру игры.
Почему? Ты не позволишь?
А вот здесь тру-ECS, на котором строится игра
>>28056
>тру-ECS
тру ECS - это data-oriented дизайн. А это какой-то тру говнокод. То же самое делается на MonoBehaviour намного проще.
>тру ECS - это data-oriented дизайн.
Необязательно, хотя это один из основных вариантов. Суть же в отказе от калечного ООП-дизайна и четкого разделения данных и логики. Можешь хоть из постгреса свои компоненты тягать.
>Суть же в отказе от калечного наследования реализации
пофиксил
Наследование - это анти-паттерн. Не нужно его ассоциировать с ООП только потому, что оно есть в большинстве ООП-языков
https://hackernoon.com/inheritance-based-on-internal-structure-is-evil-7474cc8e64dc
>Но нахуя?
Чтобы получить хороший, годный, читаемый и расширяемый код вместо ООП-лапши. Плюс при добавлении некоторых нехитрых констрейнтов такая архитектура позволяет здорово увеличить производительность а можно не добавлять и не увеличивать, вне зависимости от этого ецс будет лучше чисто с точки зрения дизайна кода.
Опять же, тут проблема в том, что под ecs (как и под mvc, как и под ооп) многие понимают вообще что угодно. И еще многие фанатики молятся на это, как на святую корову, из-за чего у некоторых возникает отторжение. Но на самом деле это просто нехитрая техника организации кода, в которой используется композиция вместо наследования.
Хайвмайнд практически, лол.
Я об этом и говорю: "ваше ооп не ооп" ваш коммунизм не коммунизм. На сегодня никто не подразумевает под "ооп" смоллток. Под "ооп" подразумевают класс-бейзед дизайн с наследованием и инкапсуляцией, а-ля джава. Самое смешное, что даже дизайнеры джавы во весь голос повторяют, что НЕНУЖНО пихать инкапсуляцию туда, где она не нужна (геттеры\сеттеры на дата-классах, ага), но их никто не слышит. Ну то есть тут уже нет смысла о чем-то говорить, настолько все blurred. Ничего не спасти - господь, жги.
>в которой используется композиция вместо наследования.
Но ведь это совсем не аргументный аргумент. Потому что ООП не запрещает применять композицию наследования. Прост иногда наследование удобнее, иногда - композиция.
>>28089
>читаемый и расширяемый код
Ну хз, разделение данных и методов как по мне хороший способ насоздавать багов, в отличии от обратной системы, где данные прочно прилеплены к алгоритмам.
Ну хз кто там что говорит, по мне так инкапсуляция везде нужна чтобы скрывать реализацию. Да и не стоит это ничего.
>Потому что ООП не запрещает применять композицию
Я же вот о чем говорю: есть ооп-дизайн, есть ecs-дизайн. Тот факт, что твой язык поддерживает ооп (чтобы эти три буквы не значили), не означает, что ты не можешь использовать ецс-дизайн. Точно так же гугловцы в свое время написали guava для поддержки иммутабельных структур и функционального программирования на джаве, например. То есть речь как раз о том, что твой язык тебе не запрещает применять композицию, у тебя есть выбор, какую архитектуру использовать для твоего приложения: лапшеобразную ооп архитектуру или православную ецс архитектуру. Непонятно, в чем твоя претензия.
>в отличии от обратной системы, где данные прочно прилеплены к алгоритмам.
Ну читай классиков. "Лучше иметь 100 функций, оперирующих одной структурой данных, чем 10 функций, оперирующих 10 структурами данных", все в таком духе.
>>28093
>Ну хз кто там что говорит
Лол, ну вот собственно поэтому и имеем то, что имеем.
Наверно я просто стриггерился.
Я, собственно, недавно стал с наследования переходить на компоненты в своем симуляторе кокономики. Не потому что разуверился в ООП (все еще использую его) просто классы большие стали. Теперь, когда класс больше 1200 строк я тупо выделяю часть связанного функционала (и данные и алгоритмы вместе) в отдельный класс который потом можно навешивать куда хочешь как компонент. Дипломатию, например, так обособил. Теперь ее даже в других проектах можно просто навесить и радоваться.
Впрочем, для гейм дизайнера, пожалуй, важно что бы был набор постоянного АПИ, а как оно там под капотом вертится - не важно, хоть ООП, хоть ЕКС хоть в одну строку на джава скрипт.
>>28101
Ну, геймдизайнеру ецс как раз позволяет редактировать поведение игры, не касаясь кода вообще, ведь все компоненты - это просто данные, хоть в экселе их редактируй, все энтити - это просто наборы компонентов, включай\отключай как хочешь, и т.п. Ну и даже при написании логики можно постараться и обернуть это все в красивый дсл, так что это будет больше похоже на sql\datalog запросы, чем на код. У меня в моем костыле, например, ты буквально пишешь: для всех e таких что у них есть отравление, уменьшить здоровье на величину отравления - выглядит как нечто среднее между селектором jquery и кодом на прологе.
>У нас есть специальные «singleton»-компоненты/сущности. Например, у нас есть сущность с ID=1, на которой висят специальные компоненты — настройки игры.
Для этого создается компонент "Game" или "Level" и вешается на соответствующую сущность. ID тут вообще ни при чем, айди трогать не надо.
>События/запросы мы реализуем за счет создания специальных компонент.
Это говно, из-за этого у них анальный цирк с созданием временных энтитей чтобы нанести игроку урон два раза за тик. Возникло это из-за того, что у них системы завязаны на игровой цикл, хотя они должны быть функциями GameState, Events -> Events (а они изначально рассматривали системы только как сайд-эффекты, проектированием датафлоу не занимались). Хотя тут трейдоффы по производительности конечно будут, так что это зависит.
>из-за этого у них анальный цирк с созданием временных энтитей чтобы нанести игроку урон два раза за тик
Хм, это серьезный недостаток ECS и использования компонентов для сообщений.
Как ECS-господа обходят это ограничение?
Это не ecs, это их конкретная реализация. Я же говорю, в общем виде ецс описывается так:
1. Состояние S: множество троек вида [id name data], где id - натуральное число, name - имя компонента, data - содержимое компонента.
2. Логика: множество пар (cs F), где cs - это список [c] имен компонентов, F - (чистая) функция вида E, S' -> [E], где E - "входящее" событие, которое триггерит эту функцию, [E] - множество "выходящих" событий, S' - множество троек из S вида [_ c _].
И все, вся игровая логика этим описывается, плюс есть некий внешний исполнитель, который запихивает начальные события в систему (юзер инпут, сеть, таймеры) и обрабатывает конечные события (отрисовка, сеть). Если добавить ограничение, что cs должен содержать ровно один элемент, и считать любой сайд-эффект событием, получится классический сишный однопроходный data-oriented ецс. У них как раз проблема в том, что нет явного notion'а событий, поэтому функции фактически получаются E, S -> S (ну и S получается состоянием всей* программы, а не только игры, потому что глобальное состояние и сайд-эффекты). Потому что они транзишны запускают из геймлупа, ну и это кстати еще не даст распараллелить\разсинхронить обработку. Но аффтар там тащем-то как раз писал в комментах, что они планируют перевести свою ецс на событийную архитетуру.
>Это не ecs, это их конкретная реализация
Это практически стандарт ECS. Много где так сделано.
Я себе ECS представляю так
1. все игровое состояние представлено посредстом компонентов
2. компоненты явл. типом struct
3. компоненты хранятся в ассоциативных массивах (например, Dictionary)
4. каждый комп. ассоциирован с каким-то числом (entity id), это позволяет группировать разные компоненты вместе
5. можно осуществлять фильтрацию имеющихся entity по наличию у них нескольких типов комп-ов
>Но аффтар там тащем-то как раз писал в комментах, что они планируют перевести свою ецс на событийную архитетуру.
А это как?
1168x792, 0:32
ты это. partial классами тоже пользуйся. можно же разбивать логически один и тот-же класс на разные файлики когда когда разный функционал должен быть в одном месте. куда проще всем этим управлять становится.
То, что ты описываешь, не существует. По крайней мере я не видел ECS на событиях. Везде используют добавление компонентов как флагов, вместо событий
Ээ, попробуй прочитать пост, на который отвечаешь. Там как раз это весь пост и описывается.
>>28150
По-хорошему надо бы послать тебя нахуй в гугл, но давай я за тебя открою первую ссылку на гитхаб по запросу "ecs callbacks": https://github.com/alecthomas/entityx
А еще можешь попробовать почитать вот эту труднодоступную обскурную статью: https://en.wikipedia.org/wiki/Entity–component–system - когда откроешь, нажми Ctrl-F и введи "events".
И это уж не говоря о том, что я прямо в посте русским языком описал, как именно вариант с прямым изменением глобального состояния является частным случаем этой общей модели.
Испытываю некоторую фрустрацию по поводу таких аутичных ответов, извините.
от того, что туда зачем-то воткнули глобальный event dispatcher, ecs не стала более событийной.
Суть юнитивских сообщений в том, что обработчик связан с компонентом и вызовется только если компонент добавлен к объекту. Сообщения ты отправляешь объекту, а не отдельным компонентам. Поэтому получается такой событийный полиморфизм. Ты просто добавляешь какие нужно компоненты, и они задают поведение объекта. Очень просто и эффективно.
В ECS тебе придется эмулировать ООП-функции. В самом простом случае тебе в подписчиках на твой глобальный диспетчер нужно писать какой-то такой код:
// обработчик урона
void OnMessage(Entity entity, string message) {
if (message == "OnDamage" && entity.HasComponent<Damage>()) {
//
}
}
Что за хуйня? Зачем этот иф через иф? Ты вообще понимаешь, что такое подписка на событие? Это засовывание своего коллбека в список, хранящийся у глобального менеджера. Когда менеджеру приходит сообщение о событии, менеджер вызывает все коллбэки по списку. Никакие ифы в коллбэке не нужны. Сам факт подписки объекта на событие подтверждает, что он соответствует требованиям.
Нам нужна не просто подписка на событие. Нам нужно выполнять какой-то код, если entity содержит определенный/ые компоненты.
С SendMessage мы это получаем бесплатно.
C использованием компонентов как сообщений, мы создаем систему, которая фильтрует entity по компонентам. Недостатков у этого способа куча: начиная от ручного удаления компонента-флага, и заканчивая невозможностью отправить несколько сообщений за один тик.
C использования диспетчера нам нужны if в самом простом случае, чтобы фильтровать события для entity у которых есть нужный компонент. Про недостатки этого способа ничего не знаю, но уверен что их немало.
>SendMessage
Тебя даже вчерашний шторм не разбудил
https://docs.unity3d.com/ru/current/Manual/MessagingSystem.html
Лол, бедные юнити-кликуши. Буквально неделю назад агрились на интерфейсы, а тут такая зрада от юнитеков подкатила.
Юнити на питоне. Как годот на шарпе.
>>28266
Я все ещё не понимаю, зачем тебе все эти сложности, которые ты описываешь? Я вроде ясно выразился. Регистрируется слушатель сообщения. Процедура регистрации требует предъявить функцию-коллбэк в которой будет код, выполняемый каждый раз, когда данное сообщение будет послано. Регистрация делается в конструкторе компонента, атписка делается в деструкторе. Всё. О какой сложной ручной работе у тебя там идёт речь?
Во, я придумал новую систему, игровые объекты должны слать не только сообщения, а письма. Сообщение - широковещательное, письмо - адресное.
Например при коллизии пули с объектом, пуля посылает письмо объекту такому-то "ранен на столько-то". Синглтон "почтовый сервер" направляет письмо адресату и тот начинает хрустеть плотью и уменьшать свои хп, если он мясной, если же этот объект стена, то она просто рисует декаль в месте коллизии, указанном в письме.
Побежал патентовать, пока юнитеки не украли.
Сцк. Ну что же такое делается?
>я придумал новую систему, игровые объекты должны слать не только сообщения, а письма
Приходите работать к нам в unyti
>О какой сложной ручной работе у тебя там идёт речь?
Объяснаю на пальцах.
У тебя есть система считающая коллизии. Допустим, эта система отправляет события через глобальный диспетчер.
Ты подписываешься на это событие, где в коде тебе нужно применить урон от столкновения с пулей.
Допустим сигнатура метода такая: OnCollision(Entity sender, Entity receiver); код подписки примерно такой AddListener("OnCollision", OnCollision);
Как ты в подписчике поймешь, что это столкнулась пуля с игроком и что у игрока надо отнять ХП?
Я делаю, например, так в компоненте пули и все. Никакого boilerplate кода.
void OnCollision(other) { other.SendMessage("OnDamage", gameObject); }
Через глобальный диспетчер это выглядит как-то так:
void OnCollisionMessageReceived(Entity sender, Entity receiver) {
// тут надо отфильтровать sender, чтобы у него было компонент Bullet
if (sender.HasComponent<Bullet>())
EventManager.Dispatch("OnDamage", sender, receiver);
}
Ладно, уговорил. Ифы нужны. Не там, так здесь.
Долбоебина, ты понимаешь, что SendMessage мало того что пиздец какой медленный, потому что пытается вызвать метод через строчное название, так еще и пытается сделать этот вызов на всех компонентах, которые навешаны на твоем гейобжекте?
>So, on my (rather old) machine, a loop of 5000000 SendMessage calls, using an empty function, takes 9.872 seconds. A loop of 5000000 direct calls (using a cached GetComponent) takes .024 seconds. Therefore, direct calling seems to be about 400 times faster, although considering that the loop itself takes up some time, it's probably more than that
И нет, пускать все вызовы через глобальный маняменеджер маняэвентов, как местные дебилычи любят - тоже нихуя не оптимальный вариант. Вы просто два сорта даунов, спорящие чем лучше копать ямы - черенком от лопаты или полотном.
в сбилженных проектах он становится нормальным делегатом. это приблуда для удобства в эдиторе в такой форме, придурок.
Если кто не понял, то раньше при выборе префаба отображался GameObject с компонентами, и можно было быстро настроить префаб.
Теперь эта хуйня, которую нужно открывать в scene view, изменять, возвращаться обратно.
Это фейл.
обновляться? в пизду.
Короче, самый оптимальный способ для ECS - это для каждого сообщения создавать отдельную entity с компонентом-данными сообщениями. Тогда можно обойти ограничение на один компонент.
Использование диспетчером и прочих SendMessage затрудняет распараллеливание систем.
А можно ли с помощью скриптов С# прикрутить в Юнити-игру какую-то свою отдельную многопоточность? Ну типо помимо того, как Юнити сама работает и что-то обсчитывает, а ты из скрипта вызвал стандартный поток в C# и чето в нем обработал\посчитал? Или это хуйня идея? И почему?
Можно. Уан минус - нельзя вызывать юните апи из доп. потоков. А так норм, брат жив. Но лучше jobs попробуй приладить
Ну и истории у тебя.
1064x764, 0:14
каникулы что-ли неожиданно начались гдето
>>28365
до тех пор пока многопоточность отдельно от самого юнити. вон у меня например пайплайн навмеша в отдельном потоке. в потоке юнити собирается информация о мире, проверяется физон, информация отправляется в пулл потоков, там генерируется чанк, в конце пинается поток навмеша, который уже объединяет результаты в один целый, ищет путь и прочее.
>Сейчас я в сообщении коллизии в этом компоненте просто использую SendMessage для отправки сообще об уроне и все.
Ок. Скажешь как оно заработает при появлении у тебя хотя бы десятка противников с пулемётами. Вообще Юнити со своими SendMessage жидко насрали в общий котёл, пидарасы.
Для понимания ECS надо иметь определённый уровень понимания в software engineering ну или хотя бы уметь программировать.
>при появлении у тебя хотя бы десятка противников с пулемётами
Даже под самым шквальным огнем будет максимум пара десятков SendMessage за апдейт.
Экономия на спичках.
>>28436
Скорее это ECS слишком ограниченная архитектура для программирования геймплея. ECS нужно применять только для оптимизации определенных алгоритмов, а не пытаться сделать на нем всю игру.
ECS по сути своей соответствует определению игры как "базы данных с красивым интерфейсом". Если мы считаем состояние игры как БД, то кадр можно описать как серию запросов переводящих игру в состояние следующего кадра. ECS даёт такое разделение - отдельно состояние, отдельно логика.
лол. до тех пор пока эта логика находится на примитивном уровне. не всё тут так просто.
>до тех пор пока эта логика находится на примитивном уровне
Она всегда находится на примитивном уровне. Даже в шахматных монстрах вроде стокфиша.
>>28455
ололо хотелось бы узнать точку зрения этого замечательного господина >>28101 и того как он смотрит на этот вопрос.
а вообще разумеется когда ты делаешь какую-то хитрую хуйню где требуются километры спагетти чтобы связать разные участки кода и зачастую ещё и в иерархичном порядке и с приличным слоем абстракции то ECS будет болью и мучением.
Какая база данных? Что ты пиздишь? Entity-Component-System это банальный паттерн (шаблон проектирования) в котором композиция ООП предпочтительнее наследования ООП. И все бля. Ебучие фанбои, нихуя не понимаете, а всюду лезете.
Разве ECS не про отделение данных от логики?
ну а хули. вон как по твоему выглядит внутри эта хуйня? какая там иерархия компонентов?
там лол пришлось даже отдельно стейтмашину делать которая бы синхронизировала работу ИИ и контролер. плюс отдельно ИИ для планирования и стейтмашина которая меняет паттерн перемещения. отдельно даже была иная категория ИИ которая управляла сквадом меняя приоритеты действий у разных его участников. очень интересно посмотреть как это можно сделать в рамках ECS. очень увлекательное чтиво небось будет.
А как проигрывать сцену в окне Scene? У меня постоянно открывается окно Game. Бесит.
Купи второй монитор, на него выведи окно Game, а на первом всё остальное, включая сцену.
Базарю, ещё захочешь.
meh. только на дваче и можно этим кого-то впечатлить. видео старое как говно мамонта. это был прототип примерно того что можно было увидеть в FEAR. у меня на тот момент появилась первая рабочая версия моего навмеша и я решил исследовать пространство смежных проблем заебошив прототип ИИ. у меня было множество интересных ваниантов как это применить но мои идеи трансформировались раз за разом в всё более охуительные.
плюс один знакомый артист постоянно мешал моим планам. он был согласен помогать мне с проектом А но я хотел делать проект Б больше чем А. в итоге я начинал с ним делать А, но спустя какое-то время он сбегал. я начинал делать Б и он появлялся. в итоге пришлось послать его нахуй и продолжить совершенствоваться в этой сфере не делая ни один из проектов.
а ты бы как применил подобное могущество, анон?
кстати после прошлого апдейта моего навмеша я стал ебошить следующий и заодно сделал вон эту хуйню >>28132 теперь в этом ИИ можно сделать клёвые вещи и наверно надо вернутся к нему чтобы воплотить их. можно например сделать так чтобы ИИ в оптимальном порядке выполнял действия в разных местах. например последовательно надавил кнопки в разных частях лабиринта или собирал предметы рядом в оптимальном порядке.
>>28494
а че бы и нет? выглядит здорово! в юнити можно сделать щелчком пальцев, а смотреть становится интересней.
>>28496
я уверен я всё делаю правильно! разбавляю скуку треда.
>>28498
вообще тебе уже посоветовали два монитора (у меня два). но вообще можно же просто переместить окошко Game куда-нибудь нахуй. мне оно большую часть времени не нужно и поэтому я перемещаю его куда-нибудь в угол.
например сюда
> у меня два
На работе тоже два, а дома один. На одном пиздец как неудобно, после того как к двум привык.
Вообще и двух маловато, особенно когда с анимациями работаешь.
Просто в юнити нет нормального переключения workspace'ов.
Я тоже кстати одно время игрался с ии, но я использовал утилитарный подход а у тебя как понимаю GOAP как в фире? Удалось добиться прикольных результатов, юниты грамотно сидели по препятсвиям, съебывали если их сильно обстреливаешь/подходишь близко/кидаешь гранату, плюс поверх этого сделал ии отряда, чтобы он распределял юнитов на подавление огнем/обходы с фланга/отступление и т.д.
Для фпс пилил, но проект затух, но наработки применил потом для икскома своего.
йеп. это GOAP как в фире. сделал ещё обратный поиск, но этим никого не удивить. но изначально я применял его для немного иных целей. у меня список проблем начинался с того как научить ИИ организовывать собственный инвентарь. и GOAP отлично решал проблемы выстраивания цепочек из действий вроде "освободить основной слот", "положить предмет в основной слот", "одеть штаны", "перезарядить оружие" и так далее. просто потом к списку возможностей добавились подбирание и применение предметов в мире.
но тут появилась иная проблема - отсутствие возможности адекватно оценивать дистанцию между применяемыми предметами. и недостаточно крутые мои собственные наработки чтобы я мог добавлять такие фичи с лёгкостью.
у меня изначально наработки планировались для чего-то очень отдаленно похожего на сталкер и Xenus но без графона. хотел сделать чтобы симулировался какой-то примитивный социум вроде негров в джунглях и продвинутый милитаризированный социум вроде корпорантов с военными лабораториями и между ними были бы постоянно односторонние стычки за территорию. а задачей игрока было бы проникнуть в лабораторию корпорантов незаметно, но для этого пришлось бы как-то состыковать свои атаки с атаками негров. были интересные наработки в плане симуляции социума. например генератор террейна у меня выдавал диаграмму вороного чтобы делить мир на биомы а я переиспользовал его как граф с локациями чтобы между ними перемещались агенты и делали всякие дела не загружая их в мир, примерно как в иксах, или космических рейнджерах. негры ходили собирали бананы, носили их в деревню, корпоранты отстреливали негров если они слишком наглели.
пока что пик развития этой идеи это сделать что-то вроде симулятора командира отряда на манер SW republic commando но только в открытом мире. чтобы вокруг ходили терминаторы и вели охоту на мясное окружение, а игроку надо было шастать по помойкам и искать себе членов в отряд сопротивления и командовать ими.
>>28525
не. но разумеется я отлично знаком с этим подходом. миллион вагон вещей разумеется у меня было реализовано в виде данных и обрабатывалось одной функцией. например в проекте с бегающим человечком у меня был простенький менеджер баллистики который обрабатывал все сорты пуль. пули разумеется в массиве со структами, в потоке юнити рэйкастили вперёд, а потом в других потоках обрабатывались одной функцией.
йеп. это GOAP как в фире. сделал ещё обратный поиск, но этим никого не удивить. но изначально я применял его для немного иных целей. у меня список проблем начинался с того как научить ИИ организовывать собственный инвентарь. и GOAP отлично решал проблемы выстраивания цепочек из действий вроде "освободить основной слот", "положить предмет в основной слот", "одеть штаны", "перезарядить оружие" и так далее. просто потом к списку возможностей добавились подбирание и применение предметов в мире.
но тут появилась иная проблема - отсутствие возможности адекватно оценивать дистанцию между применяемыми предметами. и недостаточно крутые мои собственные наработки чтобы я мог добавлять такие фичи с лёгкостью.
у меня изначально наработки планировались для чего-то очень отдаленно похожего на сталкер и Xenus но без графона. хотел сделать чтобы симулировался какой-то примитивный социум вроде негров в джунглях и продвинутый милитаризированный социум вроде корпорантов с военными лабораториями и между ними были бы постоянно односторонние стычки за территорию. а задачей игрока было бы проникнуть в лабораторию корпорантов незаметно, но для этого пришлось бы как-то состыковать свои атаки с атаками негров. были интересные наработки в плане симуляции социума. например генератор террейна у меня выдавал диаграмму вороного чтобы делить мир на биомы а я переиспользовал его как граф с локациями чтобы между ними перемещались агенты и делали всякие дела не загружая их в мир, примерно как в иксах, или космических рейнджерах. негры ходили собирали бананы, носили их в деревню, корпоранты отстреливали негров если они слишком наглели.
пока что пик развития этой идеи это сделать что-то вроде симулятора командира отряда на манер SW republic commando но только в открытом мире. чтобы вокруг ходили терминаторы и вели охоту на мясное окружение, а игроку надо было шастать по помойкам и искать себе членов в отряд сопротивления и командовать ими.
>>28525
не. но разумеется я отлично знаком с этим подходом. миллион вагон вещей разумеется у меня было реализовано в виде данных и обрабатывалось одной функцией. например в проекте с бегающим человечком у меня был простенький менеджер баллистики который обрабатывал все сорты пуль. пули разумеется в массиве со структами, в потоке юнити рэйкастили вперёд, а потом в других потоках обрабатывались одной функцией.
А вот такая. Если ты будешь всерьёз работать с ECS (я на работе закодировал целую игру на Entitas, сколько-то там миллионов закачек уже) - то очень скоро начнёшь мыслить в терминах данных и запросов к ним.
У меня для вас новая парадигма. Но я ее вам не покажу. Потому что у вас паспорта нет.
В терминах данных и запросов к ним мыслит любой программист, программа которого активно работает с данными.
Все ещё непонятно, при чем здесь паттерн, завязанный на композиции, как я описал выше.
Сдаётся мне, ты наслушался баззвордов из рекламных видосов юнитеков.
Вообще то я занимаюсь ECS уже третий год, задолго до того как Юнити решили очередную фичу, которая никогда не будет доделана, добавить. Игру шипнули до того как Юнити что то публично выложили.
Типично при ООП ты думаешь в терминах данных объекта и какие манипуляции ты проделываешь над объектом, что объект делает. Не про состояние игры в целом и как ты это состояние трансформируешь.
Чушь. ООП не вещь в себе, при ООП тебе ничто не мешает думать так, как эффективнее для поставленной задачи. На ООП 30 лет корпоративный бд-софт пишется и успешно работает.
При этом ООП универсален: есть классы, есть методы. Внутри методов можно ебашить код на любой парадигме, хоть на императивной, хоть на функциональной, хоть на сущностно-компонентной.
Я пожалуй, ещё раз повторюсь, ООП - каркас, ECS - одна из реализаций наполнения каркаса. Таким образом ECS - часть ООП. Сравнивать их все равно, что сравнивать печень человека с самим человеком.
>Точно нельзя? Даже с using?
Хоть с двумя using. Вызывать то оно вызывается только ошибку выкидывает
>ололо хотелось бы узнать точку зрения этого замечательного господина >>28101 и того как он смотрит на этот вопрос.
Ну кстати для моей кокономики идеально бы подошла ECS если бы я с нее начал пилить. Потому что экономика это набор таблиц по сути, одномерных. БД то есть. А абстракции, наверно, можно и в ECS реализовать.
>>28461
>Какая база данных? Что ты пиздишь?
ECS предполагает хранить данные в виде таблиц, это формат баз данных.
Потому что работу с юнити апи нужно переводить в главный поток. В сайд потоках делаешь вычисления, в маин потоке обрабатываешь результат.
В Entitas очень годная система сборщиков (Collectors), можно создавать разные условия, типа "Всё что имеет здоровье, является игроком или монстром и не мертво", в реактивных системах ещё и дополнительным фильтром пройти.
>>28573
ООП значит объединение состояния с логикой с сокрытием состояния. Истинный ООП-код должен оперировать автономными агентами обменивающимися сообщениями (SendMessage в этом плане кстати ближе к Ъ-ООП). ECS это разделение состояния, не имеющего логики, и логики, которая не должна иметь в себе состояния. ECS это ближе к функциональному подходу, где игру можно описать как функцию от состояния, времени и ввода, отдающую новое состояние. Это достаточно разные вещи, но ничего не мешает использовать их вместе разумеется. Делать интерфейс на ECS есть форма мазохизма (в Tanki Online так делали, брррр). Ты можешь конечно использовать ООП-синтаксис для не-ООП кода.
а брось че там учить. гейдев это сорт исследовательской работы. к этому можно притупить имея минимум знаний и обрести их методически наступая на грабли.
>>28559
самописный UI конечно-же. в юнити своё окошко с говном довольно легко сделать, если знать как. у меня было 3 версии этого генератора карты.
первая была без UI, но я решил что ну его нахуй когда увидел 20 закрывающих скобок подряд.
вторая с UI на первом скриншоте где MapPatternEdit. где я имел плохое понимание о сериализации но в целом это было более-менее функциональным говном.
третья версия на втором и третем скриншоте которую я написал по человечески зная что оказывается можно же скриптабл обжекты совать в другие скриптабл обжекты и сериализовал каждую ноду как скриптабл обжект.
>>28632
хе хе. не-а. ECS это не набор таблиц и данных. это приблизительно равноценно тому что всё описываемое должно состоять из комбинируемых между собой struct. так что хуй а не полиморфизм. нету больше цепочки наследования "олигарх : гражданин : человек : пёс : существо" где на каждом этапе у тебя оно становится всё менее абстрактным. у тебя есть просто олигарх который как химера собран из кусков других существ. конечно же можно добиться какой-то формы абстракции, но можно охуеть делая это.
Это именно набор таблиц, всё описываемое состоит из набора структурок. Каждый тип компонентов по сути таблица, а сама Entity это primary key. В иных реализациях даже такого объекта как Entity нет - чистый цифровой ключ по которому можно спросить систему "эй ты, объект 1337, ты кто?" и тот тебе выложит всё что в нём есть. Или давать запросы "дай мне все ключи к объектам содержащим такие и такие записи". Эдакий специфический упрощённый SQL.
>А есть LINQ для ECS?
Так вроде LINQ должен и так работать. У тебя жи сущности и компоненты в массиве, вот и хуячь LINQ запросы к массиву. Или в системе опиши, она по сути сама является запросом.
>>28658
>добиться какой-то формы абстракции, но можно охуеть
Без абстракций как то хуево. Хз, может не привычно
А как быть со связями между компонентами? У меня классы имеют кучу ссылок на другие классы. В компонентах так можно или не тру?
>А как быть со связями между компонентами?
Слабое место. Типично фигачат id другого компонента и всё. Сам id типично состоит из индекса и поколения, засунутых в 32/64 бита. Это кстати решает проблему уведомить всех кого надо про смерть объекта чтобы ссылки лишние не висели и проблему мёртвых ссылок - по такому id ты всегда можешь сказать что объект уже умер.
Fix: id другой Entity.
>Entitas is a super fast Entity Component System (ECS) Framework specifically made for C# and Unity
Может ли энтитас работать с годотом?
>>Entitas is a super fast Entity Component System (ECS)
>классы для компонентов
>super fast
смешно
@
до сих пор не пойму, как блядь работает местный snap to grid
Оф.доки читал, очень уж скудно. Может кто пояснит, ибо заебался уже с не-модульными левелами.
* имею ввиду 3д
Быстрей чем штатное юнити-говно по тестам.
Управление камерой не на мыше это огромная область. tl;dr: нужно определять куда игрок скорее всего хочет смотреть и помогать ему. Например в шутане камера оказавшись на враге должна притормаживать в ожидании что игрок хочет прицелиться на врага. С кучей условий - типа если игрок вертит камеру быстро то он скорее всего не хочет прицелиться, а если стал притормаживать то скорее всего хочет.
Спасибо за пояснение, озадачил прям. А не знаешь, есть ли в ассетсторе ассет с реализацией? Хочется взглянуть на пример.
Таких нет. Это довольно узкоспецифическая область, в интернете есть очень мало упоминаний как работает управление камерой в консольных шутерах - но это очень сложные системы. Большинство вообще не в курсе их существования. Вот отсюда можно начать: http://drstrangevolt.blogspot.com/2012/12/aim-acceleration-in-console-shooters-part1.html и адаптировать для мабилок.
Как будто побывал в масонской ложе, спасибо за просвещение. Думаю, обойдусь рэйкастом: луч попадает на enemy-> player фиксируется на нём, знания пока слабоваты.
Автовыстрелы еще сделай, а игрок просто для рекламных видосов нужен
Заново, импортнется только часть и криво
https://www.photonengine.com/en-US/Quantum
Есть энное количество неписей. Они должны преследовать игрока, при этом не сталкиваясь друг с другом.
И всё бы было хорошо, если бы эти ребята жили в 3D. Я бы прикрутил навмеш и в хуй бы не дул, как говорится.
Но как это реализовать в 2D?
Можно, конечно, просто заставить их бампаться друг об друга, но не хотелось бы использовать динамику там, где она не нужна. Да и выглядит сие топорно.
Если я импортирую модель с анимацией то все ок, но если пытаюсь сделать отдельно то ничего не работает.
В майе я сначала экспортирую модель без анимаций(скрин 1). Потом открываю файл с анимациями, делаю бейк, удаляю все меши, оставляя только кости(скрин 2). Экспортирую в fbx с анимацией.
В юньке создаю аватар из fbx с моделькой. Назначаю рандомную кость для rootNode.(скрин 3). А в fbx с анимацией ставлю этот аватар во вкладке rig.
Модельку немного пидорасит по оси y в процессе анимации, но анимация не та, некоторые анимации вообще польностью не работают.
Что я делаю не так?
Может ли это быть из за немного другой иерархии(скрин 2)?
Я бы тебе отсосал, будь я пидором. Спасибо.
https://assetstore.unity.com/packages/templates/mfpc-mobile-first-person-controller-54270
>https://assetstore.unity.com/packages/templates/mfpc-mobile-first-person-controller-54270
Где ты там прицеливание нашёл?
Оно не автоматическое же, а работа с сенсором настроена чики-пуки. Стандартное говно ерзает, как припадочное.
>15к$
Ты даун.
>измеряет качество кода в килобайтах
Вдвойне даун.
>жмотится заплатить жалких 15 баксов за готовое решение и требует чтобы все сделали за него и бесплатно
Трижды даун.
>не может написать контроллер персонажа
Просто ultimate имбецил.
Даже ссать на тебя зашкварно, просто съеби под шконарь и не пиши сюда больше.
А ты можешь? Ну напиши, раз герой такой, и запости со фри доступом. Я вот могу, но мне лень. Я ему 5 баксов и так занёс, он, наверное, от счастья кончил в очко твоей мамаши, быдло агрессивное.
>15к$
Там 15к, я понимаю что ты мамкин миллионер и уже ослеп от элитного стекломоя, но даже я, пробежав пост по диагонали заметил.
Мимо
>А ты можешь? Ну напиши, раз герой такой, и запости со фри доступом. Я вот могу, но мне лень. Я ему 5 баксов и так занёс, он, наверное, от счастья кончил в очко твоей мамаши, быдло агрессивное.
- раздался пронзительный голос со стороны параши.
Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье. Пусть кукарекает, что с него взять?
Петух — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора лет каждая ночь была очень трудной, и теперь его анус был разработан настолько, что он без труда мог спрятать в нём банку сгущёнки.
Окей, по ссылке я ясен хуй не переходил, беру свои слова обратно и ссу на того нищука с реквестом. 15 баксов это действительно немного.
Накодь сам, просто меняй компонент text, добавляя по одной букве.
Иммерсив sci-fi шутер.
Это модельки из вахи. Просто мне нравится изучать и экспериментировать с красивыми модельками, а не бездушными кубами.
Пока в планах пильнуть часть того же dow это RTS если вдруг не знаешь с некоторыми фишечками из другого кириллоподелия Zero-K тоже RTS.
Почему работает анимация я так и не разобрался, так что бампаю реквест двачеэкспертов.
пост #159 писал какой-то мимохуй
Не дефолтный, а классический. "Дефолтный" это ругательный эпитет, как "негр" или "женщина".
У перегонных редко бывает форма правильная. Еще и эмиссия повышенная. Смешение кровей до добра не доводит.
Все еще лучше чем стараться ради школьников, пожирающих любое йоба говно без разбору.
Может потому что анимация не переносится и нужно все в юнити анимировать.
> не работает
Бастует? Или ты жалуешься, что isTrigger задизейблен, когда convex выключен?
> очень понравилась его детализация
Только её врядли оценят пользователи. Игра на вкладке Scene это не совсем игра, никому кроме тебя (ошибаюсь?) крутой коллайдер не нужен. Еще учти, что динамическое инстанцирование скейленного меха с меш-коллайдером (конвексным) стоит до 200мс в погожий день.
Только у меня с конкретным нейстед префабсом был очень плохой опыт общения, когда пришел проект практически доделаный кем-то очень криворуким на допилить. И нейстед префабс доставлял мне адскую жопную боль, ибо при каждом маломальски изменении единообразного префаба, на которых и строилась архитектура - ебашил мне сохранение всех дочек внутренних, без моей на то воли.
Может обьясните - зачем он есть и в чем прелесть. Видосики от юнитеков и авторов ни о чем прикладном не говорят, а на форуме только темы касательно прикладного пользования без указания причины - нахуя это нужно
Тебе юнитеки пишут прямым текстов - нихуя коллайдер не риджидбадя, пока он не конвексный. по-моему самая первая пятая юнька начала на это ругаться. Онли конвекс. И возможность в свежих версиях этот конвекс покрутить ползунки. Бай зе вей - количество поликов на один меш увеличится с 256 на нормальное в ближайших обновлениях. Эдакий симплигон встроенный будет именно для конвексов
Ну смотри, допустим у тебя есть несколько префабов неписей, ну там бармен, уборщица, пьяница и т.д. И есть у тебя сотня префабов домов разных, и в каждом эти неписи в разных конфигурациях. И если ты захочешь поменять что-то в одном из неписей, то без нестед префабов тебе придётся менять это в каждом из сотни домов. Так что нестед префабы нужны, чтобы избежать подобной ебли.
Ты говоришь про нейстиед прифабес из ассетстора? Там пиздец кривые реализации. Это говно из говна в говне. А реализация от Юнитеков просто божественная.
>изменил параметр в одном нестеб префабе
>рекурсивно изменилось 99% проекта
вложенные префабы - это зло. вложенные префабы - это как наследование. все знают что наследование - плохо.
Ты скозал?
Нахуя подобные вещи делать вообще в окне иерархии. Для подобной нели в любом же случае БД со свойствами, или для убогих - скриптбл обджекты. хуяк-хуяк, сериализовали - збс.
Нужен немного другой пример, ибо видя задачу вспоминаю решение или костыль. Можно больше абстракции
>Может обьясните - зачем он есть и в чем прелесть. Видосики от юнитеков и авторов ни о чем прикладном не говорят, а на форуме только темы касательно прикладного пользования без указания причины - нахуя это нужно
Может дело в том что ты недоразвитый долбоёб с однопотоком головного мозга в 2к18, у которого игры не тормозят только на топ пеках и топ-смартфонах и ты не можешь учиться в соверменные и актуальные парадигмы и приёмы?
Потому что ты дебич-шизик не могущий ни во что кроме MonoBehaviour и тормоза на >50 объектов+одноядро долбится в соточку.
То тебе ECS не нравится, то тебе Job System не нравится. А долбиться в соточку тебе нравится.
Это нужно для дезигнеров, не могущих в кодинг, чтобы всё в окне иерархии делалось.
И че ты доебался? Про многопоточность я топлю еще с ранних беток изучить и побаловаться с этим делом успел и заценил и уже юзаю, благо было время между проектами, и удалось прикрутить к ml-agent, где потоки пиздец как нужны.
Ебать ты дикий...
Я про конкретный нейстед префабс, который не имеет к сабжу обсуждаемого отношения
Спасибо. Вот ты адекват и все разложил.
закрыл глаза, представил Задорнова, произносящего в адрес дезигнеров "инсектором! ну-ту-пы-ые!". Даже попустило
Потому что можно создать префаб человека (с анимашками), можно создать префаб винтовки (умеет стрелять) - и сделать префаб человек-с-винтовкой. Так же можно создать префаб гранатомета. И создать префаб чеовек-с-гранатометом. При изменении человека будут меняться оба солдата. И еще засунуть 10 prefab variant'ов "ракетницы" рядом с префабов машины и получить префаб "ракетная установка". При изменении гранатомета будет изменен и гранатомет, и ракетница, и ракетная установка.
Напомни, через сколько месяцев после релиза у "this is the police" появилась песочница? Часто из кодом создаешь анимации (не крутишь их, а именно создаешь)?
Яебу кагда когда она вышла, что ты подразумеваешь под песочницей, и нахуя там анимации из кода. Братиш, ты говоришь какие-то странные тезисы, которые не все обязаны знать. Если знаешь что и как - тупо пиши, а не задавай странные вопросы, которые никому ничего не объясняют, а только выставляют тебя странным типом с манией величия
Ну, тогда посмотрим. спасибо
Дада, никогда не забуду, как пехотинцы в старкрафте шли в штыковую, когда патроны кончались. А, нет, это ты обосрался.
Другие аргументы против твоего обсера? Все в курсе, что бесконечные, там и штыковую я тоже сам придумал
Я жалуюсь что два серх детальных меша друг с другом не работают, когда очень хочется.
Ух, 200 мс это больно. Так что получается, вы все делаете конструкцию из кубов вместо меша? Как вы делаете свои детальные колайдеры? Или вы их не делаете? Алсо можно ли использовать istrigger как колайдер? Если да то можно пример кода пожалуйста? не кричите чтобы я загуглил, я прост в гугле на эту тему запутался
тебе квадратно-гнездовой способ мышления не мешает?
>>29136
если экспортируешь свою хуйню как гуманойда, то юнити знает какая кость куда. если нет то разумеется имена и иерархия должна быть такой-же, откуда знать иначе где какая кость то?
>>29366
не делай детальные коллайдеры. вообще че ты там делаешь? творить хуйню вроде "а давайте сделаем целый уровень одним меш коллайдером и чтобы он двигался ещё" не рекомендуется. меш коллайдеры вообще физические движки пережевывают не очень быстро.
чтобы ловить коллизии с коллайдером есть специально отдельный код.
Конвекс или его подобие из тридередактора. Деградировавшая моделька отвечающая за физику там-же где лежит основная
Ты в майнкрафт переиграл
Я делаю так, чтобы модельки падали и ударялось прикольно, чтобы глаз не резало. Очень заебывает 10-30 кубов на модельке настраивать. Есть какой-то плагин, который автоматом кубы генерит, но со сложными фигурами (пикап с пустым задним отсеком) он справляется только очень большим количеством кубов (а 100500 кубов, я уверен, выльются опять же в потерянные кадры).
Почему кубы то? Кстати у кубов коллайдер очень странный и неправильно отрабатывает физику. Была задача сделать хват предмета физикой через джоинты и форсы (для виара) в итоге все отрабатывает правильно, включая конвексы, а кубы распидорашивает. Мешколлайдер такого-же куба даже без сабдивайда сетки дает нормальный результат. Оказалось, что у них вертексы физ. взаимодействия однонаправленные(наружу) а у всего остального - нет, и если мы что-то с большим усилием погружжаем в куб - он ебется, а остальные честно отрабатывают. Юнитеки в курсе, но зачем они так сделали - не понятно
Интересно. В плане перехвата пуль и падения объекта у меня с кубами все норм. А с кубами в жоинтах, гришь, проблемы возникают? Спасибо, буду знать.
Они там есть в принципе. Усилие приводящее к проходу сквозь коллизию вызывает не желание обьекта под собственной массой форснуться из куба в ближайший вектор до поверхности, а ждать пока следующие вертексы физики начнут взаимодействие друг с другом. Можешь провести эксперимент и захерачить предмет в куб юнитевский и заценить, покадрово - куда его херачит. и так-же сделать с кубом-мешем. Разница огромная
> В чем проблема?
Вот в этом:
> пробежался по рекурсии, используя для поиска имена, накинул с ее помощью на каджую компонент, который поменяет любое тебе нужное свойство на новое
Интеграция фич в юнитях
>Сначала юнитеки купили NGUI
>Потом юнитеки купили keijiro
>Потом купили ECS
>Купили Nested Prefabs
>TextMeshPro
А еще они купили пробилдер и кинули в народ. Пользуйся! https://blogs.unity3d.com/ru/2018/02/15/probuilder-joins-unity-offering-integrated-in-editor-advanced-level-design/
Это я уже всё это делал. Как разные текстуры на разные треугольники одного меша наложить?
731x582, 0:32
Алсо, в новых Nested Префабах это будет правильно работать? Не спешу обновляться, но если это надо будет сделать для великого дела изменения тумбочек, то я готов.
В ящике слева ты задал значение - при изменении префаба юнити... эм... изменило значение префаба. А переопределения остались переопределениями. Ну, в этом суть префабов. Скажем так: в префабе дефолтные значения, на сцене интересные значения.
Имеется ввиду работа в инспекторе - раскидал, забыл про брейк префаб инстанс и... пизда, че. И да, есть варик завести скриптбл обджект, где хранятся как раз вот эти состояния по типам, и играться с ними, через обращение из твоего скрипта экзекьютеблом в едиторе
И что будет? Боздо подарит мне скоростной интернет?
Никакой "брейк префаб инстанс", как правило, не нужен, т.к. тогда эффективность префабов обнуляется. Есть вариант, задавать "интересное" значение равным "дефолтовому". Но так себе вариант - от "брейк префаб инстанс" отличается несильно. Вариант юзать как можно больше prefab variant'ов - кусок говна, т.к. у тебя удобный ползунок для смены спрайтов. Ну, млин, получается что нужно аккуратненько и лишний раз префаб не менять. Можешь для страховки использовать правило "использовать на сценах только prefab variant'ы". Эх, нету в мире совершенства - если хочешь, я могу убить тебя, чтобы ты не мучался.
>Эх, нету в мире совершенства - если хочешь, я могу убить тебя, чтобы ты не мучался.
Лучше поставить ГОДОТ. Там полноценный инстансинг префабов (сцен), включая нестед любого уровня вложенности.
Ты даже не смог понять суть проблемы, но выпрыгиваешь: ПОСТАВЬ ГОДОТ ПОСТАВЬ ЕГО ПОЛНОСТЬЮ - ты не черт из табакерки, ты не очень разумный школьник.
659x495, 0:16
>>29470
Если я двигаю ползунок с дефолтного значения, а потом возвращаю его на прежнее то переменная становится "интересной" и изменение префаба её не затрагивает, хотя по факту значение остается таким же. Я плохо представляю как юнити работает под капотом, поэтому пока не знаю как это имитировать в коде. Попробовал корутином переставлять значение на -1 и обратно - не помогло.
>Ты даже не смог понять суть проблемы
Ты тоже не смог понять суть проблемы. Инстансы сцен годота в отличие от префабов на вебм, могут переопределять общие значения переменных для себя. В отличие от того, что показано на вебм. Переопределяют значения любых параметров, установленных в сцене-префабе и это переопределение не влияет на другие инстансы. Но изменение параметра в корневой сцене всё еще затрагивает инстансы, если этот параметр не переопределен. Юнити сосёт не разгибаясь у опенсорца.
в юнити так-же
[FormerlySerializedAs("old name")]
https://docs.unity3d.com/ScriptReference/PrefabUtility.DisconnectPrefabInstance.html
Можешь еще посмотреть другие функции в PrefabUtility, мб пригодятся
А чего обычно добиваются с его помощью? На видосе видно, какой ебанутый эффеки у нас происходит при сохранении префаба
Инстансы могут переопределять общие значения переменных для себя - это показано на вебм. Изменение параметра в корневой сцене всё еще затрагивает инстансы, если этот параметр не переопределен - это тоже есть. В юньке инстанция префаба может жить не только на сцене, то и внутри другого префаба (насколько я тебя понял, годот так тоже умеет). Еще в юньке есть prefab variant'ы и save/load настроек компонента, чего нет в годоте. Использовать менее функциональный инструмент не очень идея. Про суть проблемы: нашему строителю тумбочек это не нужно.
Не обязательно. На гитхабе давненько видел репозиторий, где человек клепает кастомные шкурки для редактора. Хотя это на совсем любителя тема
В окне игры как по умолчанию один спрайт накладывается на другой, но в окне сцены всё работает как на видео. Чяднт?
Тебе же все видео твердят про сортинг груп. https://docs.unity3d.com/Manual/SortingGroup.html Если с чем-то сталкиваешься - сразу лезь в документацию, а если там нет, гугли на юнитиансверс, пока их не полюбишь
Умничка, что изучаешь по оф. туториалам, а не говнокодерам с ютюба(есть пара хороших ребят, но это только те, на кого сами юнитеки подписаны). Все бы так начинали...
Так суть в том, что в сцене всё работает нормально, но в игре не работает вообще, пикрелейтед. Сортинг групы само собой проставил. Да и раньше я уже такое делал тащемта, всё было ок.
Просто демка. Только надо считать все на сервере, от клиента только ввод брать (и графон показывать)
Пиши тогда на чем знаешь - джанго, нода, руби, аспнеткор. Не понимаю, что значит в твоем понимании - что есть "попроще"
Движок на шарпе... Ну пиздец теперь. Ебись если хочешь c asp.net core, но есть вероятность что быстро без навыков серверного охуеешь. Но если думаешь, что знаешь шарп - флаг тебе в руки открою тебе тайну, шарп юнитевые разработчики не знают и имеют лишь общие и ограниченные представления о нем
Либо Lidgren.Network, либо Photon Server, если тебе нужна готовая система с мастер сервером, который запускает инстанцы и держит связь с другими серверами.
Отчасти.
ECS - сила, ООП - могила. Буквально неделю назад я копротивлялся за ООП, но тут почитал пару статей и ПРОЗРЕЛ!
И для крупных игор с открытым миром и обилием контента.
Вот здесь уже рассказывается о ECS и других фичах от юнити разработчика
https://youtu.be/GFb84n9gz94?t=4h31m37s
Он так говорит, будто ИСИЕС это будущее разработки, всё будет на ИСИЕС. Ага, конечно.
> смириться с тем, что многое недоступно
> ради выигрыша в 0,05 микросекунд
Ололо! ЕЦСблядей ебут уже в открытую.
Они, кстати, рассказали, что это пока низкоуровневая реализация. Потом они будут пилить высокоуровневую, которая будет такой же удобной, как обычные монобехавиоры.
ЕУЧ сосёт с его отсталой архитектурой из 90х. А больше движков и нет.
>Он так говорит, будто ИСИЕС это будущее разработки, всё будет на ИСИЕС. Ага, конечно.
Это уже настоящее для всех крупных контор, которые прошли путь от ООП головного мозга и XRay-engine середины 2000х подобных движков, вдоволь наелись говна с ООП и консолями прошлого поколения, поняли что без Data-oriented design в AAA никуда и прикрутили его к ECS. Уже скоро как 10 лет основная архитектура всех современных крутых игорь с графеном - ECS.
Для манявкатывальщиков-оопдебилов из галер это, безусловно, будущее.
Поэтому у них в лучшем случае пупки получаются, в которых на топ пекарне нужно на минималочках играть шоб нитармазило.
Крайенджин на ecs работает(которую год как знатно обновили). Даже первый сурс на нем был.
Переучиваться прийдется всем и походу это реально бужет стандатом. Но скорее всего это будет плавно и в течении минимум года(как когда делали переход только на шарп, убирая js и boo
Никогда этот ограниченный процедурный понос не будет стандартом. Его область применения - это оптимизация алгоритмов. Все.
Есть твои вскукареки, а есть слова разработчиков из юнити. Это станет новым стандартом. Ещё они встроят екс в их новую сеть.
>а есть слова разработчиков из юнити
Знатные пиздаболы. Их слова надо на 10 делить.
Будет очередная заброшенная технология. Лет через 5 анонсирует новый ECS опять, если к этому времени юнити не издохнет.
Юнитеки - ребята пиздатые и вообще ниразу не пиздоболы. Ричителла - неебаться управленец, и для роста акций продукт, что они реализуют обрастает фичами такого толка, что разрабы готовы переходить с других движков, видя удобство сейчас и на перспективу. А это привязывает кучу народа к другим сервисам экосистемы - унеты всякие и юнитиэдс. Почему, думаешь, скупают этих всяких самородков, которые делали топчик ассеты для стора и keijiro?
Так и про реактивное программирование говорили и про функциональный подход, и MVC, когда он появился(не про геймдев речь, а в целом)
Люди постигшие дзен геймдева понимают, что любую игру можно сдделать используя только передачу сообщений и behaviour tree
Как будто ты не знаешь, о чем я
не... зато можешь пробежаться по дочерним обьектам и заполнить ими массив с нужным тебе компонентом
Что ты делал прошлым летом? Где ты был год назад? Хотя, я бы и сейчас почитал толковых статей, чтобы колхозить поменьше.
Как?
>>30327
Это я знаю, долго и неудобно, когда я делаю какой-то эффект удобнее делать particleSystem дочерними элементами пустого объекта. И хотелось бы выделять их все при клике на пустой объект.
Делать вложенными сами партикл системc неудобно, если хочешь каждую по отдельности смотреть.
Я так понимаю что могу сделать кастомный инспектор с кнопкой и при клике добавлять нужные мне объекты в Selection. Но мне интересно могу ли я как-то перехватывать выделение нужного объекта и вместо него добавлять в Selection то, что мне нужно?
Прост я хочу чтобы эти два проекта использовали общие классы, а с dll пердолиться не хочу.
Добавил, и на уровне ms vs код видит классы из другого проекта. А юнька чет не хочет видеть. Она только из Plugins видит связи?
Это стандарт для ААА уже не первый и не второй год.
>вообще ниразу не пиздоболы.
Где их Server Library, чтобы делать сервера на UNET без необходимости запускать Юнити, которую обещали в районе 5.3? Нету. Они обещали расширять свою серверную библиотеку? Обещали. Где она? Нету, они кинули всех и пилят какую то новую пиздецому которую точно так же забросят. Потому пиздаболы.
Ах да, про баги в критических элементах вроде ломающихся через версию канвасы находящиеся внутри других канвасах (критично для производительного UI!) я вообще молчу. А ещё у них был фундаментальный баг когда запечённый и сохранённый в проекте свет на одной платформе пропадал при сборке на другой - они вообще ответили по багрепорту с минимальным примером где то через 4 месяца. Не просто пиздаболы, а пиздаболы-говноделы.
Не стоит - проектные файлы генерируются и вообще не должны идти в контроль версий.
Ты можешь рекурсией или просто по нужными тебе компонентам пробежаться файндом и экзекьют ин эдитормод заинстансить единожды нужный тебе префаб при указанном парэнте. Изи же
Кароч я поебался, теперь у меня 2 солюшена и 3 проекта: Юнити, Сервер на виндовс форм и Common который билдит длл с описанием общий классов. Все правильно делаю?
Ты такой удивишься когда откроешь что грузить уровни из xml быстрей чем обычной сценой.
Говнокоду юнитеков уже давно никто не удивляется.
Врядли ты читал мой пост. Я спрашивал можно ли как-то перехватить клик на объекте в эдиторе. Мне не нужно ничего инстантить.
Он у них отстаёт от последнего апдейта (или что-то вроде). Например, туплей нет, надо либо самому их делать, либо выкручиваться, если приспичило тупли использовать. Несущественные мелочи.
Бамп вопросу.
М?
C#
Второй поциент разве сейчас существует?
Я уже без тебя разобрался. Спасибо
Вот то, что я хотел. Может есть более оптимальный вариант реализации сего?
https://www.youtube.com/watch?v=E2AA-EgjbIw
Меня смущает вторая камера, потому что-то я клепаю своё ДЕТИЩЕ на андроид, и когда-то начитался от ахуевших гуру сеньёров юнити, что якобы использовать вторую камеру приравнивается к смертному греху и в приличном обществе за такое бьют в ебало. Вот я и комплексую по этому поводу. Хотя, конечно, я всё уже затестил и пока стабильные 60 фпс на телефоне.
Вторая камера вроде бы юзается для создания минимапов, т.е. показывается область сверху, на врага вешается префаб красный шарик, на игрока синий шарик, потом после хитрых манипуляций со слоями сцены, разрешаем второй камере рендерить только слои с шариками и общим лэйаутом уровня - чтобы сцена не рендерилась два раза целиком. А основной камере запрещаем рендерить слои с шариками и лэйаутом, как-то так.
Но как мне слать команды с клиента на сервер? В буквально текстовом виде как то не айс "отправь этот юнит туда то".
Завести класс Command или как принято?
>Но как мне слать команды с клиента на сервер? В буквально текстовом виде как то не айс "отправь этот юнит туда то".
Придумай протокол@пердоль.
Вот пример:
https://bitbucket.org/l2jserver/l2j_server/src/0ac4798f7ff255722115defef24b73e2d5522765/src/main/java/com/l2jserver/gameserver/network/clientpackets/?at=develop
Простите меня, ООП-братушки. Кажется я перехожу на темную сторону силы!
>Какой FPS ассет посоветуете?
ЕБЕТ ЭТО ЧТОЛИ??? СУКА БЛЯТЬ ВОТ ЗА ТАКИЕ ВОПРОСЫ У МЕНЯ УБИВАЮТ В ТРЕДЕ НАХУЙ!
Не бомби ты так, не у всех есть время копаться в сторе и вылавливать годные ассеты.
Ну то есть начало хода, получение карты, выбор карт.
Нет. Просто в картах удобнее сделать просто данные, чем городить поведения для каждого эффекта. По крайней мере мне так показалось.
Я бы сделал визуалку отдельно, логику - отдельно, сеть - отдельно.
Т.е. игрок делает ввод данных, возникает событие, все кому надо на него подписались и отрабатывают. Логика про существования визуалки даже не знает. C# события. Корутины разве что для анимации какой.
И именно поэтому визуалку никак в ХС не пропустить и не ускорить, хотя всем уже сколько лет хочется. Визуалке и логике нужно друг об дружке знать, все потуги разделить их есть ошибка - в конце концов ввод игрока зависит от визуалки, он не общается с логикой напрямую.
Буффер команд надо делать как в файтингах. И кверю с первый входит первый выходит.
Вызываешь начало хода одного игрока, апдейтятся статы через корутину, в которой вейт пока переменная конца анимаций не станет тру, в конце корутины вызывается корутина с самим ходом игрока, в которой вейтится нажатие конца хода. Когда нажимается, вызывается начало хода другого игрока.
ECS - это один из паттернов ООП, назывался композицией до того, как ньюфаги придумали ему новое модное базз-имя. Так что никуда ты не переходишь, братушка.
>ХС
Що се теке?
>>31340
>Вызываешь начало хода одного игрока, апдейтятся статы через корутину
Чет звучит плохо. Это ты УСЫ изобразил?
>>31340
>Визуалке и логике нужно друг об дружке знать
Ниет. Визуалку геймдизайнер сломает, логика вообще на удаленные сервера в гонконг уедет. Для годного дизайна - надо разделять. Попытки оптимизировать перформанс таким образом - смешны. особенно когда игры нет. И внутри логики и визуалки надо все разделять.
То бишь так сделать:
Логика эффекта карт, которая лежит в буффере и которая связана с визуалкой, чтобы не ебаться с ускорением/пропуском ходов и т.п.
Логика добавления эффекта карты в буффер
>>31345
>логика вообще на удаленные сервера в гонконг уедет
Нахуя? Клиент сам со всем справится. Это, блядь, карточная игра, там нехуй считать. Пересылать только действия другого игрока.
>оптимизировать перформанс
Это не оптимизация, дорогой, это такая архитектура, чтобы волосы на голове потом не рвать, когда придётся баги решать.
>такая архитектура
Называется вермишель. Захочешь потом другую игру делать - готовый код из вермишели не выдрать, будешь всю хуйню сначала писать. Зато писать быстро научишься, тоже норм.
>Захочешь потом другую игру делать - готовый код из вермишели не выдрать, будешь всю хуйню сначала писать.
Чивоплять.
Что проще распутывать - раздельные логику и графон, т.е. по сути две цепочки действий, которые обрабатываются параллельно, или же единственную связанную цепочку действий, где логика нового действия не начинается, пока не кончится графон старого действия?
Какая ещё вермишель из одной цепочки, когда альтернатива - две цепочки, которые никак не взаимодействуют и друг друга не знают, из-за чего сотни графических багов и невозможность сделать ход, если враг забафферил слишком дохуя графония?
>Захочешь потом другую игру делать - готовый код из вермишели не выдрать, будешь всю хуйню сначала писать.
Что значит "не выдрать" вообще? У меня такая цепочка вместо разделения логики и графона. Ты думаешь я что, для каждой абилки программно графон и логику прописываю? Нихуя вообще, у меня поддержка моддерства, всё в скриптах во внешних файлах прописано. Очевидно, что это НЕ вермишель, если возможно в такую систему вписать новую абилку с новым скриптом и новым графонием просто из текстовика.
Было бы круто, если бы я играл в карточные игры и знал, о чем говорю.
Вот есть ход. Ход это игрока, или ход ИИ, или ход игрока-за-сеткой: без разницы - делаем Ходильщика, унаследованного от Unit(точнее, нужен public ActionReceiver getActionReceiver, но с ним писанины кратно больше). Список ходильщиков держим в PartyController и итерируем, пока у одного из ходильщиков не случился .isPartyWinner.
У ходильщика случился ход. Он может: кинуть карту на лоток, нажать спец. действие (-3 всем роботам противника), нажать конец хода сделать что-нибудь. Из синглтона partyController вызываем у tekuwiyHodilwik.nextAction(this) (если вернулся false - делаем this.endTurn()).
Внутри .nextAction решили, что нужно кастануть "Уебать всех роботов врага" - дергаем myPartyController.castSpell(actions).
Каждый Action должен уметь понимать кого можно трогать (FilterRule_ByRase : FilterRule ... public List<FilterRule> canTouch) и кого трогать не стоит (FilterRule_ByOwner : FilterRule ... public List<FilterRule> refuseTouch). Массив юнитов не держим. Держим массив плейсхолдеров: Placeholder_CardOnDesk, Placeholder_CardInPacket, Placeholder_Hodilshik, ... Бегаем по плейсхолдерам. Placeholder вернул true из .canReceiveAction(action): итерируемя по Unit'ам из .getUnitsForAction(action). Например, нам вернули магический-щит-над-орком и самого орка (оба унаследованы от Unit, а точнее имеют getActionReceiver). units[0].runAction(action) сделает action.damagePoints-=10, а units[1].runAction(action) вернет false. И тут пора бы еще раз дернуть .nextAction, но...
Но у нас есть анимашки. Точнее, для игры они нужны, а для каких-нибудь юнит-тестов и просчета баланса визуальная часть не нужна. У ActionReceiver создаем public Visualizer visualizer и public GameObject visualizerAnimationLivesHere. Собственно, если visualizer у нас не null'овый - инстанцируем некий префаб с некими анимашками и сохраняем его в visualizerAnimationLivesHere. Запускаем все итерации как сразу по получению команды, так и по Update - покуда кто-то (из ActionReceiver'ов) имеет visualizerAnimationLivesHere!=null делаем return, если null у всех - считаем действие выполненным.
Идем на следующий .nextAction. Решили выкинуть карту. Тоже экнш, применяется к первому-не-пустому Placeholder_CardOnDesk, но с проверкой на .blockAction(action) (и там тоже нужен ActionReceiver+Visualizer, который покажет: "Нельзя использовать пиратов и английскую королеву одновременно"). Положили карту на стол со всеми теми же visualizerAnimationLivesHere.
.nextAction вернул-таки false. Делаем конец хода. По-одному берем каждый плейсхолдер из Placeholder_CardOnDesk, Placeholder_Hodilshik, дергаем у него .getEnemySlotForAttack (если занятого вражьего Placeholder_CardOnDesk нету, то возвращаем вражий Placeholder_Hodilshik; да, конечно, тут логика потяжелее, но я уже заебался печатать), берем .getUnit (если кудаАтаковать и когоМогуАтаковать связаны - ну блядь делаем общий метод, усложняем логику), делаем ourDearUnit.atack(toSlot, toUnit) (Action+ActionReceiver?+ActionVisualizer+Update).
Когда все атаки проитерированы - переключаем ходильщика.
Было бы круто, если бы я играл в карточные игры и знал, о чем говорю.
Вот есть ход. Ход это игрока, или ход ИИ, или ход игрока-за-сеткой: без разницы - делаем Ходильщика, унаследованного от Unit(точнее, нужен public ActionReceiver getActionReceiver, но с ним писанины кратно больше). Список ходильщиков держим в PartyController и итерируем, пока у одного из ходильщиков не случился .isPartyWinner.
У ходильщика случился ход. Он может: кинуть карту на лоток, нажать спец. действие (-3 всем роботам противника), нажать конец хода сделать что-нибудь. Из синглтона partyController вызываем у tekuwiyHodilwik.nextAction(this) (если вернулся false - делаем this.endTurn()).
Внутри .nextAction решили, что нужно кастануть "Уебать всех роботов врага" - дергаем myPartyController.castSpell(actions).
Каждый Action должен уметь понимать кого можно трогать (FilterRule_ByRase : FilterRule ... public List<FilterRule> canTouch) и кого трогать не стоит (FilterRule_ByOwner : FilterRule ... public List<FilterRule> refuseTouch). Массив юнитов не держим. Держим массив плейсхолдеров: Placeholder_CardOnDesk, Placeholder_CardInPacket, Placeholder_Hodilshik, ... Бегаем по плейсхолдерам. Placeholder вернул true из .canReceiveAction(action): итерируемя по Unit'ам из .getUnitsForAction(action). Например, нам вернули магический-щит-над-орком и самого орка (оба унаследованы от Unit, а точнее имеют getActionReceiver). units[0].runAction(action) сделает action.damagePoints-=10, а units[1].runAction(action) вернет false. И тут пора бы еще раз дернуть .nextAction, но...
Но у нас есть анимашки. Точнее, для игры они нужны, а для каких-нибудь юнит-тестов и просчета баланса визуальная часть не нужна. У ActionReceiver создаем public Visualizer visualizer и public GameObject visualizerAnimationLivesHere. Собственно, если visualizer у нас не null'овый - инстанцируем некий префаб с некими анимашками и сохраняем его в visualizerAnimationLivesHere. Запускаем все итерации как сразу по получению команды, так и по Update - покуда кто-то (из ActionReceiver'ов) имеет visualizerAnimationLivesHere!=null делаем return, если null у всех - считаем действие выполненным.
Идем на следующий .nextAction. Решили выкинуть карту. Тоже экнш, применяется к первому-не-пустому Placeholder_CardOnDesk, но с проверкой на .blockAction(action) (и там тоже нужен ActionReceiver+Visualizer, который покажет: "Нельзя использовать пиратов и английскую королеву одновременно"). Положили карту на стол со всеми теми же visualizerAnimationLivesHere.
.nextAction вернул-таки false. Делаем конец хода. По-одному берем каждый плейсхолдер из Placeholder_CardOnDesk, Placeholder_Hodilshik, дергаем у него .getEnemySlotForAttack (если занятого вражьего Placeholder_CardOnDesk нету, то возвращаем вражий Placeholder_Hodilshik; да, конечно, тут логика потяжелее, но я уже заебался печатать), берем .getUnit (если кудаАтаковать и когоМогуАтаковать связаны - ну блядь делаем общий метод, усложняем логику), делаем ourDearUnit.atack(toSlot, toUnit) (Action+ActionReceiver?+ActionVisualizer+Update).
Когда все атаки проитерированы - переключаем ходильщика.
Чтобы не было недопонимания. От MonoBehavior в таком раскладе вообще никто не унаследован. Как нарисовать карту-на-столе:
1. делаем у плейсхолдера список-карт-на-столе опциональный visualizer (разумеется, не ActionVisualier) который знает куда карты рисовать (задано мышкой в юнити) и знает какие карты рисовать из-за дабл-каплинга с плейсхолдером (да, блядь, прямо вот оба о друге знают, три программиста погибли, пассажиры в шоке).
2. делаем у карты опциональный visualizer (опять же, не ActionVisualier и не CardsListOnDeskVisualizer), который нашу карту рисует. кол-во здоровья, кол-во урона, все иконки рисуем отдельными компонентами, которые знают о юните.
Есть код: https://pastebin.com/YAhFsa1B
insectPrefabsArray - 3 элемента, последние 2 пустые, первый префаб.
Если запустить все как есть, то все работает как ожидается:
Спавнится объект раз в 3 секунды.
Но если раскомментировать строчку 31 и закомментировать 32ю то начинается какая то хуйня, тогда у меня в первые 3 секунды спавнится 1 объект, во вторые 3 секунды спавнится 2 объекта, в третьи 3 секунды спавнится 5 и так по нарастающей. Из-за чего такое происходит?
По задумке должен раз в 3 секунды создаваться объект с шансом 1/3.
.isTimeToSpawn ставится в false только если свезет с 1f/3f - цепочка Update > SpawnInsect > StartCoroutine отрабатывает чаще.
Можешь SpawnCooldown выпилить и сделать
void Update() {
spawnEachSecondsTail -= Time.deltaTime;
if (spawnEachSecondsTail<0f) {
spawnEachSecondsTail = spawnEachSecond;
SpawnInsect(); // в котором нет вызова SpawnCooldown - 1f/3f будет без сайд-эффектов
}
}
>И именно поэтому визуалку никак в ХС не пропустить и не ускорить, хотя всем уже сколько лет хочется.
Не понял как разделение логики и визуала связано с невозможность пропустить анимации? По сути это получается что-то вроде MVC паттерна. Ввод игрока, анимации и их пропуск это тогда ответственность слоя представления. А логика просто рассылает SendMessage и обновляет состояние модели, которое триггерит сообщения, которые обрабатываются в визуальном слое.
Все анимации просто добавляются, например, в буфер анимаций и проигрываются по очереди, и могут быть легко пропущены, т.к. модель данных уже давно изменена.
Это скорее если все связано, то нужно ждать конца анимации, чтобы обновилось игровое состояние.
>Буффер команд надо делать как в файтингах.
Да, как то я не подумал про такое. Я сначала хотел все на одних сообщениях сделать. Но тут лучше сделать 2 абстракции: игровые эвенты и буфер команд. Тогда игровые эвенты генерирует команды и добавляют их в буфер, где они выполняются по очереди.
>По задумке должен раз в 3 секунды создаваться объект с шансом 1/3.
Нипонил. Раз в три секунды создаётся по одному ненулевому объекту в массиве (каждый с шансом 1/3) так, что раз в три секунды может создаться случайное количество объектов в диапазоне от нуля до количества ненулевых объектов в массиве?
Апдейт каждый фрейм, а isSpawnЧто-тоТам буля поглощается лишь в 1/3 случаев, тогда как корутина, эту булю создающая, случается всегда. Вот и получаешь примерно так:
первый фрейм выпадает 3 из 3, запускается кулдаун
второй фрейм 2 из 3, запускается кулдаун
третий фрейм 1 из 3, сжирается буля и создаётся инсект, запускается кулдаун
Через время кулдауна первого фрейма буля становится тру, снова происходит то, что выше
В следующий фрейм снова случается то же самое
И третий фрейм снова, итого 5 раз выходит, что тебе в дебаглог кулдауна запись внесёт
Хм, такая проблема. Допустим, игрок нажимает кнопку конца хода. Отправляется сообщение. Одна система проверяет карты и находит карту с эффектом конца хода и добавляет в буфер команд. Последняя система добавляет команду окончания хода.
Тогда в буфере такие команды:
1. Выполнить эффект
2. Конец хода.
Но возможно такое, что во время выполнения эффекта будут созданы новые сообщения и новые команды (например, это эффект убей существо, будет убито существо с эффектом при смерти), и тогда они будут добавлены в буфер после конца хода.
Нужно организовать игровой цикл через ECS. Тогда архитектура будет простой и понятной.
https://habr.com/company/pixonic/blog/413729/
Надо сделать буфер команд не очередью, а стеком. Тогда команда конца хода добавляется первой, а все последующие команды выполняются в порядке с последней добавленной по первую.
Нет ли тут каких-то подводных камней?
>Нужно организовать игровой цикл через ECS
Не понимаю. Как ты это себе представляешь?
У меня тут событийная архитектура. Это отлично подходит для карточных игр. Системы это просто подписчики на события, которые выполняются в заданной последовательности.
Я их называю системами, потому что они делают принципиально то же самое: фильтруют сущности (карты) по каким-то данным и выполняют код в зависимости от данных.
if(Random.value < 0.3f) { Spawn(); }
Делаю буфер в виде листа из контейнеров, в каждом из них в конце контейнер удаляется из листа и вызывается NextAction(), в самом NextAction() висит проверка, сколько элементов в листе осталось, если 0, то конец хода, иначе берётся следующий контейнер из листа
Давно слышал, что у них был html в планах. Они даже левый js+css+html движок на c# выкопали в какой-то помойке. Но забили, уж не знаю к счастью или нет.
В 2019 бете появится скорее всего.
Почему ты так баттхёртишь от энтитей? Батька в детстве выебал, годотюшек?
ECS для карточной игры? Ебануться... скоро для сапера многопоточность пилить начнут.
мимо быдло геймдевер
Сапер на CUDA! Наконец-то ваша любимая игра рендерится 257 000 раз в секунду. Если Вы оставите куда-сапера включенным на сутки, по он отрендерится больше раз, чем обычный сапер смог бы отрендериться за всю Вашу жизнь!
Вы пробовали выключить и включить? Кеш ошибок - штука забористая. Когда юнька рисует белый экран и бастует - ребутай комп, как в 95м. Это правда.
Я не вижу на твоих скринах "pobeda1 = ... ;" при этом юнька говорит тебе, что в переменной pobeda1 ничего нет. Ты что нас за идиотов тут держишь?
А ни что другое (в рантайме) не удаляет Win (или родителя)? И не зануляет pobeda1?
ребутй-комп-кун
Хз что ты называешь глубоким деревом, но вероятно твоя проблема в избыточной связности
И как с этим бороться? Особенно если это мобильная игра фактически из одного интерфейса и состоящая.
Проблема в том, что постоянно доступных кнопок много, на каждую нужно вешать закрытие всех любых уже открытых окон, на все окна нужно ставить булианы для запоминания их состояния, значения прогресса, это все в такую кашу превращается в которой я начинаю путаться.
>что постоянно доступных кнопок много, на каждую нужно вешать закрытие всех любых уже открытых окон
Можно через события сделать. райзишь события - все кому надо его обрабатывают и закрываются.
А вообще по апрхитектуру почитай, тут например https://habr.com/post/276593/
Вектор исследования понятен, попытаемся вникнут практически.
> райзишь события - все кому надо его обрабатывают и закрываются.
А вот тут можно поподробнее?
Ты не вызываешь гуишные методы напрямую, вместо этого у тебя есть событие "Конец уровня", например. На это событие уже подписаны окна и они сами решают что им делать с этим событием.
Ну не, все не настолько плохо. Я сейчас балуюсь с векторной физикой. Но из практического опыта только платформер на Моногейме. Видел пример сеточного поля, но там чел использовал circle collider для определения дальности атаки и я засомневался в этом подходе.
Тайлмапы в помощь.
>Кастомный чтец текстовых файлов лучше
Победитель гонки Тур-де-Франс
https://www.youtube.com/watch?v=HaBP7eXdZUg
Написал небольшой скрипт (https://pastebin.com/3fXQbF2c), но результата нет.
Объяви публичный массив геймобджектов в классе.
NullReferenceException
UnityEngine.Component.GetComponents[GraphicElement] () (at C:/buildslave/unity/build/artifacts/generated/common/runtime/ComponentBindings.gen.cs:185)
Ну тут два варианта, либо Юнити у тебя косячный (спасибо разрабам), либо ты вкатился в геймдев на пахуе не изучав программирование и не замечаешь почему у тебя выдает null.
xml конечно-же
Как вариант, что ни одного такого компонента не нашлось - "вместо" пустой коллекции вернулся null. Рандомно потому что компонент на одном элементе находит компоненты, а на другом элементе - не находит. Как будет (создай пустую сцену и повесь свой компонент на камеру) вести GetComponents когда нет компонентов?
Запускаю машину через animator.Play("Opening");
Не выводи на Exit, зацикли на Idle
Спасибо. Добавил стейт с отрицательной скоростью но обратная анимация отображается визуально, а это не нужно.. Надо как то лучше вернуть анимированные значения в дефолт..
Могу, конечно сделать это в скрипте но это жи тупо.. Могу еще запилить другую анимацию которая будет возвращать альфу выключив элемент через енаблядь но это тожи тупо..
https://twitter.com/i/status/1047640140540260359
У тебя же простая последовательность. Зачем тогда юзать стейтмашин, если есть таймлайн. Там же практически любые юнитевские компоненты и паблики монобехов менять можно, пользуясь визуалочкой
C ануса дергай
Я себя уже уверил, что дело в эдиторе, но вдруг я ошибаюсь в причине. Знает кто-нибудь что за дела такие?
Начнем с того что мы не знаем под какую кофеварку ты билдешь. На разных платформах разные интерпретаторы. По хорошему надо на каждой конкретной платформе тестить а не гадать на пораше.
А так стандалон билд быстрее в несколько раз, на моих задачах.
Благодарю.
1280x720, 0:15
Ой, да кто заметит? Я вот в твоём видео еле-еле разглядел.
Нагуглил что там нужно в шейдер Cull Off вписать, но куда именно, шейдер ведь на 2к строк? Legacy Shaders/Transparent/Diffuse - вот этот меня интересует.
В начале, лел. Погугли любой шейдер
Например:
if (Нажатие пкм по кнопке, свет выключен)
свет включен
Даю голодающему удочку: if (true) => if (true == true) => if (!false == true) => if (true && false == !true) => if (!false || true == true), и так далее. Дальше сам.
using System.Collections.Generic;
using UnityEngine;
public class FaceCamera : MonoBehaviour {
Vector3 cameraDirection;
void Update()
{
cameraDirection = Camera.main.transform.forward;
cameraDirection.y = 0;
transform.rotation = Quaternion.LookRotation(cameraDirection);
}
}
Что я делаю не так почему не работает?
Сам решил проблему.
>Object reference not set to an instance of object
>FaceCamera.cs:10
>Что я делаю не так почему не работает?
теперь у главной камеры надо ставить тег MainCamera
Под юнити же на С# пишут?
if (ПКМ && Свет выключен)
{
Свет включен
}
else
{
Свет выключен
}
Это же блять даже не основы программирования, это блять 5-тилетка через три минуты изучения любого языка узнает, куда ты лезешь не зная этого, оно тебя сожрёт.
Проиграл в голосину чёт.
Вешай свой скрипт на кубик и используй gameObject.getComponent
Самое интересное, что это в школе проходят. Не помнишь, как "жи" и "ши" пишется, или сколько будет 4х8?
Бля ты че серьезно такие вопросы задавать? Вот ты вообще нихуя решил не делать, даже капельку программирование не поизучать, даже в туторах по юнити всяких такая лабуда встречается, и вот ты еблан тут решился это спросить?
Пиздец уебки разленились, еще и игори делать хотят.
Разобрался, проблема была в необнуленных ивентах.
А что в этом вашем юнити нельзя поставить текущую сцену на паузу и показать сцену с меню оверлейно? Правда штоле? Ахазхаха! Ебать движок тысячелетия!
Пока что я вижу только так как не угодно.
> С чего быстрее дергать значения, из массива?
Да.
> А почему?
Потому что данные в памяти лежат подряд и в кеш сразу по несколько элементов читаются процессором. Если конечно эти элементы - не жирные экземпляры классов на стопицот пропертей каждый.
> Массив это класс?
Массив это экземпляр System.Array. Устроен вот так (пикрелейтед).
> Значит кажыдй раз как минимум надо заглянуть в кучу?
"стек" и "куча" - суть абстракции области видимости и времени жизни языка.
В реалиях железа имеет смысл говорить сугубо о cache friendliness тех или иных структур данных.
Аноны, не обосрался ли я с реализацией? Нужно реализовать разные типы профессии со способностями, которые характеризуют данную профессию. То есть если ты слесарь, то способностью будет уметь "крафтить" и т.п.
Самая профессия реализованная через скриптовый объект. Он принимает в себя название, описание и само состояние способности, пока этого хватит.
Тип, состояние спобности реализовано через enum. К примеру: врачевать, крафтить и т.п.
А вот уже о способности, описание, склонение, прочий текст, enum профессии и т.п. реализовано тоже через sctiptable object.
Еба событие
Тоже скриптовый объект. В нём хранится описание, enum способности, последствия.
Как работает:
Если происходит событие в котором нужно врачевание, в событии написано какое состояние, enum способность нужна, его ищем через enum в пуле всех скриптовых объектов способностей и печатаем текст с названием способности и том, что произошла еба и нужен врач и его умение врачевать.
Если данный человек есть, смотрим на его scriptable object, в нем мы смотреть на его профессию и получаем состояние способности.
Лично мне не нравится хранить столько скриптовых объектов, но как сделать иначе, заранее заготовленные объекты по-другому не приходит в голову. Кроме как отдельного массива класса, но просто будет не удобно работать.
Можно же слить в одно и скилы и профессию, то есть в описании скила написать профессию, но мне нужно отдельно объект скил и отдельно объект профессии.
Надеюсь понятно объяснил, рад любой критике, как этого монстра можно уменьшить и оптимизировать.
Можно рассмотреть вариант, при котором у человечков есть навыки в скиллах и они не связаны с профессией напрямую. Т.е. был npc врачом, а потом стал лесорубом - лечить он не разучился. Профессия npm служит для выбора задачи. Тогда у каждого человечка есть массив скиллов, у профессии (а то и у текущей задачи) есть массив как-скиллы-прокачиваются. Для каких-то задач может потребоваться массив минимальный-размер-скиллов.
Скилл перестает быть объектом первого уровня, становится абстрактной субстанцией на страничке в вики. Названия скиллам для работы не нужны - переходят на уровень локализации. Профессии я бы хранил в DontDestroyOnExit синглтоном из префаба (может быть, скриптаблы более правильное решение, я их не люблю).
Скиллы и характеристики отличаются только ростом из-за выполненных задач (т.е. это параметры). Т.е. у размера сисек и дальнозоркости в массиве буста будут стоять нолики. Или не нолики, если мы говорим о действии "медицинская операция" (задача это приказ-к-действию, профессия лишь добавляет возможные действия).
Компоненты массив-буста-параметров, массив-требований-к-параметров, массив-текущих-значений-параметров должны или наследоваться от компонента МассивПараметров, или иметь ссылку на лежащий рядом МассивПараметров. Очень рекомендую залепить в МассивПараметров кастомную рисовалку для инспектора.
>Аноны, не обосрался ли я с реализацией?
>Тип, состояние спобности реализовано через enum.
Обосрался
А в чем собственно проблема с количеством скриптабл обжектов? Или ты собрался делать тысячу профессий?
Да это круто. Но у меня не будет такой большой и растущей системы с переходами способностей, прокачкой
Просто будет человек. Ему случайно присваивается профессия, которая уже заранее ссылается на enum или название, скилла.
Мне нужно отдельно объект профессии и скиллов. Чтобы можно было ссылаться на профессию и скилы. А не через профессию на скилл.
Хотя как раз можно вытаскивать из профессии скилл и выдать сразу человеку.
Спасибо, есть над чем подумать.
С началом мы создаём скриптобжекты профессий их в dictonary ключём будет название профы. Потом скриптобжекты скиллов их тоже в dictonary с ключем их enum.
Трабл в том что, а можно ли запихивать в dictonary заранее или только при старте проекта.
И сколько будет весить эта еба, да ещё и в dictonary.
Словари не сериализуются в унити, но можешь на гитхабе поискать Serializable Dictionary. Или на старом юнити вики, не помню уже.
Как и ожидал. Просто не хочется нагружать проекта, сторонними инструментами, но если что воспользуюсь в крайнем случае. Спасибо
Что за поделки детей? Я правильно понимаю что юнити нужен чтобы создавать низкопробное мультяшное говно с пучеглазыми ебальниками, на большее он не годится?
Исследование реакции на толстые набросы?
Нам очень жаль, а теперь иди нахуй отсюда.
Пояснять, как оно работает, хз, надо ли. В общем, на панели есть дочерний объект - кнопка, при нажатии на которую срабатывает функция HideUI() из скрипта. В чём проблема: вот нажал я на один объект, появилась панель с текстом там, и кнопкой. Но при этом остальные объекты остаются активными, то есть я могу нажать на корпус, и появится вторая панель под первой. Есть идеи, как решить? Только не стукайте больно, пожалуйста
Я так понял, что тебе оверлей. Собсно, сделай UI>Panel во весь экран, внутрь него суй текст и что там еще надо. По клике по панеле удаляй панель.
> сделай UI>Panel во весь экран, внутрь него суй текст и что там еще надо.
> По клике по панеле удаляй панель.
true unity way
Хм, поможешь с кодом? У меня там есть уже в скрипте OnMouseDown, как повесить его на выбранный UIObject?
В этом способе только один минус, я считаю - энивей ты будешь нажимать на объект, панель старого объекта скроется, но нового всё равно появится.
Нихуя не работает, эх, жоль, так было бы намного легче :с
Суть в том, что "есть уже" отрабатывать не будет. Хотя, у меня мышка только в меню (т.е. я с мышкой не работал) - могут быть дополнительные сюрпризы.
Нужна версия поновее, может есть у кого купленная?
Так мб новый скрипт написать и сделать так, чтобы он передавал значение другой переменной в функцию HideUI()?
UI - это всегда синглтон. Не верь ебланам, услышавшим слово "антипаттерн".
Твой UI всегда должен быть загружен в память и всегда готов мгновенно выскочить на экран при активации.
Поэтому.
1. Делаешь отдельный объект UI. Загружаешь его при старте игры и выгружаешь в конце игры. Или вообще оставляешь выгрузку сборщику мусора.
2. У этого объекта должны быть методы, наподобие: showMainManu, showInventory, showCharacterMenu, showLOOTMenu и т.п. (Либо один метод showUIItem(ItemKind) с аргументом, представляющим элемент интерфейса, который надо отобразить).
3. Все твои игровые объекты при надобности вызывают соответствующие методы синглтона UI.
4. Каждый метод, будучи вызван должен проверить, не выведено ли на экран то, что он должен вывести? И если уже выведено - прекратить свое выполнение.
З.Ы. Можно то же самое сделать через модные у школоты сообщения. В этом случае, игровым объектам будет неважно, существует UI или нет - они просто будут сообщать "на меня нажали, покажи панельку с лутом", не проверяя, будет ли это сообщение услышано. Плюсы этого метода - не надо помнить об синглтонах и знать их, достаточно придерживаться установленных в команде разработчиков соглашений о именовании сообщений. Минусы - сложная отладка: в случае хуйни, вариант с ООП будет вызывать исключения при компиляции, с указанием строки с ошибкой. Вариант же с сообщениями будет компилироваться нормально, но в игре будет либо ничего не происходить, либо происходить не так, как тебе надо. Поэтому придется дополнительно реализовывать систему логгинга, которая бы тебе показывала, в каком месте ошибка.
Яскозал?
Если доведут до ума то будет конфетка, встроенный многопоточный Entitas. Но не доведут, потому что в презентациях уже приелось, надо новую модную штуку придумывать для продажи хипстерам.
Слишком много новых для меня слов, но я так понял, что есть другие методы, помимо "показать UI-панель". А теперь покажи мне, как это сделать на практике, да так, чтобы устранилась моя проблема.
Нахуя?! Объясните, нахуя они взяли mono и C#? Почему не javascript, например? Простота, крохотный runtime, легкость портирования на любую платформу, возможность hot reload'а и многие другие плюшки скриптового языка.
Нет, возьмем компилируемый кусок говна от ms. Изменил строчку? Жди десять секунд! Создал скрипт? Жди 20 секунд! Делаешь билд для webgl? Жди вообще час, сука!
>Почему не javascript
<--
>Изменил строчку? Жди десять секунд! Создал скрипт? Жди 20 секунд! Делаешь билд для webgl? Жди вообще час, сука!
Мне кажется ты слегка ПРЕУВЕЛИЧИВАЕШЬ
Допустим ты редактируешь код раз в 3 минуты. За день ты тратишь 6 часов на написание игры.
Тогда 20 минут ты тупо тратишь на ожидание компиляции! 20 минут! Задумайся! За неделю это уже 2.5 часа. за месяц 10 часов!
>>Почему не javascript
><--
Тащемта javascript это самый лучший ООП-язык. Последние стандарты по функциям уже догнали С#.
Я не понимаю зачем для СКРИПТИНГА нужно использовать компилируемый .net. А ты понимаешь?
А с чего ты взял что у тебя скриптинг? Скриптинг происходит в терминах предметной области конкретной игры. В Юнити у тебя нихуя нет, кроме коллайдеров и мешей.
В том-то и дело, что в юнити нет скриптинга, а есть только системное программирование. Компоненты создаются с расчетом на повторное использование. Создавать маленькие скрипты чтобы сделать какое-то простое поведение для конкретного объекта, или просто хранить данные для data-oriented кода просто неудобно.
Замечательно работает до тех пор пока ты держишь реальный код за пределами юнитевских объектов.
>Для типизации.
Не нужно. Нормальные ребята все равно используют сообщения. А там типы не нужны.
>Замечательно работает
>Создал файл. 10 секунд компиляции
>Переместил файл в другую папку. Еще 10 секунд компиляции
>Удалил скрипт. Жди компиляцию
Я хочу код писать , а не конпелировать
Предложение скрывать панель при нажатии по ней? Так я один чёрт на неё нажму, а другая панель другого геймобжекта высветится. Это не совсем корректное решение проблемы.
Бери юич и программируй мышкой, какие вопросы. Там и графон лучше!
Ну бля, ну позязя :з
Бери УЕ, там блюпринты компелируются мгновенно. Так же непонято что у тебя такое по 10 секунд компелируется - у тебя явно меньше хотя бы пары мегабайт кода.
Другой скрипт "КликПоПанелеУдаляетПанель" точно нужно писать. Никуда никакие переменные он передавать не должен - не усложняй. У тебя есть экран игры - он не меняется. Есть всплывающая панель на весь экран, которая блокирует экран игры (визуально может быть полностью прозрачной) - она тоже сама по себе.
Я другой анон, но абсолютно согласен с предыдущим. Там не факт, что именно компилинг по 10 секунд тянется. Сохранил скрипт, переключился в юньку: пару секунд ждем, фриз, пару секунд ждем, фриз, пару секунд ждем, фриз - и мы почти уверены, что код обновился. Если изменить текст в комменте - юнька тоже будет "компилить" (хотя даже по AST'у понятно, что ничерта не поменялось). И, да, часто процедура обновления растягивается куда дольше, чем на 10 секунд. HCR в юньке есть, но связан с теми же тормозами + любит юньку крашить.
Жалко, что не для модульности.
Тебе сказали сделать одну панель.
На канвас добавить скрипт MoyInterfeis и в нем сделай
public GameObject MoyaPanel;
void PokazatPanel() {
MoyaPanel.SetActive(true);
}
Будут ли отличия от создания прайвет переменной и свойства на основе её?
Если точнее, я сказал сделать так:
public GameObject MoyaPanel;
void PokazatPanel(string ChtoNapisat; List<Knopki> KakieKnopkiOtobrazit = [OK, Cancel])
{
if (!Active)
{SetActive(true);}
SetText(ChtoNapisat);
SetButtons(KakieKnopkiOtobrazit);
}
Я правильно понимаю, что для каждого особого действия, каждой катсцены, каждого изменения в мире мне нужно писать новый скрипт? Их же тогда сотни будут!
Или я не догоняю? Там есть инструмент наверняка для катсцен, для всяких действий особых. Но их же надо запустить, а это скрипт. Или как это работает?
Не сотни, а тысячи.
В моей игре сейчас 397 скриптов. не считая create-step-draw ивентов у объектов, которых уже 320
Но на самом деле всё просто. Уже после описания трёх-четырёх катсцен у тебя в голове сложится шаблон, и ты уже не будешь напрягаться, создавая следующую. Будет только "кастцена фаза 1, ждёт пятый кадр анимации, фаза ++" "катсцена фаза2, спрайт меняем на такой-то, х+=2.5. Если х == 50 фаза ++" и т.д.
1. Декомпозируй. Сделай компонент Action (с полем List<GameObject> doWith и public virtual void doAction(){}), унаследуй от него ActionActivate (public override void doAction(){ foreach (var v in doWith) {v.setActive(true);} }), ActionDeactivate, ActionDestroy. Сделай Timer, который умеет дергать Action через заданный промежуток времени (про зацикливание сразу подумай). Сделай CustomCollider, который дергает экнш, когда происходит OnTriggerEnter с объектом, который прошел фильтр isGoodObjectForMe, от него унаследую PlayerFinder, AnyEnemyFinder, FlyingEnemyFinder. 2/3 логики уже покрыты. Таких скриптов тоже будет много, но они композируются в +/- любую логику. Можешь включать объекты, только когда игрок внутри коллайдера (ты же в курсе про слои, да?), можешь включать объекты если другие выключены, можешь делать все что угодно - но атомарными блоками, которые легко запомнить.
2. Для кат-сцен используй аниматоры. Скрипты только там, где логика заранее не просчитывается. Если у тебя есть скрипты в кат-сценах, то ты что-то очень общее пропустил, или я чего-то не учитываю (например, аниматоров внутри аниматоров).
3. Выведи DamageReceiver из Enemy, сделай BulletCollider, ExplosionCollider. Чем меньше монолита - тем лучше.
>их же надо запустить
Вообще, анимашки сами запускаются. Для кат-сцен делай отдельные сцены, аниматор вешай прямо на рутовый объект. Только учти, что анимации (не таймлайн) смотрят на иерархию по пути... Попробуй сделать пустой объект с аниматором, в нем проанимируй два куба, потом засунь один куб внутрь второго - анимашка развалится. Это учитывай.
Варианты.
1. Активация вложенного аниматора с помощью таймлайна. Включаешь объект с помощью таймлайна. В объекте таймер установленный на 0 секунд (или просто MakeActionOnStart), который дергает ActionSetTrigger - все. реакцию на SetTrigger настраиваешь в окошке Animator.
2. Нет возможности сделать кат-сцену отдельной сценой. Т.е. тебе нужно, чтобы когда игрок оказывался рядом с флагом - он его поднимал и махал, потом шел назад. Описываю самый геморный вариант, на практике можешь проще сделать. С помощью PlayerFinder ты можешь определить, что игрок рядом с флагом. Заодно и запомнишь игрока. Блочишь управление, чтобы игрок встал в Idle (событие аниматора "Я идлюсь" (100) перехватывает OnAnimationEvent(int animId) и дергает следующий экшн). Выключаешь игрока с помощью ActionDeactivate (тут вру, поясню дальше), с помощью ActionClone создаешь визуальный клон игрока (клон запоминаешь) на позиции игрока. Запускаешь анимашку на клоне, ждешь от анимахи события "Я схватил флаг" (200) (тут аккуратнее, т.к. юнька умеет пропускать события) - дергаешь экшн который удаляет настоящий флаг. Второй флаг показываешь на уровне аниматора. Махает флагом тоже аниматор клона. Словил событие аниматора "Флажок воткнут в землю" (300) - удаляешь клон. Я врал про ActionDeactivate, потому что нам нужно сделать иначе. Рядом с игроком делаем компонент, который сам скрывает игрока, если активны некие объекты. Когда мы создали клона - мы закинули клона в этот компонент. Ну и до кучи, надо ждать не 300е событие анимации, а 100е после 200е. Ну и, еще до кучи, я бы строками названия событий лепил.
Мысли об инлайновой кат-сцене с флагом не отпускали. Решил, что этот случай в мои "2/3 логики" не укалывается - вот в случае с флагом лучше-таки написать отдельный скрипт.
Приеду с шараги и сделаю. Только я не совсем понял, как этот скрипт будет работать.
Так, падажжи, а как это работает? У меня же по сути для каждого объекта должен быть уникальный текст. Как это работает, объясни ещё раз.
Дж это медленое дерьмо нахуй ненужное.
Нихуясе, неожиданный проход в говнодвижки!
>Как это работает, объясни ещё раз.
Очень просто:
Объект "враг" вызывает функцию
PokazatPanel("Вы убиты!" [Restart, Exit]);
А например, объект "торговец" вызывает функцию
PokazatPanel("Вот какие у меня товары", [Trade, Cancel]);
Первый аргумент - текстовое описание твоего сообщения на панели, которое ты хочешь видеть. Второй аргумент - список (массив) именованных констант кнопок, которые может отображать панель.
Эм, возможно между нами возникло недопонимание, код выше это не полноценное решение, а абстрактный псевдокод, который вызывает методы, которые тебе самому тоже нужно описать в классе интерфеса с панельками, например, SetText - этот метод меняет текст на панели. SetButtons - этот меняет кнопки на панели. Для простоты сделай, чтобы он удалял все кнопки, а затем создавал согласно переданному массиву.
И теперь самое главное, как мы с еще одним аноном сказали выше, панель всегда висит в памяти, отображается на экране методом PokazatPanel, так же этим методом обновляется уже показанная панель (то, что тебе нужно было изначально - метод PokazatPanel не дублирует панель, а только обновляет в ней текст и состав кнопок).
Скрывается панель кнопками, которые на ней отображены. С вызовом забинденных на кнопки действий. Так же ты можешь прихардкодить скрытие панели по кнопке Esc, чтобы избежать ситуаций, когда ни одна кнопка не скрывает панель (или по запарке панель вызвана без кнопок), и игрок матерится, не знает, как убрать этоя дрянья.
Ещё вопросы?
Заебал ныть, решение перед носом
https://docs.unity3d.com/Manual/ScriptCompilationAssemblyDefinitionFiles.html
>какие могут быть подводные камни?
Слышал, что если в юнити переполнить стек, то может сгореть процессор.
Ты поосторжней с этим.
>Ещё вопросы?
Да мне кнопки особо не надо менять, лул. У меня там при щелчке будет просто текстовое описание детали появляться и всё, а кнопка будет одна - "закрыть", так что в принципе, метод SetButtons создавать не надо. А как описывается SetText? Это типа надо создать такую функцию, а в нём описать, что входит, и что он должен делать? И в одном скрипте, да? Покажи пример, как он должен выглядеть а то я тупой, соре. По сути, у меня на панели должен меняться только текст, а кнопка одна единственная должна уметь закрывать эту панель.
>стринг же вроде в куче лежит
ты на с++ или на си писал когда-нибудь?
>Может получиться много данных
Да?
>где-то до десятка тысяч в массиве
10000 байт?
>и около сотни массивов.
1000000 байт(чуть меньше мегабайта)?
>Дело в том что я хуй как работает этот ваш стек и слышал вроде что он имеет какие-то ограничения, а в стеке же будут лежать структруы верно ?А что такое структура, это набор указателей? В моем случае будет один стринг и несколько флоатов. Все эти флоаты будут лежать в стеке, так? Массивы будут использованы для перепостроение данных, обычно это просто полный/частичный перебор некоторго ренджа, и иногда будут обрезаться концы чтоб хуйня совсем не растолстела. Думаю использовать обычный список, какие могут быть подводные камни?
Просто зайди в гугл и напиши А ЧТО ТАКОЕ СТЭЙК и А ЧТО ТАКОЕ КУЧА ЭТО ТО ЧТО Я НА ГОРШКЕ ОТЛОЖИЛ ИЛИ ДА
А еще лучше напиши конкретнее что за срань такую странную ты делаешь, откуда данные и как передаешь, почему тебя волнует переполнение стека(!!!) и как ты вообще к этому пришел?
Хочу в 2D игре реализовать много разных меню, сделать это частью геймплея. Чтоб в них много разных статистик, кнопок, элементов.
Я правильно понимаю, что для этого используют Canvas? Или мне сделать отдельный геймобджект, и в нем уже делать кнопки разные и панели?
А еще, может ли быть несколько Canvas? Один убирать, потом показывать другой.
Одно и то же перепечатывают по кругу уже которой месяц лол >>33745
Кажется в комментариях начали что-то подозревать
>So what’s new? Unity is really weird company rehashing stuff over and over without giving any new info.
Хомячков уже корить жоп системс не получается. Скоро ее выбросят на помойку и выдумывают что-нибудь EXCITING
Ну да, я тупой блять, ну помогите инвалиду сделать рабочим функционал, ну позязя!
Спасибо :3
Дружище, ты уже который раз переспрашиваешь. Тебе пишут в целом, код тебе никто не даст. Вариантов у тебя на выбор уже несколько. Не осилиль менять кнопки - не меняй кнопки. Каким-то образом ты раньше текст показывал (без оверлея) - таким же и показывай.
Потому что в юнити уже все есть, больше нечего добавлять. Так же как в гейфонах, но что-то же нужно пиздеть.
Подловил себя на том что элементарно не знаю многих классов юнити, тупо с ними не знаком. Вывел все классы, вышло 7866 штук. Но там 7/8 служебные, вроде конвертеров под iOS или внутреннего устройства редактора.
Подксжите, как этот список сократить до 1000 самых важных? Вот знание каких классов реально важно?
А вообще люблю просматривать такие списки. Вот я тупо не знал что есть такие классы как Vector3Int и похожие. Выглядит полезным.
https://pastebin.com/PMTVtsVq
2018 год подходил к концу, ECS+Job System уже 10 лет как стал стандартом де-факто во всех AAA играх и только у ооптушка-ниасилятора по прежнему пригорало от ECS на весь юнити-тред.
UnityEditorInternal.EditMode+<DoInspectorToolbar>c__AnonStorey1 разумеется, еще интервал ща наугад ёбну, потом посмотрю 5700-5950 попал в UnityEngine.Networking.Match.NetworkMatch+<ProcessMatchResponse>c__Iterator0`2
.
Туторы посмотри. И классы, как бы тебе сказать. Юнька в целом про визуальный редактор. Ты можешь хоть 9499 классов вызубрить, но без понимания того, что "боевым товарищам" нужен именно редактор (а не "красивый код") - тебя уделает любой джун, который смастерил (и напрограммировал) четыре уровня платформера.
Вообще-то я вполне себе средний юнити дев. И я вот решил вывести все классы и мне бомбануло что я там от силы 3,5 знаю. Типичный сосач. Спросил какие классы важны/нужны. В ответ рассказали как мне дальше жить, какую методологию применять к изучению юнити и то какой я школьник. Идите нахуй без вас соображу какие классы там важны, а какие шелуха. Не хотите кооперацию, получите конкуренцию мрази.
Да кому твое говно нужно
>>33704
Совсем уж в быдло код не надо ударяться. Всегда есть решение лучше https://m.habr.com/post/244493/
Да не, не надо, чего ты. Просто скажи что ты хочешь сделать, и как ты это собираешься делать, а мы подскажем тебе правильный ли у тебя подход и какие подводные камни, если же нет - то как лучше сделать.
ImyaScriptaSDannimi dadaya = FindObjectOfType<ImyaScriptaSDannimi>();
dadaya.data //мои данные
Мы вам перезвоним.
Спасибо
https://www.gdcvault.com/play/1012338/Shears-Squeeze-the-Juice-Out
очередной гвоздик в крышку гроба манямирка однопоточного оопущенца. Опять 2к10.
https://www.slideshare.net/naughty_dog/multiprocessor-game-loops-lessons-from-uncharted-2-among-thieves
С 47 страницы, из десятилетнего прошлого нотидоги врываются в наше время и проводят оопущенцу хуями по губам.
> A Simple Approach(That Doesn't Work)
> Job System уже 10 лет как стал стандартом де-факто во всех AAA играх
> Parallel Graphics
> Parallelizing
Поехавший все никак не уймется, называй вещи своими именами.
Не знаю кого ты пытаешься детектить, но екс в ооп языках всегда будет находтся в контексте ооп. Либо ты не понимаешь что то одно из них двоих.
О, оопушок подъехал, но дальше названия прочитать постеснялся. Иначе манямирок рухнет.
Впрочем, судя по подгоранию - уже начал рушится.
Проигрываю с твоего батхерта, но в следующий раз все такие лучше подумай прежде чем что либо писать.
Кэшируй если часто надо.
Можешьв старте найти.
Можешь изначально присвоить нулл, и в нужном методе если нулл - находишь.
Можешь сразу в скрипте публичную переменную типа скрипта с данными сделать и в инспекторе перетащить туда то что надо.
Так раньше я полностью менял панели, и на каждый объект цеплял скрипт. Так же делать?
>Аноны встал вопрос как передать массив данных между скриптами. У меня есть массив с данными, нужно что бы другой скрипт дёргал этот массив и получал эти данные?
Юнити-туториалы осилил, а сишарп-туториалы не осилил?
В сишарпе есть элегантный и универсальный метод обмена данными между "скриптами" - модулями: Оберни каждый из своих скриптов в одинаковый неймспейс и они сразу увидят друг друга.
Не знаю, как там сейчас, но раньше юнити генерировал сишарп-солюшен с неправильно настроенным неймспейсом по умолчанию, потому что если солюшен генерирует вижуал-студия, у неё автоматически все модули классов помещаются в неймспейс по умолчанию, одноимённый названию проекта. И все классы автоматически видят друг-друга.
В юнити же все модули классов ("скрипты", лол) получались изолированными и друг друга не видели. Как сейчас, не знаю. Возможно хитрые жиды юнитеки сделали это специально, чтобы продавать за шекели дополнительные средства интеграции.
Если бы ты знал сишарп, ты бы (1) полез в настройки солюшена и настроил неймспейс по умолчанию или (2) не лез бы в солюшен, а просто оборачивал бы генерируемые юнитей классы в самодельные неймспейсы, а потом using MyPrefabs; using MyPropsData; using MyCockPussyDjigurda;
Поэтому учи сишарп, чтобы не быть лохом.
Запости в тред свою писечку с супом и датой - я тебе рабочее решение напишу и архивом скину.
> Юнити-туториалы осилил, а сишарп-туториалы не осилил?
> В сишарпе есть элегантный и универсальный метод обмена данными между "скриптами"
Ничто не предвещало беды, как вдруг
>- модулями: Оберни каждый из своих скриптов в одинаковый неймспейс и они сразу увидят друг друга.
> Не знаю, как там сейчас, но раньше юнити генерировал сишарп-солюшен с неправильно настроенным неймспейсом по умолчанию, потому что если солюшен генерирует вижуал-студия, у неё автоматически все модули классов помещаются в неймспейс по умолчанию, одноимённый названию проекта. И все классы автоматически видят друг-друга.
> В юнити же все модули классов ("скрипты", лол) получались изолированными и друг друга не видели. Как сейчас, не знаю. Возможно хитрые жиды юнитеки сделали это специально, чтобы продавать за шекели дополнительные средства интеграции.
> Если бы ты знал сишарп, ты бы (1) полез в настройки солюшена и настроил неймспейс по умолчанию или (2) не лез бы в солюшен, а просто оборачивал бы генерируемые юнитей классы в самодельные неймспейсы, а потом using MyPrefabs; using MyPropsData; using MyCockPussyDjigurda
>Не знаю, как там сейчас, но раньше юнити генерировал сишарп-солюшен с неправильно настроенным неймспейсом по умолчанию, потому что если солюшен генерирует вижуал-студия, у неё автоматически все модули классов помещаются в неймспейс по умолчанию
Ну да, сейчас всё правильно генерируется. Я напиздел. Ладно.
Об оптимизации надо заранее беспокоиться, а то на абум что-то делать и потом плакать, ой набыдлокодил надо все заново переписывать
Было бы что переписывать, для начала.
Таким образом, правильный ответ:
>>33875
>Аноны встал вопрос как передать массив данных между скриптами. У меня есть массив с данными, нужно что бы другой скрипт дёргал этот массив и получал эти данные?
1. Массив с данными хранится в отдельном объекте, который ни от чего не наследуется.
2. Данные передаются статическими методами, в которых реализована инициализация объекта при первом вызове. На скриншотах изображена простая инициализация конструктором, но можно создавать и десериализацией, например. В последующие вызовы функция уже будет обращаться к созданному объекту.
А вот еще дай оценку такому приёму:
>самое лучшее что есть
Нет.
Синглтон хорош, когда надо держать данные в памяти и быстро вызывать.
Ты же не будешь из-за боязни антипаттернов дёргать десериализацию в апдейте?
Или будешь? Хуй вас знает, сектантов баззвордовых.
Мне как раз singleton и нужен. Мне и нужно было быстро дёргать массив с данными и этот массив уникален.
А зачем делать десериализацию да и еще в апдейте?
Ага сразу бросаются к Ванечке, который харкодит и без проектирования, комментирования делает всё логику.
А потом приходиться все это исправлять, не понимания как и что работает.
Значит, сорян. Я увидел сарказм, там где его не было. ГД такой токсичный стал, что на каждый шорох приходится гавкать на упреждение.
Хех. Ладно, спасибо тебе. Надо будет повторить паттерны, а то со своими амбициями я далеко не уйду, даже не зная простой и готовой реализации.
Да там такие уроки, в частности на Ютубе. По типу как взять компонент текст и присвоить ему текст. Другая половина, которая учить делать что-то на реальных проектах, такую пургу пишет, начиная с магических чисел, спагетти-кода и заканчивая непонятной структурой проекта. В которой сами под конец блуждают
Есть зарубежные, там конечно балдеж, но нужно поднимать технический английский. Да и они сразу пишут профессионально, объясняя лишь базу. Оставляя лишь пару крупиц знаний. Но хотя бы этому, ознакомился с мешами, триангуляцией и т.п.
А так с помощью своих амбиций, реального проекта, любви к чистоте и внутреннему перфекционизму, который всегда захочет лучшего. Буду искать лучшие варианты и как раз закреплю знания.
Это какой-то левый хуй про уроки кукарекнул. Лучшие уроки - учебники. Лучший учебник по шарпу - MSDN.
Школьники всё могут в говно превратить, и паттерны, и антипаттерны.
О чём вы вообще спорите? И нахуя какие-то событийные шины, если тупо можно вызвать нужную функцию напрямую. Ну вот наприер я сегодня писал тайлинг текстуры. И там надо было квадраты рисовать в текстуру пикселями. Я все функции напрямую и вызывал. А что надо какие-то события лол для этого юзать? Зачем обычному индиблядку эти ваши шины? У тебя 3 макросекунды чтоб убедить меня что лично сука мне с них есть материальная шкурная низказкая и сладострастная выгода.
События нужны тогда, когда дохуя вещей должны происходит после какого-либо события. Например, сменил язык -> событие -> все текста на экране обновились. Удобно, только подписывай/отписывай текста при создании/удалении. Использовать события для чего-то большего есть извращение.
но для этого есть паттерн проектирования ОБСЕРВЕР из книжке 4ех
причем тут шины? вы шиноебы чтоле?
Нет, отправляю запрос по шине на разрешение отмотать 3, а то и целых 5 метров бумаги из рулона и жду пока шина ответит на мой призыв.
Где ммаксимально нюфагу разжевывается кодинг UI?
Почему-то все туториалы которые я нашел, даже официальные, просто шлепают их в эдиторе, а потом уже в самом эдиторе вешают на них всякие разности.
Я смотрел в сторону OnGui и даже запилил пару вещей на нем, но люди на форумах говорят что они тормозные@устаревшие и вообще зачем тебе это нужно иди в эдиторе нашлепай.
Вот еще говорят есть какой-то способ запихнуть нашлепанное в эдиторе в префаб, префаб в ассет бандл, ассет бандл в длл и загружать этот ассет бандл прямо из кода. Это было бы идеально. Я даже пару примеров видел, но поскольку я тупой и начал изучать сишарп и вообще программирование четыре с половиной дня назад кек не думаю, что мне удастся провернуть такой трюк.
FixedUpdate не вызывается каждый кадр. Он срабатывает с фиксированным шагом ~20 раз в секунду, в моменты когда физический движок проводит свои рассчеты, так что момент нажатия кнопки FixedUpdate может пропустить. Проверку нажатий нужно вставлять в Update или LateUpdate.
Кажется это следующая NEXT BING THING. Наконец-то перестануть форсить ECS и жоп систем
Ну это круто, будет как в уеч4, надеюсь производительность будет как в нативном коде.
И точно так же забросят недоделанной, перейдя на следующую BIG THING. Кеки анальные.
>ВИЗУАЛЬНЫЙ СКРИПТИНГ В ЮНИТИ
Так для юньки уже давно штук сто проектов с нодами есть. Говно говна одно и тоже.
>причем тут шины?
Чтобы все события в одном месте отмерять. Банально большой такой класс, куда отправляются и откуда происходят события. Можно ещё функционал вроде буфферинга прихуячить или какую-нибудь ещё задержку.
>но для этого есть паттерн проектирования ОБСЕРВЕР из книжке 4ех
Обчитаются своих паттернов, а потом у них виснет всё
А нахуй тогда делать так: public int someint { get; set;}. Тут нету ничего из выше перечисленного
Дочитай до конца. Ты можешь сделать, например public int someint { get; private set;}
Дальше сам.
Это да, это для инкапсуляция. Но люди в коде просто используют то что я привёл выше, вот вопрос, нахуя?
У них надо спрашивать. Могу предположить, что чисто для порядку, чтобы стиль соблюсти. Ну и плюс самодокументируемость - сразу видно, что обращаешься к свойству. И еще плюс можно по быстрому туда сеттер-геттер ебануть.
Ну или просто чтоб 10-20к лайнов держало свободно
У меня хуй, соре. :с
Ты брейкпоинт туда воткнуть можешь.
Рисуй в текстуру например, какие проблемы.
Мимо-анон, приебаться хочу.
> сразу видно, что обращаешься к свойству
А по public int someint = 0 не видно, что обращения будут?
ЛИНКом проверь.
А вдруг, потом будет? Чтобы проще менять было.
С какого ?
Алсо те кто юзает монодевелоп ИДЕ:
Как заставить егоподсвечивать блоки кода постоянно а не тогда когдамышкой по крестику сверки блока елозишь ?
Знатокам: (знаю что без мазы но вдруг)
Может всетаки есть финт ушами писать екстенты без скобочек как проперти или как-то запилить проперти екстент с использованием This как в экстент методе.
Например:
obj.ext().something - такое вот расширение изза скобок трудно читается
obj.ext.something - намного меньше шума
>защитить свое приложение от воровства
Что именно ты внем собрался защищать и от чего ?
Ты уж определись.
Читал мануал и гугл листал, однако устал.
Обычно на каждый чих есть простой пример неепического профита.
А тут как-то не срослось.
В чем профит ?
Что он может чего неможно сделать другими средствами ?
И у меня сразу несколько вопросов:
1. В юнити есть встроенный 3d редактор. Есть ли смысл хоть как-то им пользоваться, если умеешь пользоваться всякими 3д максами, блендерами, автокадами и скетчапами и можешь делать модели в них?
2. Как я понял, в юнити есть редактор текстур. Его будет хватать или нужны какие-то сторонние?
3. Какие плагины можете посоветовать, если я собираюсь тупо делать рил тайм рендер зданий с упором на фотореалистичность?
1. Нет там встроеного (по крайней мере не в 5.6 версии) редактора для моделинга.
Есть редактор для расстановки на сцене.
>В чем профит ?
Его можно просто, без задней мысли объявить (инстанцировать через new). В отличие от MonoBehaviour, который нельзя просто, без задней мысли объявить (а только через Add Component). Мне сама юнька об этом написала, когда я готовил этот >>33947 пост, потому я в том коде не стал заморачиваться со ScriptableObject, а написал вспомогательный класс, который вообще ни от чего не наследуется. Хотя в том посте, в коде, вспомогательный класс script2 мог бы быть как раз наследником ScriptableObject. Но раз работает и так, то зачем платить больше?
А теперь ты идёшь в документацию юнити и смотришь, какими методами обладает ScriptableObject, и если эти методы тебе нужны, наследуешься от него.
Substance in Unity
https://assetstore.unity.com/packages/tools/utilities/substance-in-unity-110555
Post Processing Stack
https://assetstore.unity.com/packages/essentials/post-processing-stack-83912
Polybrush
https://assetstore.unity.com/packages/tools/modeling/polybrush-beta-111427
>>34291-кун
>Может быть еще что-то посоветуете?
Сейчас ты будешь устанавливать все плагины? Будешь делать все игры? Сашко? Цэ ты?
Плагины в любой программе упрощают жизнь в разы.
Если бы у меня сразу были все нужные плагины, когда я изучал 3д, то я бы делал все быстрее, лучше и эффектвнее. Но нет, заместо этого я изобретал велосипеды, хотя мог выполнять рутину одной кнопкой. Порой час времени без нужного плагина заменяется минутой времени в плагине.
Э нет, Сашко, ты не сможешь автоматизировать сразу всё, выучить за одну ночь сотни плагинов на все случаи жизни, при этом не утруждая себя изучением основ, как это всё работает. По факту, ты сейчас просишь кнопку "сделать заебись":
Тэээкс, делаем игру. Я надеваю плащ и волшебную шляпу, достаю ассет "заебись модельки в едином стиле который ты хочешь", сверху на него скачиваю плагин "осознающий себя нейроскрипт", затем скачиваю плагин автоматическое игровое меню-экстрасенс, читающее мысли разраба". Итак, засекайте время, бац-бац, хуяк-хуяк, скачиваю плагин "процедурный генератор интересного контента", хуяк-хуяк, устанавливаю плагин "универсальный конвертор любых анимаций со встроенным валидатором мешей", еблысь-хуякс, накатываю плагин на плагин, надо не забыть сериализацию, вот так, скачиваю плагин "удобная система сохранения", бдыщь-пиздык - готово! Компилирую и выгружаю в стим. 10/10. ААА. Все игрожуры хвалят бесплатно! Называют меня русским Кодзимой.
Ну приложение такое себе, вроде ничего необычного, но в нем есть своя изюминка. Хотелось бы сделать сорт оф авторизации,и чтоб билд через некоторые время был непригоден к использованию и не было возможности выковырять заставив работать обратно либо чтоб это было очень трудно. Но глядя на то как на многие программы есть кряки складывается впечетление что хуйца так просто можно защититься.
Для малого объема кода и отсутствии инета - никак.
Невозможно создать условия когда взлом станет невыгодным.
На большом объеме кода и загрузке проца проверками лехко и интересно.
Да. Компилятор не может гарантировать что переменная не будет изменена сторонним потоком. Потому каждый раз будет читать из памяти. Локальную переменную можно просто поместить в регистр.
Вообще-то наоборот. Конпелятор все оптимизирует из расчета на однопоточное выполнение.
Так что если какой-то поток изменит переменную, то это скорее внутри твоего цикла никак не обнаружится
Для отмены таких оптимизаций даже специальный модификатор volatile есть
Есть два префаба, один - ракетница, другой - ракеты.
На них в эдиторе ничего не повешено(и вообще невозможно что-то повесить по моему скудному разумению, в игре к которой я пытаюсь прикрутить эту ракетницу свой уже готовый assembly-csharp, что-то прикрутить можно только через длл). В игре я инстанциирую ракеты по клику дллкой и прикручиваю к ним наследующий от MonoBehaviour класс, который должен следить за ее положением, скоростью, количеством топлива.
Допустим, у каждой ракеты разный запас топлива.
Все вроде как работает, но возникает этот самый абсолютно тупорылый вопрос.
Я не могу понять, как обратиться к конкретно этому инстансу этого класса и соответственно, этой конкретной ракете к которой этот инстанс прицеплен. Мне нужно как-то поиметь возможность менять переменную запаса топлива для каждой конкретной ракеты. Но я абсолютно не понимаю как понять что это именно та ракеты, которая мне нужна, это просто в голову не укладывается.
Штоблять??
Что ты творишь!?
Остановись! Тебе нужно чтобы просто пушка стреляла ракетами. И всё. Какие нахуй ДЛЛ? Какой ООП? Какое прикручивание классов??? Куда ты полез? Она тебя сожрёт нахуй!
Я бы с радостью не лез в вещи в которых нихуя не понимаю, но я уже не могу остановиться.
>Тебе нужно чтобы просто пушка стреляла ракетами. И всё.
Это хуевое описание от непрограммиста кек, нет там никакой пушки и ракет.
В игре есть механика выбора объекта через клик мышкой, к ней я прицепился и могу нормально отличить мой объект от других объектов в игре. Но как отличить какой конкретно это инстанс моего объекта? Мне нужно иметь возможность собирать с них инфу скопом, выставлять значения переменных для каждого в отдельности, как-то так в общем. И вот как обратиться к железно тому инстансу который мне нужен, я не понимаю.
Ну что тебе посоветовать?
Изучай юнити.
Тут выше в треде тебе советовали изучать шарп на МСДН, это дело хорошее, но помимо шарпа, тебе надо знать особенности движка. Для чего там нужны объекты, как движок ими манипулирует. Какие методы у тебя есть для получения доступа к объектам игровой сцены. А то ты за ночь нахватался вершков, а общего понимания нет.
Советовали не мне, я левый мимохуй. Я пробежался по юнити туториалам у самих юнитеков, но как-то это дело они либо обошли стороной, либо я просто не увидел.
>либо я просто не увидел
Зыс.
Невозможно увидеть всё, особенно, когда "пробежался".
Теперь пройдись адресно, выискивая статьи по тем вопросам, которые тебе нужны.
Знать бы еще что искать эх. Буду копаться.
Я вообще думаю вот что, а зачем писать велосипед. В игре это уже все реализовано, когда я копался в ассембли я видел что есть несколько dictionary, при каждом добавлении объекта в сцену и в них записывается инфа об объекте.
И в этой самой механике выбора, когда игрок выбирает объект, то игра пробегается по этим dictionary, пока не находит нужный тип объекта и дальше уже решает что с ним делать.
Я таким образом и подцепляю свой monob класс к конкретно моему объекту по параметрам, которых у никакого другого объекта в игре быть не может(наверное хех), а потом определяю, подцеплен ли к объекту класс или нет.
Может быть пойти дальше и сказать, что если объект выбран, объект отвечает заданным параметрам и на объекте уже есть инстанс моего monob, то этот инстанс и есть нужный мне? Воот.
>Ну что тебе посоветовать?
>Изучай юнити.
Не хочешь помогать - не пиши ничего, даун, в зад засунь себе такие советы.
Нет ну совет-то правильный. Изучать как движок работает надо, иначе так и буду хуйню лепить. Мне просто надо было срочно разобраться в конкретной особенности.
>Нет ну совет-то правильный.
Хочешь еще правильный совет? Иди учись на программиста несколько лет, потом не будешь нас своими вопросами мучить, мы тут не для этого сидим.
Совет был бы корректен, если бы у меня не было профессии(у меня она уже есть) или я бы хотел ее сменить(нет смысла). В моем случае гораздо логичнее спросить настоящих программистов конкретные направления поиска.
что за хуйню ты там творишь вообще? инстанс класса чего? наследуй ракету от MonoBehaviour и пускай она сама себе там на Update топливо отнимает. нахуй тебе где-то ещё отнимать у ракеты топливо то
Ну хрен его знает, может чего дельное будет.
>>34449
Я же говорю, пример с ракетой туповат оказался.
Класс наследуется от MonoBehaviour, в нем есть переменные, которые вытаскиваются из параметров аниматор контроллера этих объектов, на который вешается инстанс - это он уже может. Но мне нужно как-то понять, как сделать так, что совсем другой класс будет менять и узнавать эти переменные адресно с каждого инстанса или все значения массово, вот так как-то.
не совсем понятно о каких ситуациях речь, приведи конкретные примеры.
вот есть у тебя хуйня1 и хуйня2 которые представляют собой два обьекта. хуйня1 с аниматором и хватает его значения. их хочет хуйня2.
как хуйня1 и хуйня2 взаимодействуют между собой в мире? возможно следует сообщать хуйня2 о хуйня1 через это взаимодействие?
если ты хочешь список всех инстансов хуйня1 то это уже другой вопрос и на него другой ответ.
Постараюсь пояснить что мне надо сделать.
Игрок создает объект из префаба. Когда он выделяет его, если этот объект отвечает параметрам, то главная_хуйня2 вешает на него хуйня1, которая в свою очередь вытаскивает значения из аниматора этого объекта.
Игрок создает еще один такой же объект, опять же выделяет его, на него подцепляется еще одна хуйня1. И еще и еще и еще.
При выделении объекта, который отвечает заданным параметрам и на котором уже есть хуйня1, выскакивает менюшка, в которой через хуйню1 можно контролировать эти значения аниматора на текущем выделенном объекте.
Все это контролируется главной_хуйней2, которая цепляет хуйню1 на объект и которой надо знать каким конкретно объектам какие конкретно хуйня1 назначены.
Потом, когда игра сохраняется, главная_хуйня2 собирает все параметры из всех объектов, на которые навешены инстансы хуйня1, сохраняет их каким-то пока еще не придумал каким образом и при загрузке ищет все созданные игроком ранее нужные объекты на которых была навешана хуйня1, автоматически вешает на них хуйню1 заново и восстанавливает в ней все значения, которые выставил игрок.
Вот примерно то что мне нужно сделать.
Я уже могу понять, что это именно тот объект на который нужно нацепить хуйня1, т.к. подцепился к механизму выбора игры, но как мне сказать главной_хуйне2, что именно эта хуйня1 на этом конкретном выделенном объекте должна реагировать на менюшку и как сохранить потом со всех хуйня1 их значения, на каком конкретно объекте они были и потом это все восстановить?
как-то сильно дохуя абстрактно. два раза пришлось перечитывать. лучше задавай вопрос "у меня есть Х. я хочу У" и схему в пэйнте бы не помешало, возможно пока рисуешь сам поймешь ответ.
>Все это контролируется главной_хуйней2, которая цепляет хуйню1 на объект и которой надо знать каким конкретно объектам какие конкретно хуйня1 назначены.
ну заведи в главная_хуйня2 коллекцию с объектами которым хуйня1 была назначена, можешь же через объект вытащить нужный тебе компонент с хуйня1, если тебе нужен инстанс хуйня1 если у тебя есть конкретный объект. можно же например взять Dictionary с ключем object и значением хуйня1. ты словарику даешь object, он тебе в ответ "такой хуйни тут нет", или "такая хуйня есть, вот тебе она".
и все пары с object и хуйня1 можешь потом ещё и из этого словарика взять.
главное не забывать удалять из этого словарика object перед их уничтожением.
>но как мне сказать главной_хуйне2, что именно эта хуйня1 на этом конкретном выделенном объекте должна реагировать на менюшку
а зачем в этой логике главная_хуйня2? у тебя же должно быть что-то вроде public class Menushka где просто есть ссылка на нужный ей инстанс хуйня1. главная_хуйня2 же должна только создавать менюшку и возможно хранить список открытых менюшек на случай если захочется их все закрыть. но на этом вклад главная_хуйня2 в этот процесс заканчивается.
>как-то сильно дохуя абстрактно
Рискну предположить, что этот анон очень сильно ссыкует спалить свой геймплей, чтобы не увели. Потому такие абстрактные сведения.
1152x776, 0:22
а хуй его знает. я тоже это предполагаю. но ничего не говорит о том что есть вообще что спиздить. может ему и просто показывать нечего так как и нет нихуя.
>сильно ссыкует спалить свой геймплей
>Потому такие абстрактные сведения.
Тхис и тупость еще накладывается.
Я другой анон, но разница есть. Т.е. когда ты скриптуешь поведение сцены (игрок оказался здесь - включаем вот этот объект) ты используешь одни подходы, а когда скриптуешь интерфейс (если здоровье игрока упало ниже 20hp - включаем красный оверлей на камере). Вопрос в более жесткой линковке, например. Вопрос в слежении за показателями (или событийной моделе, которая цепляется именно за своего игрока). Или ты как-то так живешь, что этой разницы не чувствуешь?
Да какбы для мну что там что там один хрен програмить или юзать инспектор привязками или префабить.
Собсна у чела два вопроса - как управлять с нуля гуем и как цеплять гуй снаружи к билду.
Первый кодится также как и с обычными объектами, ну то что код другой так это везде так, а может это у юнитехов такой тонкий стеб типа могли сделать унификацию архитектуры, но вот хрен вам.
Второй тоже попробовал, гугл не то что до Киива, до Гавриила местами даже тропинки расчистил, к слову в 2018 версии теперь должно быть проще, они там перешли на какую-то знатную шнягу и обросили старые костыли с бандлами итп.
Чтобы выебываться на нюфанек и посылать их лучше учиться.
Я сделал так - общий менеджер с апдейтом, в котором логика всех менюшек и всех состояний вызывается, и апдейты в юнитах для обработки их моделей. Апдейты независимы друг от друга, разве что апдейт в моделях смотрит иногда на состояния из общего менеджера.
Ёбаная ты чмоня, просто создай открытый вызов в своем манябихейворе, который будет менять нужные тебе параметры.
Про тупость мог бы и не упоминать, если думаешь, что в юнититреде кто то спиздит твои гениальные идеи и завтра зальёт в стим.
> у тебя есть просто олигарх который как химера собран из кусков других существ
Но ведь, справедливости ради, этого же можно добиться и без ECS при помощи интерфейсов:
class Oligarkh : IBoss, IHuman, IRich, IPhat, IJew, IHasCock, IOwnsPussy, IFriendsDjigurda {}
это не совсем так. интерфейсы предоставляют реализацию конечному классу, тогда как в ECS реализация не предоставляется. и каждый кусочек пазла должен уже в себе содержать реализацию.
Ага, таким образом самая простейшая в вакууме реализация ECS будет:
class Entity
{
private List<Entity> components;
public AddComponent(Entity component){ components.add(component); }
}
?
Хотя нет, лучше так, наверное:
abstract class Component{}
class Entity
{
private List<Component> components;
public AddComponent(Component component){ components.add(component); }
}
class Dooer : Component
{
public void DoSomething{ Console.write("I do!"); }
}
class System1
{
Entity entity1 = new Entity() { AddComponent( new Dooer() ); }
}
1920x1000, 0:07
Кот:
Quaternion to = Quaternion.FromToRotation(transform.forward, -snakeHead.up) transform.rotation;
transform.rotation = Quaternion.Lerp(transform.rotation, to, rotateSmooth Time.deltaTime);
transform.rotation = Quaternion.Lerp(transform.rotation, to, rotateSmooth Time.deltaTime);
у меня была идея прибавлять новое вращение к старому типо застакать что бы получилось конечное вращение, но нихуя не вышло т.к. рак мозга
Я знаю, что есть ARCore, но он работает лишь на некоторых моделях телефона. Есть ещё что нибудь?
Конкретно, мне бы хотелось создать приложение, которое превращает пол в квартире в траву.
>>34524
довольно отдалённо. вообще конечно пример с интерфейсами ближе к реальности. можно же сказать "вот для группы у которой есть позиция, ротация, кошелёк и член ебанись ка этот код". но разумеется это будет поток боли, так как переиспользовать код по человечески нельзя, эвенты тоже нормально нельзя, ссылки нельзя. много чего нельзя. вообще интерфейсы как правило ебошат же чтобы проверять наличие какого-то функционала не ожидая что он есть вообще. чтобы ты такой хопа if target is IPickable DoSomeCode(target as IPickable), для этого ECS тоже не подходит так как надо заранее сказать "хочу всё говно с IPickable"
всё это напоминает тот самый аутизм с оптимизоном когда ты все свои данные представляешь как несколько массивов со struct и ебёшся там с индексами, разве что удобств заметно больше.
это всё просто замечательно, пока имеет разумные размеры.
>>34536
чисто так, интересно, а хули ты камеру крутишь? вместо квадратика?
а вообще дай ка весь код.
Ну во-первых у тебя тут знаки проебались.
А во-вторых - где этот код вызывается? На камере или на кубе? И змейка как у тебя представлена?
>можно же сказать "вот для группы у которой есть позиция, ротация, кошелёк и член ебанись ка этот код". но разумеется это будет поток боли
Разумеется. Только при чём тут ECS?
ECS не про группы и групповой вызов кода, насколько я понял, ECS это про то, как для реализации игровой логики создаются объекты-системы, код которых строится из взаимодействия объектов-компонентов внутри объектов-энтитей. Я неправильно понял?
>>куб как в майнкрафте сделан из блоков и не вижу разницы
ведь принцип будет тот же, он не успеет докрутится начав новое вращение и его перекосит как камеру
600x422, 0:09
а нахуй он нужен если не использовать его для ебанистических групп то? ты суешь себе кочергу в задницу в обмен на производительность. оно не даёт плюсов за пределами этого. я уже привёл пример с массивом структов, я не знаю что к нему ещё добавить.
>>34546
>>34547
>>34549
ну добавь какое-нибудь округление ротации. например код этой крутилки
https://pastebin.com/DW6gpuJ6
Допустим у меня высокая башня, и я, стоя к ней близко, хочу посмотреть на верх башни.
лол ну сохрани позицию объекта и попробуй угадать где он основываясь на какой-нибудь техномагии.
а вообще тут икспертов по AR я не видал. лучше игры делать
> например код этой крутилки
спасибо большое, но теперь чувствую себя хуесосищем бездарным, опущеным в парашу всей головой. Такая мелочь, но сам бы не додумался
https://pastebin.com/MujJrQHU
лол это же обычное дело когда самые тупые и очевидные решения приходят в последнюю очередь. я много раз когда ложился спать и уже окуклился в одеяльчико неожиданно понимал это решение, вскакивал и записывал его.
>>34565
я могу только выразить отсутствие наблюдаемых экспертов.
а вообще. возможно тут? https://developer.vuforia.com/forum
ARVR - новая область. Вкатываясь сегодня, ты можешь стать одним из наикрутейших отцов-первооткрывателей индустрии.
На дваче ? лол
А по существу не ведись ты на апи вуфоровцев, также как и производители видеокарт они будут по капле вливать типа иновацыи и тянуть резину до второго пришествия.
Делай сам распознавание что сложного то ?
Оче мутno, понRтно ниhуя. Если монобех изменяется благодаря какой-то инородной субстанции, то кто сейчас их склеивает? Почему там же не сделать подсчет ссылок? Если монобех знает о некоей внешней субстанции (т.е. если у тебя есть компонент ЮзательИнороднойХуйни), то ты можешь сделать синглтон-счетчик, на Awake ЮзателяИнороднойХуйни регистрироваться в синглтоне, на OnDestroy выписываться и там же считать кто нужен, а кто нет.
>Делай сам распознавание что сложного то ?
Во времени очень ограничен.
Да и оказалась, что Vuforia по умолчанию поддерживает нужную мне функцию
Если всё совсем хуёво у тебя - делай один единственный апдейт в каком-нибудь апдейт-менеджере и подписывай в него списки апдейтируемых объектов, и регулируй, вызывать ли апдейты (обозванные как-нибудь MUHUPDATE()) в этих объектах через их наличие в списке.
Если я двигаю его под поверхность, то он просто проваливается. Как это пофиксить?
> Как это пофиксить?
Вариант первый: дикий костыль на скорую руку.
На месте назначения движения проверь (высота земли - высота первого колайдера над землей) и если она не вмещает высоту перемещаемого объекта не двигайся туда.
Вариант второй: еще более дикий костыль, но с привкусом мышки редактора.
Вокруг(рядом, снизу) объектов под которые объект не может заехать из-за габаритов поставь еще колайдеров вида стенка.
Пробовал, не канает.
>(инстанцировать через new)
Так, паддажжи, ёбана. Разве SO - это не такая .ассет-хуйня, которая лежит в файлах игры(в асстах) и не может быть создана в рантайме?
Лютое дело? Нужно шарить в геометрии?
мимо3дмакак
Там у юнити вообще, судя по всему ничего в рантайме нельзя создавать, а не то юнитеки по ручкам надают и пожурят, нахуя ты кодишь, когда ассетфлипать нада?
Нахуя тебе шарить в шейдерах? Скачай готовый ассет воды всего за 35$ базарю, ещё захочешь.
>Лютое дело?
Да не очень. Шейдер это посто программа определяющая цвет пикселя. Передавай ей на вход геометрию, текстуры, свет, окружение, время и вообще любые нужные данный и все будет.
>Нужно шарить в геометрии?
Скорее в математеке надо шарить. Интерпояции, вектора, правильный расчет лода, вот это вот все.
Из геометрии в шейдарах есть стадия геометрического шейдера, но в нем не ничего сложнее треугольников на выходе и произвольных данных на входе. Можно процедурно сгенерировать произвольный мешь и сразу его нарисовать. Фича ограниченно пользуется для систем частиц и генерации всякой несложной типовой геометрии, но на старых девайсах она не заводится.
И да анонас тебе правильно говорит, купи лучше нужный шейдор за $5 в ассет сторе это позволит съэкономить прото гору времени на отладку и тесты.
Не знаю, но предполагаю, что пол имеет более высокий приритет чем наклонная поверхность из-за вектора гравитации.
Есть некоторый объект стоящий на другом объекте, чтобы правильно разрулить их коллизии нужно взять самый первый объект в иерархии против вектора гравитации, объявить его "неподвижным", а все остальные вытолкнуть вверх. Так касула "стоит" на земле после первой итерации физики. Потом внезапно она становится вторым объектом по вектору гравитации который нужно решить а решать ее нужно со всеми обектами что остались выше ее. И тут проихдоит майндфак - выше объект тоже закреплен и неподвижен и его выталкивать навех нельзя, значит надо двигать капсулу вниз, под землю. Капсула погружается под землю на второй итерации физики. По хорошему физику следует решать до тех пор пока не будет пересечений по всякому протбуя растолкнуть объекты, но можно ведь и не решать, а принять, что за N шагов будет достигута нужная точность решения "снизу-вверх", если моделировать простую гравитацию.
Видишь ли о мудрый Каа, при рассчете физики, сколько по твоему коллизий будет у наклонной и горизонтальной поверхностей на единицу времени ?
Про то что проваливаться при континиус вобще-то не долно, скромно умолчим.
Нет так делать неправильно, но для прототипа сойдет.
>монособачему
>монопсины
Рот с мылом помой.
>начинаю крутить колесо, срабатывает функция SolarSystem.ReplacePlanet(this.planet) из монопсины
А почему в таком случае не срабатывать приближению камеры в обнимочку с LOD'ом (или еще какой резиновой женщиной самопальной лод-системой)?
>Правильно ли так делать
Ну вот можно так делать, можно так не делать. Правильно это вопрос контекста. Идея с камерой тоже ни "правильная", ни "ошибочная". Или ты говоришь о том, что юнити-объект пересоздается когда мог бы и не пересоздаваться? Тогда ты должен быть твердо уверен, что сможешь бросить изменить поведение в любой момент - и не бояться теоритических тормозов.
Что, блять, значит "не должно"?
1. Переключить на континоус
2. Запустить и проверить
Что я, по твоему, упустил?
В чем наебка? Есть какие-то масленные места и схемы заработка, которые я упускаю? Почему все так упарываются по геймдеву и дрочат эти ваши юнити?
>пару лямов рублей на маркетинг
А что ты с ними делать будешь? На объявления в фейсбуке пустишь?
В гейдеве и радиоэлектроннике работают ебанутые фанатики, потому такие маленькие зарплаты и такое отношение работодателей.
Твоё говно тяжёлое по по вычислениям и разрушится от первого рефакторинга. Включать компонент один хуй тяжело, что юнити будет его включать, что ты в коде.
Только когда написал простыню текста понял о чем ты говоришь. Мысли ты выражаешь ужасно. От этого страдает и твой код. Твоя идея рисовать по минимуму верна, но сделана плохо.
Я так понял у тебя есть куча планет со своими свойствами, но видно только одну и можно переключаться между ними через скролл?
Может такое есть? Ну скачатъ список ВСЕХ ассетов в текстовом формате мне для парсинга. Ну а по сути я просто хочу
1. Мне уже чисто интересно, сколько ж их там вообще? 1000? 10000) МИЛЬЯРДЫ?
2. Наверняка из них всех если отфильтровать все с рейтингом меньше 3х, меньше 10 лойсов и обновляемые хотябы раз за этого год то останется не так уж и много. Можно пересмотреть за неделю.
Или может есть какой-то внешний сайт с табличками итп?= Или у них есть более продвинутый поиск по ассет стору?
>В чем наебка? Есть какие-то масленные места и схемы заработка, которые я упускаю? Почему все так упарываются по геймдеву и дрочат эти ваши юнити?
Как и везде, работодатель согласен платить не больше чем суммы, на которые соглашаются работать соискатели. Ты хочешь получать от 80 и выше, но вокруг куча народу шарит поболее тебя и готовы работать за 20-тку. Ты сидишь на жопе и сосёшь хуй, либо соглашаешься на 15-шку.
1. https://assetstore.unity.com/search/?k=type:content&order_by=relevance&q=type:content&rows=42 x1154 страниц это 48к - скоро юбилей
2. открой браузерную консоль, напиши скрипт
И очень большая ошибка ориентироваться по звездам. Ассет свыше 50 баксов очень часто оказывается оверинжиниринным говном, которое заражает пользователей Стокгольмским синдромом. И есть крутые ассеты которые или новые, или не раскручены автором.
Да, я понимаю что метод не идеален. Но как еще? Просмотреть 48к ассетов вручную, каждый скачатъ, потестить и потратить недельку на вдумчивое чтение туториалов, ютюб роликов и пиление небольшого прокетика? Такой способо подходит для изучения ЯП или библиотек. Но вот разобраться в 48к юнитипакетов таким образом времени не хватит.
Есть. Учить UE, С++ и разные сложные темы новичкам недоступные. Всё как всегда в итоге. Алсо, тут бабло есть только у издателей и владельцев, идти сюда имеет смысл только если твоя цель в итоге стать одни из.
Сообщения в консоли тебе религия не позволяет посмотреть?
Я так не понял что ты хочешь сделать. По скролу на планете что должно происходить?
В любом случае в ECS планета/вся солнечная система это сущность с кучей компонентов, если для разных удалений(я так понял у тебя на это скрол завязан) нужно отображать разную инфу, то просто включай/выключай нужные компоненты отображения без ее реального пересоздания(по сути такое поведение это самопальная лод-система, ее можно будет потом отдеить от планет).
Ой вэй не понял вопроса.
Зачем ковыряться когда там уже все разжевано ?
Зачем работать на чужого дядю если например ты даже поспать норамльно не можешь ибо идей столько что натурально рвут крышу ?
Лепи поделия пхай на маркеты индигогопатрены и прочие кикстартеры.
И будет тебе (если ты художник хотя бы в музыке и графоне) стабильный доход.
Короче, теперь разбивай куб на квадраты и шумом перлина поднимай вершины куба случайно
Примерно вот так:
https://youtu.be/gIUVRYViG_g
Мимо анон
есть лол
но ты ведь имеешь ввиду бесплатных рабов которые будут рисовать по твоей прихоти и твоему быдло кодерскому вкусу
а потом ты всё равно дропнешь проект и все отрисовкачасы пойдут по пизде
таких нет, извеняй
зачем мне рисовать твои идеи, когда я могу рисовать СВОИ идеи
мои идеи-то получше а твои говно
Я по ассет стору шарился много. Понимаю его мощность, и когда надо что-то найти - рука набита, посмотреть 10-50 страничек могу быстро (внутрь ассета заглядывать далеко не всегда надо). Правда, посмотреть - не факт что найти, т.к. 48к поделим на тематики, да на стилистики, да на применимость к текущим ассетам... Короче, когда будет 480к будет хорошо. Но, как бы то ни было, когда смотришь массив ассетов, часто новые идеи появляются (порой даже легкие в реализации). Так что очень рекомендую уделить время на изучение части стора.
Это же лишь твои догадки.
Да и не бесплатно, а за общую идею. :^)
Да и плюс твои идеи могут перерасти во что-то более комплексное, найдя ты хорошего программиста на unity.
https://unity3d.com/ru/learn/tutorials/topics/physics/physics-best-practices
Где сказано, что, мол, лепи ригидбади, коль коллайдер двигаешь.
Ну налепил я их и шо я таки в итоге поимел - ~85 fps вместо ~120 без них.
Где я проебался? Кинематик поставил.
Ворнинги, кстати, без ригибади, тоже не видел. Объекты с коллайдерами двигаются.
>в итоге поимел - ~85 fps вместо ~120 без них.
>Где я проебался?
Ты проебался в том, что думал, будто симуляция физики обойдется тебе бесплатно или сущие фреймы, а оно вишь как. Теперь ты много задумаешься, нахуя игроделы такие трюки выдумывают, как знаменитый поезд-шапка у Тодда.
Так, паддажжи. Мне простой коллижн-детект нужон и я использую коллайдеры. Умные дядьки написали типа нужно присрать еще к каждому коллайдеру ригидбади обязательно и будет пиздато, а иначе пиздато не будет и пидором станешь. Но на деле все наоборот получается.
Поздравляю ты купился на разводку, как наивный дурачок. Смотри не нарушь закон, а то на зоне сразу же петухом станешь.
Не мороси ебана. Чтобы столкновения детектить, рижидбоди нужен только на одном из двух коллайдеров. Лучше распиши чего ты пытаешься добиться и тебе пояснят как лучше можно.
Сраннер. Бьюсь за производительность, но без крайностей с велосипедами.
Он дает возможность твоему скрипту как бы выполняться в нем.
Но ты можешь не юзать апдейт.
>>34768
>все это как-то
Что именно ?
Можно то много всяких штук, от простигосподи синглтонов до экстентов через статик класс всего и вся.
>сама игра
сама игра это как раз твои скрипты а юнька от себя дает только обвязку орхитектурой и рендер.
Ты не очень понял, что такое юнити. Это вот такие штуки подключаемые https://assetstore.unity.com/packages/3d/animations/horseman-animation-collection-11545 , а для "мне только рендерить" бери https://github.com/Izzimach/react-pixi и не выебывайся.
Пост-эффекты. Только не перестарайся, а то https://www.playground.ru/blogs/battlefield_4/6_naibolee_uzhasnyh_graficheskih_effektov_kotorye_nuzhno_ubrat-140420/ получится.
https://assetstore.unity.com/packages/vfx/shaders/alloy-physical-shader-framework-11978
Я твою игру уважаю, но это совсем не приличная коробка из UE. Просто не совсем хуевая картинка с минимумом пост-эффектов и плохо запеченым амбиентом.
fillTexture.Apply();
EditorUtility.SetDirty(fillTexture);
AssetDatabase.SaveAssets(); [/code]
посоны, почему текстура всё равно остается в Clamp-warp-mode
чяднт?
Из инспектора всё работает.
Бро, спасибо за вежливость, но это не моя игра. Пикрил (нашелся в гугле) именно чтобы продемонстрировать было/стало. А так можем кадр из юнитевской демки https://www.youtube.com/watch?v=GXI0l3yqBrA посмотреть: глубина резкости (depth of field), очень аккуратный блюм (или даже хитрый LUT), sun shafts (хотя и не факт, что он тут пост-эффектом реализован), яркость+насыщенность тоже не "как в текстурах было" и (подозреваю) туман в зависимости от глубины.
На второй еще и хроматическая аберрация (чем дальше от центра экрана - тем сильнее), а на первой картинке её нет.
А, ну да, еще источники света как надо стоят. Тени, наверняка, везде где можно запечены (хотя я их не запекаю - не могу ничего толкового сказать). https://blogs.unity3d.com/cn/2016/09/28/in-development-progressive-lightmapper/ , https://docs.unity3d.com/Manual/LightMode-Baked.html
Ну ебана бля. Ты как первый раз штаны обоссал. Все демки всегда делаются для супер-пупер оборудования. Не удивлюсь если он риалтайм на компе со спаянной вручную материнской плате, в которую воткнуты 146 видях.
Запускал адама на одной 1080 как она только вышла(да и адам был свеженький) Вроде норм, притормаживало при ассинхрронной подгрузке в сцену всяких ресов и выгрузке из нее, и еще где пидюков овердохуя - пролагивало. Но тут вопрос не в видюхе.
И да - все эти прелести - они же без HDRP этих ващих
Хуясе бля ваще. Еще и хэ дэ рэ пэ это наше пиздец.
Как такое провернуть в юнити? Как быть с запеканием света при тайловой развертке? Прийдется юзать amplify?
Также реквестирую тулзы для рисование и обмазываения тайловых текстур для последуещего блендинга, substance painter для этого не очень подходит.
Очень странные вещи спрашиваешь. Свет падает на отдельный канал. В принципе ты их можешь юзать сколько захочешь, только нахуя? Это нужно людям чаще при расчете на шейдере какой-нибудь фигни, типа карты повреждений, где цветами выведен коэффициент хитпоинтов. Художникам это нахуй не надо, и лучше не трогать - делать красивую одноканальную развертку, знать, что тень расчитывается на отдельной ювишке и эить с этим.
Ясно. С этим разобрался. А по вопросу выше, про блендинг материалов не подскажешь?
сабстенс дизайнер же
В C# обычно пишу функцию
public void test()
{
Какой-то код
}
Недавно встретил такую штуку
public void test(Чота написано)
{
Какой-то код
}
Не понял, что это за штука написана в тех скобочках. Что это дает, как называется? Прошу помощи, вдруг у тебя анон получится обьяснить человеческим языком?
Если не сложно обьясните, как эти штуки в скобочках использовать и для чего например?
Это (Чота написано) аргументы функции для передачи каково либо значения в функцию, ты что основ не знаешь?
Бро. Это, как тебе уже написали, аргументы. Если ты где-то (в другом, или в том же самое скрипте) вызовешь .test() - исполнится первый метод (метод это функция-для-объекта), если напишешь .test(чёта) - исполнится второй метод. Но. Как бы это тебе сказать помягче. Я забыл порядок цветов радуги и таблицу умножения для восьмерки - подсоби, будь добр. Иди в официальные туторы юньки и учись, нехуй тут эфир засорять.
Купи книжку по программированию для самых маленьких и прочитай ее перед тем, как к компьютеру подходить.
Спасибо
Спасиб.
Запускаю.
Падает.
Окей.
Кидаю на сцену спрайт. Прикрепляю к нему 2д-статикбади.
Запускаю.
Падает. На 5-10 пикселов входит в статик, затем выталкивается обратно.
ЧЯДНТ?
Открой солюшен, изучи ссылки. Скопируй на флешку библиотеки по ссылкам.
Юнька в своем репертуаре. Можешь на https://docs.unity3d.com/Manual/ManualVersions.html тыкнуть "Report a problem on this page". Им будет похуй, зато ты еще долго сможешь рассказывать, ну какие же они пиродасы.
Неужели никто не пробовал?
Хотел в будущем построить сорт оф спектрограммы, нужен тупой брутфорс миллионых списков, с многопоточностю мало знаком, и если юнити дает тулзы для ленивых которые нагрузят все потоки под завязку бесплатно без смс то я готов ими воспользоваться.
Хотел этим вот назначать WAAGH через инпут филд:
if (int.TryParse(waaghbar.text, out int value))
{
if (value < 0)
{
value = 0;
}
selectedOrc.WAAGH = value;
}
И все заебись рабтает, да вот только изменения не отражаются в инпут филде, потому что у меня много оркоты и у каждой разный ваагх.
Когда я пытаюсь повесить вот такую хуйню в апдейт:
if(selectedOrc)
{
waaghbar.text = selectedOrc.WAAGH.ToString;
}
по идее эта хуйня должна вытягивать из орка его текущий WAAGH, если я его выделил и пихать его в инпут филд.
WAAGH изначально нуль, в процессе игоря он поднимается, ну и опускается.
И оно действительно вытягивает, просто спамит этот ебаный нуль и я не могу воспользоваться инпут филдом вообще. Мне кажется зря я вообще в Update такую хуету тащу. Навесить апдейт гуя на сам селект пробовал, но почему-то обычный дебаг лог подтверждает что все работает и оркота выделяется с первого раза, а вот вызов апдейта гуя работает только после повторного выделения.
Решил булевым костылем, который запрещает эту строчку, когда когда триггерится onValueChanged и разрешает, когда триггерится onEndEdit, но наверняка есть другие способы, получше?
Уточку купи
public static class ChmoExtension
{
public static void TrahnutMamku(this 535301.Mamka whore, penis elda)
{
whore.Insert(elda);
}
}
а не проще отдать рисование такой хуйни видеокарте? она явно лучше с этим справилась бы.
Вот никогда не понимал этой демпинговой логики. Занимаюсь исключительно VR-ом последние 4 года. Бывает звонят - фрилансер нужен, сроки две недели, работы на пару месяцев если в обычном режиме, тз почти согласовано, есть графика почти вся... Озвучиваешь ценник - мол час столько-то, спать времени не будет, я не враг здоровью, потому еще и за это сверху возьму. А тебе "по рынку в среднем дешевле, есть ребята, которые за еду работают" и прочее прочее. В итоге твоя цифра отличается от цифры заказчика почти в 10 раз. Они тебе про тридцатку за две недели марафона(!) а ты им про три сотки.
А итог всегда один - звонит менеджер, что твой корешь - и говорит, что "из-за тебя сорвали проект, что ты не взялся и попали на штрафы в пару лямов". Жиза. И такое 4 раза за последние пол-года. Все эти менеджеры любители фрилансеров придумывают себе каких-то разрабов, которым можно платить по 10ке в неделю - и это типа средняя по рынку.
Не ведись - плюй в лицо тем, кто несет чепуху про фантастически дешевых разработчиков. Их нет, не было, и если ты не будешь дураком - не будет
Лучше работать на дно работе по фиксированому графику без переработок чем не спать ночами и выжигать глаза кодом.
О том и речь. Уже дошло до того, что ценник фрилансерам выставляют при сжатых сроках расчитывая цены исходя из зарплат на местах. Разница да - ты спишь и имеешь рабочий день (кроме дедлайнов, но в нормальных конторах за это приплачивают), можешь отлучиться на пожрать в рабочее время, может развеяться и заняться чем-нибудь ненапряжным, благо это в офисе всегда понимают, порисерчить в конце концов, почитать литературу по работе. А тебе на вышеперечисленное - "все это несущественно, ты же все равно без работы сидишь". Потому ценник исходя из минимальной ЗП, найденной на хедхантере за джуниора. Платят ему 70к - значит две недели на фрилансе - 35 и неебет. Таких надо сразу нахуй слать и вообще ничего не обсуждать. На твою цифру - "мы такое в бюджет не закладывали, и вообще заказчик бы отказался, если бы мы дороже сказали". А почему это должно быть головной болью разрабов?
Играем в "менеджера долбоеба"?
- У нас есть ребята в регионах и для них это нормальный ценник. Не знаю почему тебе должны платить больше
>- У нас есть ребята в регионах и для них это нормальный ценник.
Ваще лол, я работал реакт разработчиком удаленно без переработок и с адекватными сроками, мне платили 25 000 рублей.
>Не знаю почему тебе должны платить больше
Может быть по тому что у вас не таких ребят которые работают за миску супа.
Это за какую единицу времени?
По поводу второй части. Именно. Потому схема работает в виде торга, только в обратную сторону. Тебе озвучивают ценник, ты закладываешь все свои траты и время и озвучиваешь немного с запасом. Тебя шлют нахуй. Через неделю перезванивают, мол так и быть, ты заебал, сроки горят, но мы кое-как выбили денюжку на тебя. Но ты озвучиваешь уже ценник больше ибо неделя прошла и значит ебашить надо усиленнее, чтоб уложиться(что логично)
Нет.
Вот смотри сталевар отпахал выплавил котел металла и получил свою тридцатку.
НО !
Его работа это капля в море остальных работ делаемых другими людьми.
Тут вас приглашают делать игру и платят по часам, а потом пиздос спасибо что отлизали ?
Да с какого члена ?
Все кто пахал на игру режут бабки с пирога продаж в пропорциях и никак иначе.
Хитровыебаные пидоры манагеры пусть идут нахуй, посмотрим как они сами ззаебашат игру, посмеемся.
Никто так не работает - не поверишь. Есть люди, которые ответственны за происходящее перед инвестором или владельцем, есть команда, нанятая наработу. Тут не Пало Альто чтоб при устройстве на работу выделялся депозит, подъемные и опцион от доли в проекте. Люди работающие на опционах - обычно просто работают там, где нет денег на разработку, а значит что нет инвестора, а значит - проект говно и это индишкольники из телеграм канала @Govnodev
Ну как сказать, было дело пердложили написать магазин онлайн.
Сразу поинтересовался про мой процент, строго по Марксу ни копейки лишнего.
Сказали хренте в грызло.
Ну окай отказал, насколько знаю магазин они себе так и не слепили.
Сижу в уютной юньке, имею тридцатник чистыми.
Собрались втроем слепили системку на отвали бабки попилили, всем хорошо, манагеры сосут, туда им и дорога.
А про ответственность, смеюсь с такой ответственности, Готику грохнули, дохрена игр грохнули, какие то вобще закрыли.
Денег вбухано немерено.
Манагеры отделались общими словами и легким испугом.
Да лет 30 назад, а че ?
Штрейкбрехом и не пахнет. Я за то, что разраб, получающий 30ку и при этом не совмещающий со школьной скамьей не особо имеет право рассуждать о проценте каком-то в принципе. И обвинять кого-то в штрейкбрехерстве тем более.
Тактактак, что-то ты меня смутил прямо.
То есть вот давай подумаем.
Вот пустое место.
Вот появился манагер и подумал, а не замутить ли игру.
Вот пригласил команду из пяти человек.
Обратим внимание что (в упрощении) кроме еды, электричества, и оплаты места проживания других амортизаций просто нет.
Нет завода построенного тучей людей под скользящие займы, нет тучи обслуги этого завода, нет закупки ресурсов ...
Вот игру выпустили и она снискала лавры и всеобщую любовь (упрощаем)
В каком отношении надо делить прибыль между этими шестью человеками (ну ок добавим бухгалтера и юриста) ?
Есть инвесторские деньги, ответственность за них, офис обставленный чтоб было комфортно, оборудование, компы, софт, деньги на корпоративы, реклама(!), серваки, сисадмины и прочий стафф аля эсэмэмщики и даже уборщицы, поддержка, и зп не исчесляющаяся в говяжьих анусах как у тебя, а позволяющая тянуть семью прикинь, два ребенка в частном детском саду - это 70к в месяц, тачку, ипотеку и отдых.
И про шесть человек - ты дебил? Не бывал в студиях по 60-100 человек?
И снова жирное такое, НО.
Пусть инвестиций будет лимон баксов, а игра очевидно взяла десять лимонов на продажах.
Как теперь делить ?
Даже с учетом амортизации этого лимона под божеские 30 процентов.
Нет если зарплаты овер тридцатьтыщбаксов, вопросов нет.
>>35394
>И про шесть человек - ты дебил?
Ойвэй, разве я где-то сказал что это ММО грейд ААА ?
Так что 6 человек это еще по божески.
Но отыскав алмазов неграненых в количестве трех человек (график, музыкант, сценарист) и при этом каждый может в хоть какой-то архитектурный програминг, получим тоже самое что и с десятью посредственностями или пятнашкой омежек с манией величия, а по факту ремесленников.
Мне тут на днях 5к рублей в месяц предлагали, типо стартап, денег, все такое.
Ты какой то фантазер. Такие вопрсы решаются при найме, договор называется. Или ты подписываешь один договор в стиле "обоссыте но наймите" а потом требуешь 100500 денег за процент от взлетевшей игры?
Что ты за хуйню пишешь? Я тебе говорю, что есть на рынке клинические идиоты, что демпингуют рынок своими услугами в три-четыре раза меньше среднего по рынку - ты мне говоришь, мол "я такой, но это норм, а вообще я хочу процент от пары ляма баксов"? Ты поехавший, или реально школьник-тралль?
>Не бывал в студиях по 60-100 человек?
Представил Скайрим над которым работали хотя бы половина от этого числа, но не ремесленников а настоящих художников.
Эххх.
Ненене, про процент это не ко мне, а к другому долбоебу. У меня прайс фиксированный почасовой, если не согласны - ищите меня же на апворке, и я его вообще не обсуждаю в меньшую сторону от слова совсем. И вообще среднее по рынку 35 бачей в час для мидла, 50 для сеньора. И не занимаюсь я играми. Я блядь код пишу. И да, он для игр. Концепция не важна, идея, игра, проект. Мне за код платят, а не за участие в какой-то игре. И очень огорчаюсь, когда мне говорят, что мой ценник переоценен в несколько десятков раз и показывают анкетку долбоеба, пишущего про 5к
рублей
Сукакакжеуменябомбит.
Охуенно про "ты нам сроки сорвал, мы попали на штрафы".
Русская культура всегда нахаляву и побыстрее.
Что ты там эхаешь, фантазёр? Не было бы игры, была бы параша в которой за графоном не было бы геймплея. Титры. Едешь на физически корректной телеге в Хелген. Во рту у тебя детально прорисованный кляп. Кинематографическая камера постоянно тычет тебя в этот кляп с понтом "посмотри, посмотри какая красота!" Так же камера кинематографично тычет тебя в кинематографически идеальные рожи воров и Ульфрика, сидящих в телеге. И тоже постоянно как бы демонстрируя тебе, "смотри как колышутся на них наши тряпки с детализикованными 16К текстурами! Смотри какой физон ткани!"
мимо из тесача, насмотревшийся за прошедшие годы на оверхолы вот таких вот настоящих художников
Против клинических идиотов с демпингом только профсоюзы помогут. Ну, или хотя бы какие-то организации, которые смогут насильно заставить потребителей пользоваться только услугами от поставщиков, одобренных этой организацией. Иначе студенты ради доширака зарплаты так и будут обваливать.
> была бы параша в которой за графоном не было бы геймплея.
Ты наверное играл в скурим с овердохрена модов ?
А машинку какую прикупил чтобы не плеваться на тени ?
А тени и в старых играх были местами огого.
А то что у меня в первых же кадрах на полчаса отобрали управление ?
Это как назвать ?
Если мне нужна кинематографичность я пойду в кинотеатр.
В игре мне нужена игра, блят.
Хорошо замаскированная нелинейность, а не набор сгенереных простейшим скриптом квестов.
Криво понапиханые везде однотипные кривые префабы (ну вот яхз чем они все это время занимались)
Физон ткани, ойвэй это не их заслуга, там же вроде физикс от нвидии, так он и в ActiveWorlds за 2000 год нормально фурычит зайди проверь http://activeworlds.ru
Куклы как были скриптовыми так и остались, анимация жуткая.
Долбаная реклама мимо которой вобще никак не пройти было и которая похерила всю изюминку, АУНАСДРОКОНЫ !!!! гребаные манагеры решили бабла нарубить козлы.
Это не игра, блят, а заготовка под допиливание модами.
Кстати, лет 10 назад, до переезда в ДС, когда был работягой(доки, ремонт кораблей) - организовывал независимый профсоюз. Для организации нужно а)6 человек - руководство, отчетно-ревизионная комиссия, пара членов. б)регистрация банкоского счета фонда для пожертвований(обычно это юристы, у олдскульных это плюс переодика печатная, которая в 21 веке нахуй не нужна) в)актив, готовый подорваться разок в неделю на встречу/подписание трехстороннего договора вместо двухстороннего, или вызванивать демпингующих, чтоб поговорить "по душам"
Вообще не так уж и сложно
Моя игра в поиске на 300+ месте, никто ее не найдет через поиск, конкуренция высока.
В итоге я выложил её и что? И хуй. Никакого почти траффика, установок, ничего. И как в таком случае быть?
Почему какие-то пдоры выкладывают говно из ассетов и у них сразу неебаца трафик установки есть и все такое?
Сто раз уже обсудили. Грамотная реклама и пиар. Потребители говна в мобильных магазинах не умеют в поиск, они просто, без задней мысли тыкают установку того, что у них перед глазами.
Э, а причём тут "не за большие бачи"? Я такого не говорил. И примеров на то, о чём я не говорил - приводить не собираюсь.
Предположим есть планета, которая удаляется, становясь меньше и меньше, пока не станет выглядеть как точка.
Как лучше эту точку сделать?
Дядя ты бы что ли тактику и стратегию почитал.
Смотри сам просто навскидку:
Агрессиваня реклама.
Вмрусная реклама.
Продвижения через всякие соцсети.
Продвижение через всякие краудфанды типа индигого, патреон итп.
Ну а как ты хотел ?
Зато когда наберешь аудиторию с дальнейшим продвижением новых продуктов проблем не будет.
При условии что у тебя действиетельно что-то стоящее, денежка найдет своего владельца не сумлевайся.
Даешь рекламу на picabu, yaplakal и других ресурсов и скачивания тебе обеспечены.
>>35525
>>35519
Ни один из методов не работает. Траты на рекламу в соцсетях никак не окупаюются. С видео перешедших вообще нет. Если готов пару сотен тысяч выкинуть на ветер, и разочароваться - пожалуйста.
Алсо есть целые ресурсы посвященные монетизации, рекламе, метрикам.
"Манагеры не нужны", - кричали школьники. "Вы тупые, и нихуя не понимаете что делаете" - отвечали им цифры
Подскажите, есть методики или бест-практисы про то, как связывать программный код поведения ИИ с системами анимации, озвучивания и т.д. и т.п.?
Например, у меня реализуется поведение монстра через машину состояний, но я понятия не имею как по-уму сделать проигрывание анимаций "вступления" или "завершения" при переходе из одного состояния в другое, так чтобы часть поведения как бы блокировалась, пока проигрывается анимация. Что-то вроде: сначала скелет собирается по кусочкам, потом включается логика поведения; но ничто не мешает замочить NPC во время его "простоя".
Можно тупо брать и прямо в коде прописывать бесконечный return пока какой-либо анимационный клип не завершится, но это кажется слишком грубым вариантом и в итоге для каждого отдельного ИИ надо будет индивидуально описывать алгоритмы сопоставления машины состояний анимации и поведения.
Хотелось бы знать какой-то проработанный гайд по тому, как реализуются те или иные шаблоны связываний логики поведения и логики внешних признаков.
На гдач набижали тролли?
Уже во втором треде машиной состояний срут.
И тут я такой типа кормлю: Ты вообще понимаешь, что такое машина состояний? Это линейная последовательность состояний. На вход её может подаваться любая логика, хоть линейная, хоть древовидная, но сама машина работает линейно. Пример:
(есть питание) собираюсь - (есть питание) собираюсь - (нет питания) жду - (есть свет) впитываю - (есть питание) собираюсь - (собралось) ищу врага - (враг не найден) ищу врага - (враг не найден) ищу врага - (нет питания) ищу питание - (есть питание) питаюсь - (нет врага) ищу врага - (получаю урон) прячусь - (получаю урон) прячусь - (вижу врага) атакую врага - (вижу питание) питаюсь ...
Вот так работает конечный автомат. На него могут влиять тысячи факторов, но в каждый момент времени КА берёт сумму факторов, влияющих на него и переходит в соответственное этой информации состояние. Факторы могут быть как внешние (атаки, угрозы, погода) так и внутренние (жажда, голод, распорядок дня).
Соответственно, переходу из состояния в состояние могут отвечать графические эффекты типа анимаций, замешанные в т.н. блендспейсы. Они в отличие от КА не линейны. На персонаж воздействует команда идти вперед, он отыгрывает анимацию ходьбы вперед, внезапно команда идти вперед сменяется командой идти вправо, КА персонажа мгновенно переключился в режим ходьбы вправо, но блендспейс анимаций плавно смешивает анимации вперёд и вправо, таким образом, что модель персонажа красиво перестраивается с ходьбы на смещение.
Точно так же моб из абстрактного примера выше, он может ползти и жевать мертвечину в спокойном состоянии, но завидев ГГ он плавно перестаёт жевать и выпускает стрекательные тентакли, плавно меняя траекторию движения, хотя КА его ИИ уже десяток фреймов назад переключилось с "питаюсь" на "атакую врага".
Про динамическое связывание мне всё понятно, для этого есть переменные и триггеры в аниматоре.
Я скорее имею ввиду статическое.
>Точно так же моб из абстрактного примера выше, он может ползти и жевать мертвечину в спокойном состоянии, но завидев ГГ он плавно перестаёт жевать и выпускает стрекательные тентакли, плавно меняя траекторию движения, хотя КА его ИИ уже десяток фреймов назад переключилось с "питаюсь" на "атакую врага".
Вот-вот! На словах все просто, а КАК ручками это прописывать в общих чертах принято у пряморуких проегров? Простая статическая анимация типа прожевывания кишок просто описывается в контексте поведения как пустой стейт что ли, в котором в точке входа просто запускается анимация?
А если надо описать поведение транформации босса, н-р, ему был нанесен критический урон, и он переходит в другую внешнюю форму. И при этом заморозить и поведение и реагирование на внешние воздействия, то это делается в каком месте? До перехода в новый стейт или при входе? И как стейт должен отслеживать, что анимация сыграна и можно "начинать"?
Еще раз уточню, мне бы желательно какие-нибудь ссылки на гайды или лучшие практики, где аккумулируется опыт игровых программистов и аниматоров.
Гугл отсылает только к основам анимации в Юнити.
бету скачай, там поменьше пиздец с этим
Можешь, плиз, тезисно рассказать как жить-то? Потому что я понимаю, что маркетинг нужен. Но больше ничего не понимаю. Кеймейлер, стимгифты и общение с общественностью к Большому Успеху не приведут.
Только для всякой мелкой шляпы типа звуков шагания... Едва ли можно прикрутить к чему-то более серьезному. Где-то находил анализ производительности событий анимации. Цифры печальные.
Никто не запрещает тебе написать свои эвенты с прямой подпиской, используя StateMachineBehaviour. Отслеживаешь кадр анимации, вызываешь нужную тебе функцию напрямую в нужный момент, профит. Только на переходах там что-то мутное было, но в целом я так очень многое на анимацию цеплял.
ИМХО, ты просишь на пальцах описать тебе сложнейшую область компьютерного моделирования (подчёркиваю, не игрового). Тут не может быть простеньких туториалов.
>>35668
Пока ищу только руководства по тому, как в контексте Unity по-человечески связываются две сущности: отдельная машина состояний ИИ и машина состояний анимации.
Изначально все начинал с описания логики в апдейте МБ. Т.е. NPC описывались просто. Когда пришлось придумывать что-то посложнее, созрел до описания машины стейтов. А теперь приходится реализовывать еще более сложные в поведении игровые объекты, и тут я уперся в стенку, так как не имею понятия, как с нуля придумать универсальные правила связанной и согласованной работы системы внутренней логики и системы внешних признаков.
Изучай апптрактор, там профкомьюнити небольшре есть касательно продвижения.
Полюби цифры, все эти метрики вроде CTR, CPM, средние сессии, и
прочее прочее.
Если занимаешься мобилками - ищи самые хайповые истории, пиздуй на appannie и sensortower и займись эксперементами с покупкой мотивированного траффика. Самые хайповые вещи относительно монетизации пользуй(киты если платят сечас за лутбоксы - встраивай лутбоксы, если мода на видеорекламу мотивируемую - в нее)
Касательно комплуктерных сторов - юзай хайповые темы, эксплуатэйшн, собирай денюжку на партеоне
А вообще да, искать вопросы касательно продвижения в отечественном нете - можно, но немножко.
>касательно продвижения в отечественном нете
Самостоятельно выложить свою игру на трекерах. Единственное возможное продвижение в нищерунете.
Имелось ввиду про отечественные новости и комьюнити про продвижение.
И да, публика платит и за подписки и за лутбоксы, да и игры покупает за фулпрайс. У нас ситуация средняя по рынку. Не надо принижать отечественного покупателя
Стор, как раз, кампутерный. Но проект рядовой, хайповой темы нет (я стараюсь и делаю его на совесть, вставляю всякие маленькие фишечки и очень хочу чтобы людям нравилось в него играть). На всяких редитах надо по тематическим разделам размещаться? Помню, что размещался на реддите в геймдев-прогрессе, и в твиттер скриншот-субботу юзал, но очень неуверен, что с этого был толк. Или я за тремя соснами леса не вижу?
Реддит - фигня. Меня там утопили в лайках а профита ноль. Твиттер, внезапно, неплох.
>Не надо принижать отечественного покупателя
Новости давно читал?
https://2ch.hk/news/res/3974935.html (М)
Я тебе про цифры и статистику, а ты мне какой-то политач несешь. Давай, выходи уже из манямирка, и делом занимайся. Тебе наверное комфортно, сычевать и читать, что все вокруг хуево и у тебя никогда ничего не получится. А кто-то читает другую литературку, источники, и у таких людей вероятно, больше шансов сделать что-то полезное и как-то свой потенциал реализовать, не думаешь?
Я думаю, когда ты заработаешь больше, чем на дошик, к тебе придут в гости и попросят поделиться. И они будут очень убедительны.
Ебать ты контуженный. Манямирок на грани с шизой и паранойей. Больше чем на дошик - это сколько? За пять лет проганья успел взять в ипотеку трешку внутри ТТК и до НГ ее закрою. И что-то никто не пришел за долей какой-то. И не прийдет. Потому то эти люди не живут в моем мире - они живут в твоем. Скорее даже - в твоей голове.
Сарказм неуместен
Не придут. Обезьяны приходят за теми, кто им понятен и у кого можно это дело отжать.
А программист им непонятен, сидит какой-то сыч и клацает по клавише весь день. Как он деньги вообще зарабатывает? СЛОЖНА, пойду лучше у ашота ларек отожму.
В твиттере я любил разбавлять теги типа #gamedev тегами в духе #handdrawed , #pcgame , тегать что изображено на картинке. Все правильно делал? Нет?
как мне автоматом присвоить материалам текстуры?
не вручную же несколько текстур в каждый из сотен материалов пихать.
текстуры там хранились в .dds в разных каналах, я их повынимал и сделал в .png
да, я видел, что можно авто-найти, но только дифуз, а остальные карты, типа нормали, спекуляра - хер
А куда отсылает ютубчик ?
А для сравнения бы еще картинку из констракта.
>ихние SpeedTree
Ой мамо.
Во первых зачем тебе ихние ?
Во вторых нормальный спидтри я не видел, особенно если ты по кустам шаришься.
Если только в Ризен морфинг крон неплох в одном месте, но не уверен что там спидтрее.
Анон, очевидно что ни патреон ни индигого к кпримеру твоим продвижением не занимаютсяи они сами об этом трижды предупреждают.
Ты сам должен накропать аудиторию и самое главное не профукать ее релизом.
То есть они должны сказать вау и ххотеть.
Вот после этого запускаешь уже вирусный проект, наращиваешь аудиторию скачком.
Все, дальше считай ты устроился, но само собой ровно до момента пока не попытаешься обмануть ожидания, тут с обещаниями будь очень осторожен.
Все так говорят. Но скиллуха растет - а сколько ты в рашке будешь получать? Ну 3к баксов тебе заплатят, это потолок. А буржуины клятые на апворке 50 баксов в час могут дать, общаясь с тобой через гуглопереводчик. Какой тут сон, если ты в потоке и за это 50 баксов в час платят?
3к на то и выходят.ну сколько часов в месяц ты будешь работать? Рисерч и обучение - за свое время. в итоге две недели работы, две недели простоя , поиска, обсуждения и прочего. В принципе и у нас есть места для топчиков по 200-250к.
За свои бабки покупать оборудование очень накладно. Тот же хололенз стоит около 300к. Шлемак vr с компом - около сотки. PSVR и девкит под него около 4к бачей. Leap motion - 300к... Айфоны, самсунги с8-с9, комп под былды на айось... Потихоньку этим обзаводиться можно, но В случае работы на дядю - ты можешь общаться с этими приблудами и все норм.
И опыт. На апворк люди не идут из начинающих. Они уже имеют бекграунд на гитхабе в качестве своих личных СДК-шек, плагинов и решений. Без них ты тоже нахуй никому не нужен. Как и без грамотного пайплайна разработки.
Обещания, когда первую делал, я давал аккуратно. Очень аккуратно. Можем даже сказать, что критически аккуратно. Потому что я ненавижу обманывать. Посему и патреон не рассматриваю (как-то очень много там, имхо, халявщиков и наёбщиков). А вот изначальную аудиторию где брать? Можешь пример какой-нибудь конторы написать, которая правильно себя ведет? Я вот помню создателей hunie pop, у которых на твиттере 20к живых челиков было (сейчас цифра должна измениться), но не уверен что у них правильная работа с общественность.
Как? Использовал uTiny ripper, он выцепил этот самый контроллер и он вроде даже импортируется в эдитор, но флоучарт не открывается вообще.
Ну ладно думаю, у меня же текстовое описание есть от uTiny есть, просто сделаю по нему.
И хрен! Ванильный контроллер в игре работает идеально, даже если я под завязку напихиваю его моими собственными клипами. А мой собственный контроллер - нет. При этом, они(вроде как) абсолютно одинаковые.
У них есть какие-то скрытые параметры, которые я пропускаю? Я спецом взял юнити той же версии, что и игра которую моддить хотел.
По логике смотри. Кто у тебя путь ищет, сам юнит или некий надмозг. Алсо, если серьезный проект делаешь можно вообще логику отделить от монобехайвора
Надмозг, конечно, но в ебеня идти юниту, а не надмозгу. Там в апдейте банально высчитывается оставшееся расстояние + всякие правила того, какая должна дальше анимация проигрываться (прыжок, падение, ну понятно).
Это очень легко перенести в списки и в один апдейт.
>Алсо, если серьезный проект делаешь можно вообще логику отделить от монобехайвора
Вот вопрос как раз о том, надо ли оно вообще таким заниматься и насколько оно надо.
А что по поводу создать для каждой класс-контроллер в котором описывается вариация интеракта и паблик юнитиэвент. Юнитиэвенты блядь. Стринги, хуинги - жрет все. Эту хуйню размножай рефлексией на всех детей типа кнопка, добавляй поля, параметры, инстанцируй экземпляры описанного тобой класса со всеми параметрами прямо в эдиторе сколько хочешь раз.
Вообще занимаюсь сборкой всяких музейных и выставочных тач-панелей - и подход, описания класса для всего с допполями и возможностью размножения этого всего сколь угодно раз - превращают работу с интерфейсами в сплошной драг энд дроп. Если совсем дохуя в итоге переходов и прочего получается - пишешь визуальный дебаггер - и будет тебе счастье
Так я его и не хотел же. Мне он, вообще, не нравится. Игрок купил игру - игрок играется, не купил - не играется. И я не хочу других моделей. DLC, донаты и талоны на скидку от лукавого. Именно по этому я спрашивал: "А вот изначальную аудиторию где брать?"
>"А вот изначальную аудиторию где брать?"
Выложи свою игру на торентах а в самой игре в главном меню укажи ссылку на свои реквизиты куда тебе можно заслать пожертвования, напиши что типа такого "Я делал игру бесплатно, жил в впроголодь и жрал один доширак.", я уверен люди сжалится над тобой и даже школьник пожертвует последние деньги.
Дружище, да ты ебанутый. Ты когда-нибудь что-нибудь выкладывал? Что-то заработал? Или это из разряда "хоть я и школьник, но мне лучше знать?"
>Ты когда-нибудь что-нибудь выкладывал?
Я игры не делал.
Я даю тебе ценный совет воспользуйся им, у тебя все равно нету выбора.
Двачую этого. Самые лучшие литературные критики, к мнению которых прислушиваются - не написали ни одной книги.
>>35891
Я соглашусь с мимокроком, что ты ебанутый. Ебанутый ты, потому что игроки делятся на два типа: платят за игры, не платят за игры. Понятно, что у есть исключения (например, я когда-то купил диск с фоллачем, а потом его скачал с торрента). Так же ты ебанут, потому что я ни разу не видел обсуждений геймплея на торрентах. Понятно, что напишут и "говно, не играйте", и "лучшая игра на свете". Но способ привлечения хоть какой-то аудитории... Оригинальный, интересный. Плюс, вполне адекватно закинуть на свой сайт демку, её же (+/- с модификациями) дублянуть на торренты.
>игроки делятся на два типа: платят за игры, не платят за игры.
Ты сам понимаешь что делить мир на черное и белое это черта ограниченного человека.
Если игра зайдет человеку который никогда не покупал игру то он может ее купить что бы поддержать разработчика.
Я-то понимаю, а ты спойлеры не читаешь. Один из тысячи скачавших - да, купит. По каким-то своим тараканам. А чтобы поддержать разработчика 99,99% нажмут кнопку "Спасибо". Но это не сообщество, хотя и способ собрать фидбек до раннего доступа ("Релиз всегда только один" - есть такая полуправда).
>>35522
Ты смотрел то видео? Ты понимаешь что таких как ты тысячи которые хотят продвинуть свою игру, в том видео есть епизод где рассказывается про одного разработчика который делал все, что бы продать свою игру и в итоге у него только 100 скачек со стима. Если ты выложишь свою игру у нее хотя бы будет шанс стать популярной если ты конечно не говно сделал.
Чувак тусил по будкам (или как там гейм-конфочки называются) вместо того, чтобы делом заниматься. Потусил, а публике это нужно не было. Мне гораздо больше нравится история, как несколько чуваков годами пилили игру фултаймом (ну, при первой же возможности - фултаймом), но выпустились в день в один день с началом гейм-конфочки. Причем хорошую игру запилили, даже с разрушаемым ландшафтом. Только вот 300 скачек на торренте дадут 30 "спасибо" и 3 коммента: "норм", "хуйня", "хурма". Ну постучусь я человеку, который сказал: "хуйня" - спрошу что не понравилось, а он ответит: "да всё говно". Второй скажет: "Управление какое-то деревянное". И торрент хорош тем, что можно услышать: "Управление какое-то деревянное" - до релиза в раннем доступе. Хотя, мля, для этого должны быть и специализированные ресурсы (типа /v/), не предполагающие монетизацию.
>>35910
И, как обычно, я сам нашел правильный ответ на твой не-вопрос. Вот тут хорошая подборочка: https://ninichimusic.com/blog/2018/1/4/10-places-to-find-beta-testers-for-your-indie-game . Вот "ребята" выложили демку https://gamejolt.com/games/lightfall/68206 - в топовых комментах 5 летсплейев. Фидбек за денежку - https://www.playtestcloud.com/pricing , без денежки (комментов не много, но с осмысленным содержанием) - https://roastmygame.com/
У меня маркетинг, как гвоздь в жопе, вот и общаюсь. Что-то с широкими массами делать нужно (до раннего доступа, да и после).
Объясняю, как нужно без бюджета пиарить игру: делаешь прототип, идешь к дядьке с баблом, он смотрит на твой прототип, говорит заебись сделал, дает тебе мешок бабла на завершение разработки, говорит, что теперь ты издаешься у него. Ты за мешок бабла делаешь игру, приносишь ее дядьке, дядька ее пиарит и продает, отстегивая тебе половину. Хули сложного?
Ты игру делаешь чисто для заработка или потому что тебе это нравится и приносит моральное удовлетворение?
Это реклама клуба инвесторов "Кому за 40" (или как он там у Морейниса назывался)?
Первую начал делать для себя. Потом понял, что мне это нравится куда больше, чем работать. Релизнулся. По баблу получилось больше, чем заработал бы за то же количество часов. Сейчас более-менее изучил юньку, перестал совсем уж бултыхаться в вижуале - делаю вторую игру. Вторая игра простая, без убер-идеи и нескончаемого потока оргигинальности. Потому что хочу научиться делать игры нормальные, приятные "в целом" (и за счет геймплея), не для узкой аудитории.
>Вот вопрос как раз о том, надо ли оно вообще таким заниматься и насколько оно надо.
От сложности зависит. У меня, например, все модули разделены. Графика, звук, логика, ввод. Может быть одновременно несколько указанных модулей. Могу поток ввода направлять от бота, например. Или отправлять игровые события на сервер для статистики. Удобно. Но и накладные расходы есть. Если игра не на годы рассчита то такое наверно и не нужно.
Люди на красивую картинку ведутся. Вау эффект, вот это все. Сделаешь хорошо - будут перепосчивать друг другу... Но это очень вау должно быть..
1152x800, 0:37
>>35672
Так себе затея на самом деле. Над скайримом то трудился какой-то миллион китайцев левел-дизайнеров которые скорей всего даже не подозревали о том что ещё кто-то работает над левел-дизайном. Конечно будет очень смешно если в таком сорте игр ИИ неожиданно обретёт какие-то цели и побежит их исполнять, но через час население мира уменьшится раз этак в пять. Если уж делать игры с ИИ то надо размышлять над эко-системой и прочим говном, генерацией там процедурной.
Вообще это довольно интересная тема для обсуждения - как применить хитрожопость ИИ. Сильно уж мало игр смогло.
>>35845
как заимплементил то такое?
Хитрожопость ИИ типично не стоит усилий и игроки её зачастую просто не замечают.
>Конечно будет очень смешно если в таком сорте игр ИИ неожиданно обретёт какие-то цели и побежит их исполнять, но через час население мира уменьшится раз этак в пять. Если уж делать игры с ИИ то надо размышлять над эко-системой и прочим говном, генерацией там процедурной.
Лол, напомнило:
https://www.youtube.com/watch?v=KFNxJVTJleE
а некоторые игры напротив известны благодаря хитрожопому ИИ, или тем что научили ИИ адекватно пользоваться его окружением. большая и интересная тема.
>>35969
да-а-а я отлично знаю историю ультимы. вообще надо попробовать сделать какую-то более глубокую эко-систему с асимметричным ИИ. что-то навроде ai war fleet command только от первого лица. чтобы вот игрок как джон коннор кусал роботов за пятки и собирал сопротивление, пока его ловят с вертолётами, прожекторами и вышками. было бы здорово сделать так чтобы сопротивление периодически самоорганизовывалось и самовыпиливалось об терминаторов. со всеми причинно-следственными связями. а игрок собирал своё сопротивление шарясь по помойкам и нигде не чувствовал бы себя в безопасности.
>Чувак тусил по будкам (или как там гейм-конфочки называются) вместо того, чтобы делом заниматься. Потусил, а публике это нужно не было.
А ты лучше него знаешь что и как делать, да?
>Только вот 300 скачек на торренте дадут 30 "спасибо" и 3 коммента: "норм", "хуйня", "хурма".
Ого хоть кто то скачает твою игру.
Допустим ты на торентах выставишь демо версию и что? Люди поиграют в демку и
через минуту забудут что есть такая игра в стиме которою нужно купить.
Если ты так уже хочешь прибыль, то выложи игру в стиме если по прошествии пару дней нету скачек, тогда загрузи свою игру на торенты с уже прикрученой в игре ссылкой на добровольные пожертвование. Но если действовать таким путем то есть риск что твою игру спиратят еще быстрее чем ты сам выложишь ее на торенты.
>Хитрожопость ИИ типично не стоит усилий и игроки её зачастую просто не замечают.
Alien: Isolation на харде ты конечно не играл?
на самом деле там сильно уж объёбывают игрока с ИИ алиена. все равно что элизабет приводить как пример хорошего ИИ. в Halo например был очень клёвый ИИ, в FEAR, rainworld, ждалкере. вообще конечно стелс-игры часто имеют неплохой ИИ, но часто слишком уж зацикливаются на его предсказуемости. было бы здорово увидеть что-то где если игрока схватят за жопу то с побегом у него будут очень большие проблемы.
Эта игра построена вокруг ИИ. Типичная игра нет. И то там скорее всего набор предварительно заложенных сценариев.
>>35985
Предсказуемость ИИ является важнейшей фичей. Игровой ИИ должен быть интересным и красиво проигрывать, а не быть умным.
> было бы здорово увидеть что-то где если игрока схватят за жопу то с побегом у него будут очень большие проблемы.
Ага. Большие проблемы в виде mostly negative и рефандов.
и в итоге мы имеем говно и плохие тенденции, где чётко выражена тупизна ИИ. у большинства ИИ в играх даже нет того что творит ИИ в этой новой зельде, когда поджигает палки у костра чтобы жорить ими и метает друг друга.
>Ага. Большие проблемы в виде mostly negative и рефандов.
разве это проблема? напротив - у нишевого продукта гарантирован хотя-бы минимальный успех.
>игровая индустрия стагнирует
Где? Дикий рост выручки и доходов сколько лет подряд уже? Год когда рост считается "плохим" по меркам иных отраслей был бы невероятно успешным.
> у большинства ИИ в играх даже нет того что творит ИИ в этой новой зельде
А зачем оно нужно в игре не построенной на поджигании палок у костра?
>>35988
>разве это проблема?
Гигантская. От необходимости искать новую работу до продажи квартирки.
> у нишевого продукта
У него нет бабла на сложные вещи.
>А зачем оно нужно в игре не построенной на поджигании палок у костра?
а должна ли игра быть чем-то конкретным, или пытаться доставить игроку более полноценный опыт погружения? ведь такое дело - если уж игра пытается как-то создать осмысленное окружение, то такие детали как тупой как пробка ИИ легко рушит всю атмосферу.
>Гигантская. От необходимости искать новую работу до продажи квартирки.
лол игры на кредиты делать что-ли? гранты может брать? надо быть дегенератом чтобы загнать себя в такую ловушку.
>У него нет бабла на сложные вещи.
лол бабло делает всё хуже. либо в проекте есть хуй который всё время разработки работает над ИИ, либо ИИ говно. а таких интересных личностей за бабло то дорого покупать. дешевле пару артистов-аутистов купить, которые внесут в проект более видимый вклад.
но не душу
> а должна ли игра быть чем-то конкретным, или пытаться доставить игроку более полноценный опыт погружения?
Игры - развлечение. Сложный ИИ нужен только там где он реально необходим.
> дешевле пару артистов-аутистов купить, которые внесут в проект более видимый вклад.
Вот. Ты же понимаешь суть геймдева. Фичи ради самих себя не нужны и просто вредны.
>Игры - развлечение. Сложный ИИ нужен только там где он реально необходим.
а все ли развлечения можно назвать казуальными? нет конечно. ведь существуют такие игры как тоха, что сродни сованию себе биты в задницу, или from the depths где туториал заканчивается часу этак на 500. я знаю что желающих принять челленж в виде сложного ИИ более чем достаточно. а вот желающих создать такой челленж не особо.
>Фичи ради самих себя не нужны и просто вредны.
а причем тут это? яж пишу че: большинство дрочева неверно приоритезирует трату ресурсов. есть множество причин делать так как они, но в итоге про какое-то нишевое говно слышно и через 5 лет после релиза, а очередная срань забывается через неделю.
> а вот желающих создать такой челленж не особо
Наверно потому что такие игроки играют например в шахматы против ИИ?
>как заимплементил то такое?
Указываешь юниту, куда идти -> в него вносятся желаемая точка и точка сброса. Дальше в апдейте каждый фрейм вносим в аниматор переменные (зависимость от оставшегося пути и скорости), чтобы он правильную анимацию бега проигрывал.
Но ты, наверное, про поиск пути спрашиваешь, а там у меня всё просто. Стратегия-то пошаговая, поэтому нахожу все квадратики до цели, заношу их в цепочку, юниту скармливаю связанные квадраты цепочки, когда он доходит до желаемой точки или сбрасывает свою позицию. Там в рилтайме только апдейт и то, что аниматор сам делает, чтобы анимации проигрывать. Эту систему в принципе легко перевести в рилтайм полностью, банально сделать шажки короткими, квадратики милипиздрическим и добавить автопропуск хода, если игрок нихуя не жмёт
Да, я об этом и спрашиваю, в общем-то.
Вот допустим у меня есть массив структов с несколькими базовыми (инты, флоаты, стринги, ну ясно) переменными. Стоит ли заменять его на много массивов переменных?
Нет, ты явно не об этом спрашиваешь, лол.
В общем unity ecs это хуйня, которая заменяет gameobject и monobehaviour.
Ты создаешь сущности, которые содержат в себе компоненты: идти, стрелять, есть, спать.
У тебя есть системы, которые могут работать последовательно.
Например SleepSystem.
Она берет все entities, у которых есть компонент "спать", и укладывает их спать в 9 вечера.
Или HuntSystem.
Она берет все сущности, у которых есть компоненты идти, стрелять и есть, и делает их ходить по спирали, и, если в поле зрения кто-то съедобный и живой, то стрелять.
EatSystem
Если рядом есть что-то съедобное, то сожрать.
И еще у тебя есть RenderSystem(или как-то так), встроенная прямо в юнити.
Если у сущности есть меш-компонент, то она его нарисует на экране.
И так далее.
Фишка в том, что данные компонентов лежат в неуправляемой памяти одним куском, и каждая система итерирует их очень быстро.
Из недостатков, надо курить мануалы чтобы раздуплиться, и дизайнить код специально под. Ну и сама ECS еще в очень сыром виде, и многих вещей не хватает.
А вообще можно использовать ECS только для некоторый вещей, которые прям напрашиваются. Птичек летающих сделать или рыбок, или толпу зомби.
Лучшее объяснение ECS из виденных мною.
Вот этот гражданин явно понимает о чем говорит, верьте ему.
Vector2 vec = gameObject.transform.position;
Vector2 tar = target.position;
RaycastHit2D rc = Physics2D.Raycast(vec, tar, 100f,enemyLayers);
Этот код наводится куда-то в сторону далеко вправо вверх от vec, вне зависимости от того какие координаты в tar. Судя по всему, этот рейкаст наводится на координаты относительно камеры, ведь луч двигается только когда двигается камера. Короче, я явно чего-то не понимаю, подскажите.
лол шахматы против ии.
>>36040
с милипиздрическими то поиск пути уже может начать долго занимать же.
вообще меня интересовало как организовал множественные пути, так как сам сейчас решаю схожую проблему. но это становится проблемой больше в реалтаймовой навигации, когда надо когда надо иметь штук 5 готовых путей, чтобы ИИ могло их между собой сравнивать. в этом случае тягать эти пути последовательно по одному уже не такая хорошая затея. для пошаговой полагаю гораздо меньшая.
>>36055
интерфейсы для структов как-то неочень
>>36132
что же ты. потомучто Physics2D.Raycast в качестве второго параметра принимает направление, а не позицию. вычти один вектор из другого.
> Physics2D.Raycast в качестве второго параметра принимает направление, а не позицию. вычти один вектор из другого.
Спасибо, это то что нужно.
наркоман какая рефлексия https://blogs.unity3d.com/en/2015/12/23/1k-update-calls/
сенд месседж перестает быть рефлексией после компиляции один хуй
а что ты ожидал то? очевидно что юнити подставляет туда полноценный делегат когда компилирует проект. такая всратая имплементация для эдитора только чтобы удобно было. а всякие дураки воют "ууу рефлексия ууу медленно".
производительность надо проверять в сбилженных проектах, а не в самом юнити.
> очевидно что юнити подставляет туда полноценный делегат когда компилирует проект
Не очевидно. И не подставляет. Я сейчас на пробу что-нибудь в il2cpp с SendMessage соберу и посмотрим.
> public class Hui : MonoBehaviour {
>// Use this for initialization
>void Start () {
> SendMessage("SayHui");
>}
>void SayHui()
>{
> Debug.Log("TI HUI!");
>}
>}
Транслируется в следующее: https://pastebin.com/4zCgatpS
Где чётко виден вызов к SendMessage по строке.
А это ECS для старых версий юнек зайдет? 5.3.X например
> Фишка в том, что данные компонентов лежат в неуправляемой памяти одним куском, и каждая система итерирует их очень быстро.
Таак падажжи ебана. Я не понимаю в чем смысл и иноовационность.
Вот у нас есть УСЛОВНЫЙ юнити, вот у нас наспаунились геймобжекты. И вот у нас есть ТОЛЬКО компоненты ЯВСЕХЖРУ, УМЕНЯКРУТОЙИИ и ЦЕЛЬВИЖУСТРЕЛЯЮ, во всех определен скажем метод АПДЕЙТ и каждый компонент подразумевает наличие каких-то параметров.
В чем проблема ПРОСТО линейно разместить в озу данные каждого геймобжекта, а потом проходить по списку данных 3 раза(у нас всего 3 вида компонентов определено) и делать АПДЕЙТ к каждой сущности если стоит метка что там этот компонент есть.
Хотя 3 раза проходить это земля говном(или там в жтом и суть чтот).
В итоге никакой реворк архитектуры игры не нужен. Нужны только изменения в самом юнити(если он не так работает).
А для многопотока не екс нужно, а нужно делать компоненты(под компонентом я офк подразумеваю что объект отнлсится к данному множеству и потому должен пройти заданную обработку через вышеописанный метод апдейт), которые можно по отдельности обрабатывать с малыми конфликтами при доступе к ресурсам. Для разработки как я сказал не требуются установки в мозгу Я ДЕЛАЮ ПО ЕКС Я ДЕЛАЮ ПО ЕКС Я ДЕЛАЮ ПО ЕКС а требуется подумать как сделать чтобы параллельная обработка миллионов таких объектов как можно меньше стопилась в конфликтах к доступу к ресурсу.
Где я ошибаюсь?
Вообще смена парадигмы зрела давно и оно так правильнее с точки зрения геймдева. Ресурсно - да, каждый пишет свой ECS для оптимизейшона, хотя как ты говорищь - оно могло бы с помощью смены принципов работы интерпритатора(и тут не трогай юнитей, вопросы к мелкомягким с их языком) работать так-же. Но суть в том, что даже кодогенерация привела бы к чему-то похожему на ECS. А зачем плодить сущности, если цель одна? Смена парадигмы как способа мышления ведет к меньшему количеству итераций от человека к откомпилированному коду. Смена уровня абстракции на левел ниже.
И да, происходит смена культуры кода. Если все что можно найти было на гитхабе, в ассетах и прочем была похожа на официальные уроки юнитей с их родными компонентами, чем на чистый шарп(минимум подклассов, юзание паттернов на свести минимум, больше общения с префабами и обращения к компонентам) - приводило, как ни странно к чистому и ненагруженному и главное ЧИТАЕМОМУ коду.
И да, сейчас говорят - меняйте парадигму и культуру на новую, что очень сильно триггерит. Большинство именно программистов и так фигачили на чем-то своем, вроде MVC, где создавался контроллер(ГО с компонентами-контроллерами), что брал на себя функции основного кода, модель(что занималась сериализацией/десериализацией данных и общением с сервом и контроллерами) и вью(что из себя как раз представляет сцену). Такая культура всегда существовала параллельно работе скриптов конкретно на ГО сцены.
И для таких людей смена парадигмы - есть что-то логичное, зревшее ранее, понижающее уровень абстракции и при этом нехило разгружающее систему. Почему это должно быть теми-же яйцами только в профиль? Переучиваться больно, компоненты не все даже стандартные поддерживают, нужно где-то изощряться и костылить. Но это же самый сок в работе, когда ты не спинным мозгом думаешь, а осознаешь себя человеком - властелином логики, сапиенсом блядь
Всякая хуйня с памятью - побочный эффект DOD. Суть чуть в другом - в отделении состояния от поведения и композиции вместо наследования.
Смена парадигмы случилась уже очень давно, просто до УНИТИ доезжала долго. http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/ написано 11 лет назад.
Ты ошибаешься в том, что для этого потребуется переделать Юнити, на самом деле это фишка шарпа - в массиве ссылочных типов хранятся ссылки на экземпляры, а сами экземпляры лежат где-то в куче в произвольном порядке, еще и .net их постоянно перекладывает, чтобы фрагментации не было.
Вот и получается, что при итерировании такого массива тебе надо взять ссылку, пойти по ней, сложить кусок памяти в кэш процессора, сделать что тебе надо, повторить.
В случае ецс берется сразу кусок данных, содержащий N элементов массива, запихивается в кэш и последовательно обрабатывается. Отсюда и выигрыш в производительности.
Братишь, еще на старом сурсе была основной парадигмой именно ECS(только что заметил, что в русской раскладке будет - УСЫ). Унити да, доезжала долго, и видать старалась быть ближе к народу что-ли... Вообще все начало позитивно меняться в лучшую сторону, когда начали появляться новые компоненты и функционал, написанный "звездами" ассетстора и гитхаба, когда их начали скупать. Все эти нгуи, текстмешпро, киеджиро с HDRP, пробилдер, нейстед префабс, и овердохуя прочего - это конкретные люди и, что характерно программисты под юнитей. И их код всегда отличался в сторону разделения функционала, в отличие от этих ваших классических тем с геймобджектами. Нас всегда кормили околомаркетинговой историей в виде уроков для начинающих - повесь компонент ходить на перса, заебашь террейн - зацени, бро, у тебя игра и ты можешь ходить персом. А теперь добавь пушку на которой будет компонент инстанса снарядом - умничка. А теперь заебень на снаряд свой компонент. Заебись - он взрывается! Массовость, бля
Сейчас начинают сами грязнуть в истории, что люди переросшие проекты аля "ГТА МОБАЙЛ ЧЕЛЯБИНСК ЭДИШОН(ВСЕ МОДЕЛИ ВАЗа)" начинают писать свои системы, или переходить на другие движки из-за этой поеботы. А юнитекам это нахуй не надо, вот звезды, коих собрадось уже дохуя, скорее всего и подсказали, как сделать так, чтоб и рыбку съесть и на хуй не сесть
Ого круто, все иду учить ECS.
И это же охуенно, что разработчики не сидят на жопе ровно. Усам ещё расти и расти, но выглядит уже весело.
>когда ты не спинным мозгом думаешь, а осознаешь себя человеком
Так то, батеньки, c# надо в помойку выкидывать. По себе вижу, как мозги костенеют от недостатка напряжения, а раньше считал .net программистов скорее ленивыми, нежели тупыми.
>c# надо в помойку выкидывать
Фрипаскальчую! Скорее бы выкинули уже уёбищный шарп с крестами и вернулись к православному паскалю.
Меня триггерят, как разраба, подобные шутки. Помимо того, что она тупая , ты еще выпячиваешь свой "уровень"
Есть маркеры характеризующие. Если например корешь тебя хватает периодически за хуй и лезет целоваться - скорее всего - он пидор. Как и ты
>Этот порвавшийся пердолик
Это какой-то особый вид вниманиеблядства - мериться степенью аутизма?
Мой уровень - 9 лет карьеры разработчика и работа по удаленке в Майами. Достаточно, чтобы написать, что ты несешь хуйню?
>к шарпоговну прикрутят джаваговно просто чтоб было) в роадмапе конечно ничего об этом не сказано, но ведь просто так бы не УСЛЫШАЛ! А всякие говноязыки которые раньше поддерживались - джаваскрипт и и еще какую то парашу - их выпилили чтоб освободить место для котлина)))))))))
И эти шизоиды делают игры.
Ну так помаши крылышками, раз кукарекаешь.
Ебанись. Услышал - имеется ввиду на юнайте упоминание было. Котлин на данный момент(с ебетки 2018.3) компилируется не юнитёй а андроидстудией. И это нативный язык. Свифт да котлин нынче масткновн юнитёвым разрабом ибо без них никакой мобилковой разработки.
>И это нативный язык.
В андроиде не может быть нативного языка, это же джавамашина. Тебя обманывают.
>масткновн
Ага, еще скажи что делая игру на юнити под мобилки нужно хоть одну строчку на твоей джавапараше написать.
Поясните дауну с какого так сказать пирога я должен юзать CreateDelegate вместо тупого присвоения существующему делегату времянке ?
Это я про methodInfo если что.
Если хочешь встраивать хотя-бы монетизацию, рекламу, нативные сервисы, ачивки, не говоря уже о доступе к низкоуровневым данным с мобилки(вроде GPS координат не в флоате, а в дабле, чтоб получать погрешность не в 15, а в 5 метров) - тебе нужно лезть в студию и в икскод постоянно. Доступ к директориям телефона, какие никакие БД, кастомные библиотеки на других языках. Так чтоб не лазить туда и не писать какие-то моменты руками - только для совсем детских поделий справедливо
Уверенность что ты не сделал ни одной игры на юнити крепнет с каждым твоим новым постом.
Я уже несколько лет не общаюсь с юнькой с точки зрения игр - да. Я код пишу, блядь. Да и никогда не занимался лютой индюшатиной и в играх так-же. Понятие "сделать игру" не шибко для меня актуально.
Представь себе ситуацию. Субботний вечер. Ты один дома, потому как у жены дедлайн и нужно марафонить код. Звонок - речь несвязная, паника, человек охуевает от происходящего, потому как вместо того, чтоб спать неделю хуярит коктейль из спидов и ноотропов. Из понятных слов только мат формируемый в текст и "заказчик". Сопровождается это в случае успеха эйфорией и ощущением себя "королем мира и повелителем кода".
Такое будет случаться постоянно в течении пары лет. Потом наступит "перегорание", кризис среднего возраста, и ощущение себя отработанным материалом без цели и неконкурентным молодым мозгам проходящим "стадию 1"
Далее наступит дзен, ей будет нравится пописывать код, зарабатывать на этом очень неплохую денюжку, любовь, мир, дружба и красота. И ностальгия по былому...
https://yandex.ru/images/search?p=35&text=Звонок - речь несвязная%2C паника%2C человек охуевает от происходящего%2C потому как вместо того%2C чтоб спать неделю хуярит
Это определённо какое-то буллшит бинго
Потребность велика(если игоры делать, то кодеры нужны). Рынок труда небольшой относительно. Людей еще меньше чем спроса. Платят очень хорошо. В геймдеве вообще дохуя специальностей(таланты любые нужны), но самые бохатые и любимые - кодеры.
>хорошие изобразительные навыки
Сразу определись, она художник или ремесленник и от этого пляши.
Если художник - нахрен посылаете работу на чужого дядю.
Если ремесленник то тут конечно варианты.
>Насколько велика потребность в c# при использовании unit
И снова, если она художник, то кодинг если и потребуется то тупо на уровне копипасты пары строк.
У меня в соседнем подъезде художник настоящий живет. Посылает работу на дядю. Правда постоянно стоит перед магазом ближайшим и просит денюжку на водку. Бесполезнее персонажа, чем гумманитария, думающего что вот-вот его тонкий мир кому-то понадобится и будет востребован - никого нет.
а я под мостом бывало жил и пил паленую из консервной банки с такими же художниками и норм, жизнь живется. тебе просто не понять потому что ты не человек, а ходячий автомат. заменят твою душу на нейросеть, а ты и не прочь
Я про другого художника )
От картинок которого народ говорит вау.
Художник в том смысле, что идеям тесно у него в голове и он постоянно хватается за кисть.
А юнити и прочие песочницы же круче чем кисть.
Пиздежь. Норм художник, со скилом но без вау от окружающих может зарабатывать от 5 баксов в час в этих ваших интернетах. Просто рисуя. Художники нищими не бывают. И в юнити им разбирать нужно ровно на уровне ноль, все необходимые объяснения об особенностях работы платформы для того, чтобы они смогли верно выполнить свою работу занимают меньше десяти минут.
>>36488
Графон - это 2/3 от игры. Остальное - геймплей. Что, собственно, и отражает рынок: годному художнику зачастую платят 50+ баксов, годный юнити-кодер мечтает о 10. Поэтому когда художник хочет покирилить - к нему сразу слетается пачка кодеров, готовых бесплатно воплотить его идеи в код. Если же кодер хочет найти себе художника для своего говна - придется платить, бесплатно хуй кто что будет рисовать.и
>Графон - это 2/3 от игры. Остальное - геймплей.
Ну музон же забыл.
Убери из Мист3, Готики, Уереал музыку - ощути разницу.
То, что тысяча-две человек лайкнули кого-то на девиантарте - не делает человека художником.
Всем похуй что у художника в голове. Там может быть просто шиза. Или мания величия. А быть может он просто ленивое чмо, которое думает, что оно может нихуя не делать, но почему-то всем охуенно нужен его внутренний мир(на самом деле нет). Это гумманитарий - недочеловек. Плюс лишенный навыков.
Единственно важное - наличие навыков. Если умеет выполнять правильные вещи, пользоваться нужными инструментами, хуячить на выходе найс продукт, что можно использовать, умеющий слушать и слышать, при этом постоянно обучаясь и самообразовываясь(в написании эфикс или шейдоров, умеющий в сабстенсы все и воптимизацию) - то скорее, да, в команде он нужен и в зависимости эт этих скилов он получает денюжку. Иначе - все плохо.
Нейросеть любая имеет цель. Обощи же безцельны
Скоро в юньку завезут воксельное ги суперахуительное летающее даже на древних видюхах и не надо будет говнозапекать говно.
https://forum.unity.com/threads/hxgi-realtime-dynamic-gi.472486/page-15#post-3875065
>Скоро в юньку завезут
Надо только подождать. Не рефлексируем, пиарим. Надо сходить годоблядей пнуть в говнотреде.
ТПС
>Уже штук 15 попробовал, все хрень какая-то, как будто не хотят годноту бесплатно выкладывать.
Юнитификс.
>Пацаны, знает кто-нибудь где character controller хороший лежит? Уже штук 15 попробовал, все хрень какая-то, как будто не врубаются какой он должен быть.
Могу дать внезапный совет: Есть несколько бесплатных и при этом годных контроллеров для годота. Нет, я не призываю к инсталл годот. Предлагаю кое-что покруче: берёшь туториал по контроллеру для годота и реализуешь то же самое в юнити. ГДСкрипт прост и похож даже не не питон, а на алгоритмический псевдокод. Матчасть совершенно та же самая. Достаточно переложить на шарп. _process заменить на Update()
в ютубе туторалов по контроллерам как говна, сам оттуда спиздил неплохой контроллер и камеру, потому что дебил и не понимаю в них нихуя.
>Поэтому когда художник хочет покирилить - к нему сразу слетается пачка кодеров
Нуну. Ко всем и всегда слетаются все подряд (и ничего не доделывают). А уважающий себя спец с опытом игнорирует, что кто-то там кирилит.
>спиздил неплохой контроллер и камеру
Там одно говно, я страниц 20 просмотрел, большинство суперпростые, идешь вверх на склоне - скорость не уменьшается, идешь вниз рывками как долбоеб. Есть вроде бы крутой платный
https://assetstore.unity.com/packages/tools/physics/kinematic-character-controller-99131
Но его пока не спиратили. Еще несколько бесплатных, но они странные, вроде авторы хорошо программируют, но один при подъеме на склон проваливается, а при спуске вылазит дальше чем нужно. Где ты видел такую хуйню, ебанько? Хочется спросить у автора. Нашел почти идеальный бесплатный CharacterMotor.cs и CharacterMotorC.cs, это официальный юнитевский из старых версий юнити, потом заменили на фпсrigidbody. Он даже по платформам ездит, вообще идеально. Но у него прыжок стремно сделан, типо если долго жмешь выше летит, слабо - ниже, хуйня какая-то, нужно снести и сделать обычный, но там так запутано, все разваливается если кривыми лапками лезть. И у него есть баг, когда приземляешься на крутой склон летя вниз, он прекрасно скатывается, а если вверх и не отпускаешь кнопку бега, то тупо едет вверх бесконечно, на любую стену можно забраться. Сам не могу исправить ошибку, слишком сложный скрипт, если бы кто-нибудь исправил... Нашел еще и его исправленную версию, но там все переписано, убрана возможность ездить по платформам и тоже недописано.
>>36636
>Предлагаю кое-что покруче: берёшь туториал по контроллеру для годота и реализуешь то же самое в юнити
Заебался уже, да и не получится скорее всего, да и контроллер там скорее всего тоже говно.
>не получится скорее всего
Как ты игру собрался делать, если даже контроллер по инструкции не можешь осилить?
А вообще я, наверное, скажу ужасную вещь, но... Просто купи нормальный контроллер, если со скиллами все плохо. В конце концов это единоразовая покупка.
Проблема этих покупок в том, что они все говно. Есть много спираченных ассетов, системы всякие боевки, все говно. Если бы не пиратство пришлось бы кошельком проверять каждый. На ролике выглядит классно, скачиваешь там полное говно. Так бы конечно купил то что нужно. Я склоняюсь к тому, что чем у прогера выше скилл, тем меньше вкуса и вообще творческих способностей (не считая код). И еще им не хватает хитрости просто пиздить самые популярные геймплеи, они обязательно на свое усмотрение делают (конечно хуйню).
В UCharacterMovementComponent.
Справедливости ради, ты вряд ли можешь объективно оценить качество чужих ассетов ввиду собственной низкой квалификации. Без обид.
>Я склоняюсь к тому, что чем у прогера выше скилл, тем меньше вкуса и вообще творческих способностей (не считая код)
Полу-правда такая, ну. Вкус дело наживное. Да, разумеется, есть товарищи которые с рождения пиджак к шортам подберут (но таких один на тысячу). А научиться разбивать картинку на составные части - такой скилл, как научиться разбивать программу на функции. Правда в том, что прогеры кладут хуй на "картинки эти ваши". Неправда в том, что с годами у любого человека прокачиваются все скиллы.
>Я склоняюсь к тому, что чем у прогера выше скилл, тем меньше вкуса и вообще творческих способностей
Чушь. Талантливый человек талантлив во всём. В данном же случае дело в том, что чем меньше глупый человек что-то знает в такой-то области, тем сильнее он бьёт себя пяткой в грудь, заявляя о своём профессионализме. Такие технари и выдумывают себе тупых гуманитариев, у которых "эти ваши ненужные картинки"
Гораздо проще сделать фундамент у домиков деревянных который по своей длине гарантированно уходит вглубь любых неровностей. И такие же длинные ступени крыльца у входной двери.
>Я склоняюсь к тому, что чем у прогера выше скилл, тем меньше вкуса и вообще творческих способностей (не считая код).
Нет. Противостояние "гуманитарии-технари" есть ложная дихотомия. Углубляться в одну сторону в ущерб другой - обрекать себя на убогость.
А можно сделать так к определенному месту, ну вот например хочу забиндить так чтоб при наждатии кнопки открывался опредененный класс в определенном месте, в общем задумка просто быстро свитчится в частопосещаемые места.
Хороший код не предполагает часто посещаемых мест.
А на счет твоего вопроса хз, никогда не интересовался.
Для того чтобы понять, что повар хороший, не нужно быть профессиональным поваром, ебанько. Без обид.
>>36737
Нет, у всех свой потолок в каждом деле. Невозможно много учиться и стать эйнштейном, это врожденные особенности. Можно преуспеть только в том, к чему у тебя склонности врожденные, в остальном потолок очень низкий, чем больше в одном, тем меньше в другом, мозг он маленький.
>>36738
>Чушь. Талантливый человек талантлив во всём.
Заткнись, пидараска. Гении как правило только в чем-то одном гении. Да, и пару талантов иметь можно, но это большая редкость, обычно вообще никаких, хоть усрись. Если у дауна айкью 60, как у тебя, хоть что делай, выше твоей тупой башки ты не прыгнешь, довин.
>>36789
А я и не говорю про технарей и гуманитариев, просто конкретно в этом случае так вышло. Наверняка, в ваших пизданутых манямирках полно гениальных программистов, которые одновременно еще и гениальные художники, что с вас взять.
>ебанько
Сразу видно профессионала.
Конечно, ты прав. Для оценки качества фрезерного станка не нужно уметь им пользоваться, это любому дураку очевидно.
Bookmarks, нюфаня
> Нет, у всех свой потолок в каждом деле. Невозможно много учиться и стать эйнштейном, это врожденные особенности. Можно преуспеть только в том, к чему у тебя склонности врожденные, в остальном потолок очень низкий, чем больше в одном, тем меньше в другом, мозг он маленький.
Быдло без склонностей закукарекало. Нет никаких склонностей, просто одни люди лучше других, и у них потолок во всех областях высокий, а у других - во всех областях низкий. А т.к. ты этого не понимаешь - ты явно из вторых.
> Заткнись, пидараска. Гении как правило только в чем-то одном гении.
Ага, они ведь в чем-то одном прокачиваются, как они могут быть гениями в том, чем не занимаются?
> Наверняка, в ваших пизданутых манямирках полно гениальных программистов, которые одновременно еще и гениальные художники, что с вас взять.
Если говорить про реальный мир - то в нем любые гениальные программисты могли бы стать гениальными художниками. И наоборот. Только зачем им это? Когда ты гениальный программист - тебе не нужно становиться гениальным художником, максимум помазюкать на выходных.
>Для оценки качества фрезерного станка
Разговор про людей, дура, что ты несешь.
>>36869
>они ведь в чем-то одном прокачиваются
Есть те кто в одном, есть кто во всем, люди разные, если ты не знал, ебанько. Есть те, кто ебашит бесконечно, выучивают один язык, второй и так всю жизнь. Так же можно представить суперцелеустремленного человека который занимается многими делами и везде достигает пика, но таких нет, только в твоем манямирке, даун.
>Нет, у всех свой потолок в каждом деле. Невозможно много учиться и стать эйнштейном, это врожденные особенности. Можно преуспеть только в том, к чему у тебя склонности врожденные, в остальном потолок очень низкий, чем больше в одном, тем меньше в другом, мозг он маленький.
Что ты забывать собрался? Существование комплементарных цветов? Хотя мозг забудет градус-по-HUE синего цвета без примесей Или суть оператора условного перехода? Хотя если пять лет не кодить на питоне - if по памяти не напишешь. Умение в гугле вбить "flat design guides"? Что-то ни разу не слышал, чтобы человек забывал про гугль. Ты формулу воды почему не забыл? Не ври, ты её помнишь. А там и кислород от водорода отличишь. Хотя - унеситеэтухуетуотменя - это химия.
Навыки без практики стачиваются - да. Общий скилл остается. Если чувак на 25м лвл понял, что красные штаны и зеленая куртка сочетаются не очень, то он в 35 её снова не оденет. Плюс, в 27 осознает, что эта прическа ему не идет. Это не значит, что в 40 он будет одеваться лучше всех. Но значит именно то, о чем я говорю: забываются детали, но не общие вещи.
А что ты понимкаешь под реалистичностью ?
А тебе точно игру делать, или велосипеды писать, как долбоебам местным? Я бы дал тебе контроллер, но не уверен пока.
Как-то же делают люди.
Шейдорами.
Вот еще https://stackoverflow.com/a/29046732
> if you have a very large ground object you need to spread your texel budget so shadow quality will be lower
> the floor size was the actual problem
Хотя с 15го года все могло поменяться.
Еще нет. Но поизучать и пройти пару туторов имеет смысл.
Но ведь есть куча других ЕКС фреймворков
https://en.wikipedia.org/wiki/Hue и еще настраиваемый random seed https://stackoverflow.com/a/19303725 тебе пригодится, если захочешь нелинейную последовательность цветов
>Точно так же моб из абстрактного примера выше, он может ползти и жевать мертвечину в спокойном состоянии, но завидев ГГ он плавно перестаёт жевать и выпускает стрекательные тентакли, плавно меняя траекторию движения, хотя КА его ИИ уже десяток фреймов назад переключилось с "питаюсь" на "атакую врага".
При виде врага он переходит в стейт "выплёвываю мертвечину и выпускаю тентакли", за которым следует стейт "ползу и грыгу, ползу и грызу!". Очевидно же.
А вот и нет, если бы вы понимали хоть что-то в аллокации памяти и прочем, возможно вы бы прозрели, что создание класса идет в пул, а пулы разделяются по чанкам в зависимости от фильтров, я использую LeoECS его произвоидетельность примерно около стандартной юнити ECS. Использую стороннюю по множеству причин, среди которых сторонний рендерер внутри юнити и некоторые прицелы на MonoGame
Вы видите копию треда, сохраненную 18 ноября 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.