Дядя Миша писал: Если же нет - как ты предлагаешь синхронизировать анимацию с физикой?
Чего там синхронизировать? Почему у тебя колайдер остаётся на месте когда ты двигаешь объекты анимацией? Это плохое поведение, нужно обновлять позицию колайдера вместе с объектом. Тот же самый колайдер может возвращать с чем столкнулся.
В Юнити объект это просто пустышка с именем и трансформом, визуальная оболочка и колайдер это уже компоненты в его локальном пространстве. И когда ты анимируешь трансформ объекта, вместе с ним двигается и физическая оболочка и визуальная. Кости интерпритируются точно так же, к каждой кости можно создать или сгенерировать свой колайдер и ригидбоди, и у тебя уже будет регдолл, без всякого хардкода. Ик констрейнты, аниматор и жинглы навешиваются аналогично.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Чего там синхронизировать? Почему у тебя колайдер остаётся на месте когда ты двигаешь объекты анимацией?
У меня ничего не остаётся. Я спрашиваю как ты собрался делать дверь-давилку анимацией. Там же обратная связь нужна. Ну вот упёрлась она в игрока, значит в аниматор должен пойти какой-то обратный сигнал.
Отмотать анимацию в начало или просто остановить. Это не такое-то простое дело, как тебе кажется.
Добавлено 03-08-2024 в 11:00:
Разумеется, если дверь это просто констрейнт, то там проще. Но ты мне говорил именно об анимации.
Дядя Миша
Аниматор не обрабатывает столкновения, аниматор обрабатывает анимацию, в анимации сказано двигать объект например по оси Y. Он двигает объект (вернее анимирует параметр компонента трансформ), на объекте висит моделька и колайдер, эта вся тройня двигается вместе с помощью констрейнта аниматор. Чтобы добавить обработчик столкновения на этот объект вешают как ты выразился констрейнт скрипт который уже связывает все эти констрейнты в единую логику.
Он обращается сначала например к col = gameObject.GetComponent<BoxCollider>();
Говорим ему points = col.GetContacts(contact); и если Points больше чем 0 то логично что наша дверь столкнулась с чем то. И в таком случае уже обращаемся к аниматору anim = gameObject.GetComponent<Animator>(); и говорим ему anim.Play("CloseDoor");. Всё. Ты конечно можешь уже сделать заготовку этого скрипта и использовать для всех дверей. Ну или сделать это как то по своему как ты это любишь, я не призываю повторять Юнити 1 в 1.
У меня это сделано проще через констрейнт отслеживающий эвенты, он просто отслеживает эвент колайдера и отправляет эвент аниматору вообще без программирования (это похоже на Input/Output систему из Сорса).
Но тоже помни, движок с непонятной логикой нафиг никому не нужен будет, т.к. в среде разрабов уже выработался некий пайплан.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша писал: Моя логика такая, что будет отдельный режим работы - анимация, которая рулится столкновениями.
В целом сойдёт, но ты забываешь что анимация может рулиться не просто столкновениями, а вообще чем угодно Ну например когда игрок стреляет в дверь, нажали где то кнопку, или скажем под неё кинули гранату и она должна заглохнуть, или когда просто топнул ножкой рядом, а дверь улетела далеко далеко. Для всех этих случаев тебе придётся хардкодить отдельные сущности, вместо того чтобы сразу сделать гибкую систему.
Тебе лучше сделать компонент колайдера который отлавливает все столкновения, а ты уже от него можешь ловить эти столкновения и отправлять их и аниматору, и интерфейсу, и вообще всему чему только угодно.
К слову в Юнити аниматор умеет анимировать не только модели и трансформы. Он умеет анимировать вообще всё. Например какие то параметры в скрипте, или цвет материала, включение и выключение объектов и так далее. И всё это одной системой без наращивания лишних сущностей.
Колайдер тоже можно использовать как инпут для любого отслеживания физики, и как триггер, и как касание для дверей, и для задания трения, и для рейкаста и так далее.
Каждая система изолирована и не тянет на себя роль соседа, но при этом к ней можно получить доступ откуда угодно.
А когда ты пытаешься сделать для какой то системы функционал другой, например у аниматора возможности коллайдера, то у тебя происходит комбинаторный взрыв т.к. потом захочется добавлять и другие фишки которые дублируют уже существующие системы.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Тебе лучше сделать компонент колайдера который отлавливает все столкновения, а ты уже от него можешь ловить эти столкновения и отправлять их и аниматору, и интерфейсу, и вообще всему чему только угодно.
Понятное дело, что это будет абстрактная система.
Цитата:
FiEctro писал: А когда ты пытаешься сделать для какой то системы функционал другой, например у аниматора возможности коллайдера, то у тебя происходит комбинаторный взрыв т.к. потом захочется добавлять и другие фишки которые дублируют уже существующие системы.
Мне очень нравится как ты учишь меня писать движки
Дядя Миша писал: Мне очень нравится как ты учишь меня писать движки
Писать движки учат по другому. Я просто показываю уже готовые решения, их плюсы и минусы. Лучше сразу всё обсудить чем потом это как то разруливать, это сэкономит тебе уйму времени. Класс аниматора должен заниматься только анимациями и ничем более, это же аниматор, а не гиперкласс. Тоже самое и с колайдерами.
Это здорово тебе поможет например при проектировании параметрических анимаций вроде регдоллов, или той системы из гта4 (которая к слову собирается так же из объектов с констрейнтами). А так представь для каждой из них надо снова и снова писать отдельную систему.
Большую часть первой кваки можно собрать тупо на констрейнтах, без кодинга вообще. Код нужен только чтобы связывать логику взаимодействия этих констрейнтов. А что такое энтития? Это просто объект-префаб только захардкоженый.
Цитата:
Дядя Миша писал: Понятное дело, что это будет абстрактная система.
И к ней должен быть лёгкий доступ, как со сцены так и из кода.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Писать движки учат по другому. Я просто показываю уже готовые решения, их плюсы и минусы. Лучше сразу всё обсудить чем потом это как то разруливать, это сэкономит тебе уйму времени. Класс аниматора должен заниматься только анимациями и ничем более, это же аниматор, а не гиперкласс. Тоже самое и с колайдерами.
Не обижайся, но твои попытки объяснить суть технической реализации для меня обычный информационный шум. Я это обычно даже не читаю. У тебя конечно получается лучше чем у Кристаллайза, но выглядит так, как ты раз за разом пытаешься объяснить как важно мыть руки и чистить зубы.
Что для меня действительно имеет ценность - так это информация с точки зрения пользователя, который в этом вообще дуб-дубом. То есть без вот этих вот утомляющих технических подробностей, суть которых ты всё равно не слишком хорошо понимаешь кроме аксиомы "ну так все делают". Мне это не нужно и неинтересно. Мне интересно как это выглядит для пользователя.
Цитата:
FiEctro писал: Большую часть первой кваки можно собрать тупо на констрейнтах, без кодинга вообще. Код нужен только чтобы связывать логику взаимодействия этих констрейнтов.
Пруфов разумеется не будет? У нас уже был один товарищ, который грозился ну хотя бы первый уровень из второй кваки портировать на Юнити. Разумеется никто ничего не портировал и сделать этого не смог.
Ну оно понятно. Человек начинается умных статей на хабре, насмотрится роликов на ютубе и начинает отчего-то думать что он во всём разобрался и всё может. Да, мы с Ксером когда-то тоже так себя вели. Но мы это делали хотя бы по итогам наличия у нас реальных проектов, а не просмотра каких-то там обучающих роликов. Не понимаю что заставляет так себя вести.
Но мне будет очень интересно посмотреть как ты реализуешь ИИ монстров на констрейнтах, да.
Цитата:
FiEctro писал: И к ней должен быть лёгкий доступ, как со сцены так и из кода.
В Юнити слишком лёгкий доступ из сцены как правило приводит к крайне негативным последствиям, когда приходится в каждом случае городить какой-то уникальный объект. Вот зачем тебе доступ к костям из сцены?
А если окажется что этих костей нет?
Дядя Миша писал: Не обижайся, но твои попытки объяснить суть технической реализации для меня обычный информационный шум. Я это обычно даже не читаю. У тебя конечно получается лучше чем у Кристаллайза, но выглядит так, как ты раз за разом пытаешься объяснить как важно мыть руки и чистить зубы.
Что для меня действительно имеет ценность - так это информация с точки зрения пользователя, который в этом вообще дуб-дубом. То есть без вот этих вот утомляющих технических подробностей, суть которых ты всё равно не слишком хорошо понимаешь кроме аксиомы "ну так все делают". Мне это не нужно и неинтересно. Мне интересно как это выглядит для пользователя.
Ты сам задавал вопросы, я тебе на них ответил. Зачем тогда задавал вопросы?
Цитата:
Дядя Миша писал: Пруфов разумеется не будет? У нас уже был один товарищ, который грозился ну хотя бы первый уровень из второй кваки портировать на Юнити. Разумеется никто ничего не портировал и сделать этого не смог.
Ну оно понятно. Человек начинается умных статей на хабре, насмотрится роликов на ютубе и начинает отчего-то думать что он во всём разобрался и всё может. Да, мы с Ксером когда-то тоже так себя вели. Но мы это делали хотя бы по итогам наличия у нас реальных проектов, а не просмотра каких-то там обучающих роликов. Не понимаю что заставляет так себя вести.
Но мне будет очень интересно посмотреть как ты реализуешь ИИ монстров на констрейнтах, да.
Ничего из этого я не говорил, ты напридумывал фигни какой то и мне приписываешь. Я портировал уровень из халфы на Юнити ещё и с рейтрейсингом, но тебе это в очередной раз было "не интересно". Я думаю если бы твой товарищ таки сделал порт ты ему бы ответил тоже самое, и всеравно бы нашел повод к чему придраться.
Цитата:
Дядя Миша писал: В Юнити слишком лёгкий доступ из сцены как правило приводит к крайне негативным последствиям,
Вот откуда у тебя такие выводы? Ты же ничего кроме интерфейса в Юнити не видел и то судя по твоему обзору только малую его часть.
Цитата:
Дядя Миша писал:
когда приходится в каждом случае городить какой-то уникальный объект. Вот зачем тебе доступ к костям из сцены?
А если окажется что этих костей нет?
Отвечаю - уникальные объекты можно паковать в префабы, есть ещё инстансы и так далее. На крайняк ты можешь написать энтитию как в халфе и вешать просто на объект, но такое считается плохим тоном и говнокодом. Не я это придумал. Это не квака где голые си, ну или ку си, где Кармак не смог придумать чего то универсального, и просто захардкодил готовые объекты.
Доступ к костям со сцены чтобы не городить всякие левые редакторы, модельвьюверы и прочее дерьмо. А так же чтобы не городить костыли вроде аттачментов к костям. А так же для того чтобы можно было легко управлять процедурной анимацией, и тестировать это прямо в редакторе, а не смотреть на сухие числа в блокнотике с умным видом.
Цитата:
Дядя Миша писал: А если окажется что этих костей нет?
Ошибку в консоль выдаст если объекта костей нету, халфа и квака вон вообще вылетали если звука или текстуры нужной нету, и тебя это почему то не особо волновало.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша писал: С рейтрейсингом я видел, с логикой на констрейнтах - нет.
Открой любой проект на Юнити, оно везде одинаковое. И да, навмеш агент это констрейнт. Вот сам навмеш увы вшит в движок и ничего с ним не поделать, это я смело могу заявить как один из недостатков Юнити. Благо есть кастомные. О чём я и говорю что за простоту всегда приходится платить гибкостью.
Цитата:
Дядя Миша писал: Так я задавал именно про то, как ситуацию видит пользователь.
Прости, но я не очень понимаю о каком пользователе идёт речь? Может ли маппер работавший с голдсорцом внезапно пересесть на сорс? Вроде и там и там хамер. Какой то наверное может, а какой то нет или не сразу скажем. А на кварк много с хамера пересело?
Так и тут. Ну ничего тебе не мешает обернуть констрейнт в инстанс и спавнить его как обычные халфовские энтитии. Но зато более опытному пользователю можно будет залезть внутрь и отредактировать его по своему или создать на его основе новый, не вникая особо в код. Я как пользователь тебе могу смело сказать - рядовые мапперы очень не любят лазить в код, но иногда такая возможность нужна позарез.
Вот вспомни доктора Тресси, ему уже энтитей мало было, ему бы больше подошли блюпринты, но и они не панацея.
Цитата:
Дядя Миша писал: Ну вы же там городите объекты "по месту". Никто не пишет абстрактные.
Все объекты в Юнити абстрактные, и констрейнты абстрактные. И для игровых объектов, и для ИИ, и для интерфейса, и для всего остального. Объект это просто точка с именем, а констрейнт задаёт ему свойства. Твои скрипты тоже можно как констрейнт использовать.
Цитата:
Дядя Миша писал: Становится все интереснее. Т.е. абстрактный универсальный объект считается говнокодом?
Ты сам прекрасно помнишь дублирующиеся по смыслу объекты в халфе. func_train, func_tracktrain, func_door, func_door_rotating и т.д. Всё это можно было обернуть в один констрейнт трансформ.
Годот например сильно ругают за халфовский подход когда - 1 объект = 1 констрейнт.
Цитата:
Дядя Миша писал: Я в Ксаше сделал чтобы не вылетало. Если бы меня не волновало, я бы наверное этого не сделал?
Ну за это спасибо.
Опять же я повторюсь, я не предлагаю делать из Ксаша Юнити и не учу тебя писать движки. Делай так как считаешь нужным. Я просто вижу что у тебя очень сильно искажено представление о современных движках и пытаюсь заполнить этот пробел.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Анимации делаются через ретаргетинг, или подтягиваются из экшенов самой модели. Констрейнты движковые уже или на сцене в префаб или конфиг делать да.
Вызывать анимации напрямую через код считается говнокодингом, ими управляет отдельный аниматор который управляет всеми блендингами, лупами, условиями переходов между ними и т.д. , а в коде просто передаётся ему событие.
Это конечно очень примитивный пример, но думаю общие представления дать сможет.
Добавлено 04-08-2024 в 13:26:
Цитата:
Дядя Миша писал: Так я задавал именно про то, как ситуацию видит пользователь.
Проверь личку, я как раз по этому поводу тебе кое что написал.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!