Есть смысл выкатить интерпретатор языка отдельным проектом.
Базовый ввод/вывод подтянуть из stdio. Уже на этой стадии народ пробовал бы различные конструкции и искал баги.
FiEctro писал: Мне кажется ядро физики лучше вынести в отдельную нативную либу как это делает физикс или ньютон.
У меня совершенно иной подход. От физики очень часто требуют специфических вещей, а не точной симуляции физических законов.
В том же PhysX например нет каллбэка на блокировку кинематиком твёрдого тела об геометрию уровня. Хотя в играх это довольно часто встречающаяся ситуация - заблокировать дверь ящиком чтобы она не смогла закрыться.
Так вот нативных методов это сделать в физиксе - нет. Равно как и вообще что-либо сделать при блокировке кинематка. Собсно, почему я и не связываюсь со сторонней физикой - она реализует абсолютно не то, что нужно в играх. Всё что угодно, кроме того что надо. Надувных коров, например. Вы много в играх видели надувных коров?
Цитата:
FiEctro писал: Кстати ещё такой вопрос у тебя можно легко и быстро перебросить объект в локальное пространство другого объекта?
Зависит от реализации игрового кода на Шоте. Для кваки я такого не делал, а в коде ксаш-мода это есть изкаробки.
Добавлено 28-08-2024 в 13:10:
Цитата:
Unit писал: Есть смысл выкатить интерпретатор языка отдельным проектом.
Да, я его обязательно выложу на gamedev.ru в своё время. У меня там ещё пара недоработок с шаблонами и ссылками.
Дядя Миша писал: У меня совершенно иной подход. От физики очень часто требуют специфических вещей, а не точной симуляции физических законов.
Так специфичные вещи это уже более высокий уровень абстракции чем ядро.
Цитата:
Дядя Миша писал: В том же PhysX например нет каллбэка на блокировку кинематиком твёрдого тела об геометрию уровня. Хотя в играх это довольно часто встречающаяся ситуация - заблокировать дверь ящиком чтобы она не смогла закрыться.
Так, а почему физдвижок должен знать про уровни, двери и ящики? Ты же сам мне говорил что это голая аналитическая геометрия. Вот эта геометрия и есть ядро, а когда монстра зажало дверью это уже игровая логика.
Цитата:
Дядя Миша писал: Собсно, почему я и не связываюсь со сторонней физикой - она реализует абсолютно не то, что нужно в играх. Всё что угодно, кроме того что надо. Надувных коров, например. Вы много в играх видели надувных коров?
Я использовал в Юнити софтбоди, правда весьма костыльно.
Цитата:
Дядя Миша писал: Зависит от реализации игрового кода на Шоте. Для кваки я такого не делал, а в коде ксаш-мода это есть изкаробки.
Ну тоесть можно сказать что нет, я понял.
Цитата:
ZGreen писал: Кто-нибудь может перевести это?
Фреймворк, библиотека, средставами виртуальной машины подключаем к движку и пользуем.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Так специфичные вещи это уже более высокий уровень абстракции чем ядро.
Совершенно верно.
Цитата:
FiEctro писал: Ты же сам мне говорил что это голая аналитическая геометрия
Ты не путай коллижен-детектор с солвером. Детектор-то действительно везде одинаковый, его задача найти столкновение\пересечение.
А солвер зачастую должен решать какие-то игроспецифичные задачи, а не заниматься точной физической симуляцией. Поэтому мне очень импонирует подход Кармака с его моветипами. Везде немного своя физика. Потому что все объекты очень разные и управляются по разному. А в случае использования Физикса, нам надо наоборот душить его стандартный солвер и далеко не всегда для этого есть корректные способы.
Цитата:
FiEctro писал: Ну тоесть можно сказать что нет, я понял.
Нативной реализации нет. Но если я вынесу физику такого рода в ядро, то появится. Пока что нет в этом необходимости.
Добавлено 28-08-2024 в 16:25:
Вы же поймите, в FPS есть как минимум один нелинейный элемент - сам игрок. Который не подчиняется никаким законам физики, прыгает выше головы, может менять направление движения прямо в воздухе, приседать прямо там же и практически мгновенно останавливаться. И он вам таки сломает всю симуляцию, причём многие этим даже намеренно занимаются.
А если игрока будет давить дверью, он не будет совать туда свой нос почём зря.
Дядя Миша писал: А солвер зачастую должен решать какие-то игроспецифичные задачи, а не заниматься точной физической симуляцией. Поэтому мне очень импонирует подход Кармака с его моветипами. Везде немного своя физика. Потому что все объекты очень разные и управляются по разному. А в случае использования Физикса, нам надо наоборот душить его стандартный солвер и далеко не всегда для этого есть корректные способы.
Ну да я примерно так и говорю. Но "подход Кармака" я так понял это двигать объекты избегая вообще какую либо физику, ну просто потому что тогда нормальный физический движок работал бы очень медленно.
Цитата:
Дядя Миша писал: Вы же поймите, в FPS есть как минимум один нелинейный элемент - сам игрок. Который не подчиняется никаким законам физики, прыгает выше головы, может менять направление движения прямо в воздухе, приседать прямо там же и практически мгновенно останавливаться. И он вам таки сломает всю симуляцию, причём многие этим даже намеренно занимаются.
А если игрока будет давить дверью, он не будет совать туда свой нос почём зря.
И естественно когда ты физическому телу задаёшь перемещение в обход физики начинаются приколы. Вот только из того что ты описал не противоречит классическим физдвижкам, это банальное управление силами и велосити. А вот если просто в тупую менять координаты, то да начинаются приколы, такое сейчас стараются не использовать. Всё делают через АддФорс и Велосити.
А вот чтобы детектировать препятствия это уже надо симулировать законы Ньютона о передаче энергии, а так же нагрузку на исходную силу (мощность). Вообще конечно надо подумать как это лучше реализовать, так с набегу и не скажу.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Кстати соглашусь про нелинейность игрока. Когда пытаются делать физически-корректное управление получается отстой, особенно с прыжками, физически-корректно сохранить вектор на протяжении всего прыжка, затем приземлиться в n точке. Но тогда в воздухе нельзя стрейфиться или прерывать движение, такое управление всегда раздражает, чувствуется "вязким" и не отзывчивым.
Дядя Миша писал: А кто предлагает менять координаты втупую? Ну разве что для телепортации.
Я так делаю потому что не смог пофиксить необнуленную гравитацию типа той которая двигает мертвых монстров.
Да и вообще проще каждый кадр снапать объект куда надо чем разбираться как кейсы без гравитации переключаются на кейсы с гравитацией, периодически наблюдать как игрок улетает в небо из-за твоих косяков (всё как в продуктах у больших дядек кстати!), и думать, "вот у меня щас игрок ползет вниз притягиваясь к точке снапа на рельсу или это просто гравитация"?
Crystallize писал: Я так делаю потому что не смог пофиксить необнуленную гравитацию типа той которая двигает мертвых монстров.
В Юнити для таких случаев есть галочка IsKinematic которая отключает гравитацию у конкретного ригидбоди как раз для таких случаев. Есть ещё метод SetGravity которым тоже можно установить гравитацию персонально для каждого объекта. Методы для Get/Set Velocity, методы AddForce с разной линейностью как раз чтобы делать "нелинейного игрока". Вот чего реально не хватет так это метода который бы определял давление на объект в конкретном месте, приходится строить матрицу из триггеров вокруг игрока чтобы игрок понимал где препятствия и что на него давит.
Цитата:
Unit писал: Кстати соглашусь про нелинейность игрока. Когда пытаются делать физически-корректное управление получается отстой, особенно с прыжками, физически-корректно сохранить вектор на протяжении всего прыжка, затем приземлиться в n точке. Но тогда в воздухе нельзя стрейфиться или прерывать движение, такое управление всегда раздражает, чувствуется "вязким" и не отзывчивым.
Это то что ДМ называет - мешок с говном. На деле мы просто имеем дело с плохо настроенным контроллером, если подобрать параметры то таких приколов не будет. Просто мало кто то с этим заморачивается. А вот прямое вмешательство в велосити и трансформы как и говорил ДМ - ломает физику. Написание собственного плеер контроллера задача не тривиальная и требует учитывать кучу условий. Я пришёл к тому что колайдер игрока вообще должен парить немного над землёй чтобы он не спотыкался за каждый вертекс как в кваках и голд сорсе. Работает супер, но приходится учитывать кучу других вещей.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Вот чего реально не хватет так это метода который бы определял давление на объект в конкретном месте
Так я тебе ровно про то же самое и говорил, когда описывал случай двери, уперевшейся в ящик. А ты сказал что такое никому не нужно, и тут же сам пожаловался что тебе этого не хватает.
FiEctro писал: В Юнити для таких случаев есть галочка IsKinematic которая отключает гравитацию у конкретного ригидбоди как раз для таких случаев. Есть ещё метод SetGravity которым тоже можно установить гравитацию персонально для каждого объекта
Да мне динамически же надо переключать
Цитата:
FiEctro писал: На деле мы просто имеем дело с плохо настроенным контроллером, если подобрать параметры то таких приколов не будет. Просто мало кто то с этим заморачивается.
Ты не победишь иной принцип просто "настройкой параметров", ну если конечно не выкрутишь их в нули и бесконечности.
Цитата:
FiEctro писал: Я пришёл к тому что колайдер игрока вообще должен парить немного над землёй чтобы он не спотыкался за каждый вертекс как в кваках и голд сорсе.
Так и в ГС первые 16 юнитов от пола перешагиваются по умолчанию.
Crystallize писал: Да мне динамически же надо переключать
Так это просто булева переменная, что мешает переключать её в реалтайме? Кстати трение и прыгучесть физического материала тоже можно в реалтайме редактировать.
Цитата:
Дядя Миша писал: Так я тебе ровно про то же самое и говорил, когда описывал случай двери, уперевшейся в ящик. А ты сказал что такое никому не нужно, и тут же сам пожаловался что тебе этого не хватает.
Ты не понял, я говорил что это разные уровни абстракции. Что освновное ядро можно убрать в нативную библиотеку, а такие вещи уже и на самой шоте реализовать. Впрочем это лишь один из вариантов. Вон в гаррис моде на виртуалке вообще физику жидкостей сделали. https://www.youtube.com/watch?v=cFmBL-yD8HI
Цитата:
Crystallize писал: Ты не победишь иной принцип просто "настройкой параметров", ну если конечно не выкрутишь их в нули и бесконечности.
До конца конечно нет, но множество проблем "мешка с говном" можно решить.
Цитата:
Crystallize писал: Так и в ГС первые 16 юнитов от пола перешагиваются по умолчанию.
Я имел ввиду что он постоянно подвешен, а не перешагивает. Вообще трущийся колайдер о пол это крайне плохая идея.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!