Анимация открывания двери

Версия Minecraft
1.12.2
5,021
47
784
Всем здорова! В общем сел, долго думал надо или нет,но все таки решил сделать анимацию открывания дверей. В общем зашел в блокбенч, сделал модель Java вида и... нашел вкладку анимации. Более того, эта анимация экспортируется отдельно в виде вот такого json файла
JSON:
{
    "format_version": "1.8.0",
    "animations": {
        "animation.model.new": {
            "loop": true,
            "animation_length": 3,
            "bones": {
                "bone": {
                    "rotation": {
                        "0.0": [0, 0, 0],
                        "3.0": [0, -90, 0]
                    },
                    "position": {
                        "0.0": [0, 0, 0],
                        "3.0": [5, 0, 7]
                    }
                }
            }
        }
    }
}
Кто знает что это за штука и с чем ее едят как ее прикручивать и вообще куда?
 
5,021
47
784
Этого мода нет в играбельном виде? Что за лол? как так исходники есть а мода нет?:unsure:
Боже я слепой, все))
 
5,021
47
784
Так вроде дошел до кондиции, все себе переписал. Но чет и не понял как анимация делается. В этих значит файлах указывается что анимация это просто плавный переход из одного блокстейта в другой с течением времени, а не просто мгновенно. У того чувака что ты скинул, это дверца микроволновки. Но я так и не понял, где и как мне указать какая именно часть МОЕЙ модели должна поворачивать. Или это в коде, в самом modelrenderer?

Что то точки какие то или что? Блокбенчевский экспортер чет вообще в дичь какую то экспортировал, не похоже на егошний файл. Может он в каком то другом редакторе это делал?
 
5,021
47
784
Короче я что то сделал, но у меня вылезает теперь ошибка:
Java:
[19:05:30] [Client thread/ERROR] [FML]: Unable to find clip open in the model soviet:block/bigdoor_open
Когда я пкмлю по закрытой двери. Но 2 стейт ставится(причем ставится вместе с первым) и мгновенно, а не за время...

К слову при установке сразу сетается open и больше других не происходит.
К слову clip этот open есть:

JSON:
{
    "parameters": {
        "end_anim": [ "compose", [ "+", 1 ] , "#click_time" ],
        "trigger_anim": [ "-", "#end_anim" ],
        "progress": [ "-", "#click_time" ]
    },
    "clips": {
        "closed": "#identity",
        "opening": [
            "trigger_positive",
            [ "slerp", "#closed", "#open", "#identity", "#progress" ],
            "#trigger_anim",
            "!transition:open"
        ],
        "open": [ "apply", "soviet:block/bigdoor_open@open", 0 ],
        "closing": [
            "trigger_positive",
            [ "slerp", "#open", "#closed", "#identity", "#progress" ],
            "#trigger_anim",
            "!transition:closed"
        ]
    },
    "states": [
        "closed",
        "opening",
        "open",
        "closing"
    ],
    "transitions": {
        "closed": "opening",
        "opening": "open",
        "open": "closing",
        "closing": "closed"
    },
    "start_state": "closed"
}
 
5,021
47
784
Это не моя, это у того чела, которого ты скинул.
Структура такая же, те же контейнеры все, как в доках.

В принципе я уже понял что тут к чему в этих джосонах, только никак в толк не могу взять в чем ошибка.
 
5,021
47
784
Никак не могу понять как и откуда берутся куски JSON модели блока, которые должны анимироваться. Как этот теср понимает что нужно двигать а что нет? И почему у меня постоянно горит static: true ? Почему рендерится одновременно обе модели для обоих вариантов?
 
5,021
47
784
Итак, вроде все более менее выяснилось. Я только до сих пор не могу понять почему у меня высвечивается ошибка, когда я устанавливаю состояние "открытое"
JSON:
"clips": {
        "closed": "#identity",
        "opening": [
            "trigger_positive",
            [ "slerp", "#closed", "#open", "#identity", "#progress" ],
            "#trigger_anim",
            "!transition:open"
        ],
        "open": [ "apply", "soviet:block/bigdoor_open@open", 0 ],
        "closing": [
            "trigger_positive",
            [ "slerp", "#open", "#closed", "#identity", "#progress" ],
            "#trigger_anim",
            "!transition:closed"
        ]
    },

Собственно он мне просто говорит что этого клипа(причем не принципе клипа open) а именно клипа с названием который стоит после собаки, ему не удается найти.
Java:
[23:53:23] [Server thread/ERROR] [FML]: Unable to find clip open in the model soviet:block/bigdoor_open
Как выяснилось пальцетыканием, туда можно писать что угодно, он все равно это находить не будет. Я еще попытался аналогичным образом сделать это для closed, и он начал ругаться и на него тоже. А если наоборот поставить "#open" для этого клипа, то начинается какое то лютое переполнение какой то лютой лонг-хешмапы и в итоге все просто виснет. По идее там я привязываю к клипу "open" свою модель открытой двери. То бишь в ключевой точке open анимация должна заканчиваться и должен сетаться стейт open.
Проверка принтланами дала то, что в тайлэнтити все открывается закрывается исправно. В общем, остались лишь вопросы по этому джосону... кто нибудь понимает, что тут к чему? Ну пожалусто...
 
1,038
57
229
Если чо я совершенно без понятия с чем ты там возишься, не работал с этой приблудой
"opening": [ "trigger_positive",
positive орзначает положительную направленность, значит во втором должна точно стоять negative (обратный порядок)

[ "slerp", "#closed", "#open", "#identity", "#progress" ],
это скорее всего состояния, и тут не должно быть open, ты и так в open. Это стопудово.
Состояния это как твои выключатели: вкл или выкл. Slerp тыж посмотрел чо это? линейная интерполяция из одного состояния в другое, то есть в каждый последующий момент времени шаг (допустим перемещения обьекта из позиции кадра 1 в кадр 2) одинаковый

А ещё, negative или positive. Всё можно делать в одном направлении, но ты должен правильно выставить эти состояния друг за другом. У меня примеров нет.

Ну и последняя запятая не нужна.
 
5,021
47
784
Логичное рассуждение...
Нужна запятая, это же не целиком файл.
Вот целиком. Здесь есть состояния и транзиты. Из закрытого в открывающийся, из открывающегося в открытый, из открытого в закрывающийся и из закрывающегося в закрытый. То бишь open и closed это статические обычные модели. Оно тут собственно так и есть.
JSON:
{
    "parameters": {
        "end_anim": [ "compose", [ "+", 1 ] , "#click_time" ],
        "trigger_anim": [ "-", "#end_anim" ],
        "progress": [ "-", "#click_time" ]
    },
    "clips": {
        "closed": "#identity",
        "opening": [
            "trigger_positive",
            [ "slerp", "#closed", "#open", "#identity", "#progress" ],
            "#trigger_anim",
            "!transition:open"],
        "open": [ "apply", "soviet:block/bigdoor@open", 0 ],
        "closing": [
            "trigger_positive",
            [ "slerp", "#open", "#closed", "#identity", "#progress" ],
            "#trigger_anim",
            "!transition:closed"]
    },
    "states": [
        "closed",
        "opening",
        "open",
        "closing"
    ],
    "transitions": {
        "closed": "opening",
        "opening": "open",
        "open": "closing",
        "closing": "closed"
    },
    "start_state": "closed"
}
 
5,021
47
784
то есть в каждый последующий момент времени шаг (допустим перемещения обьекта из позиции кадра 1 в кадр 2) одинаковый
Не совсем понял.. :unsure:


Насчет направления будем беспокоится когда что то хотя бы начнет работать. Пока что же у меня ничего не работает и рендерятся красиво оба состояние и открытое и закрытое.
 
Последнее редактирование:
1,038
57
229
Есть несколько видов анимаций в JavaScript, каждый из которых по своему полезен.
Slerp самая простая, ну вообще линейной называется linear
[IMG='width:156px;']https://learn.javascript.ru/article/js-animation/linear.png[/IMG]
В общем то тут без разница какая из осей является t (время). Но мы будем говорить о нижней
при t=1 (это может быть хоть 1 секунда, хоть 1 минут)
смещение будет тоже равно 1

Стрельба из лука:
[IMG='width:154px;']https://learn.javascript.ru/article/js-animation/back.png[/IMG]
Если мы возьмем например время t=0.3, то увидим что ось Y отрицательная. То есть это отводим стрелу и тетиву назад, до t=0.5 примерно. Далее тетива пытается вернуться в исходное ей положение и выталкивает стрелу вперед.
Главное во всём этом понять, что это может быть не только тетива и стрела.

Это так, голову проветрить.
3680d02610.jpg

Для тебя сейчас это бесполезная информация, если конечно ты не будешь делать свою анимацию.

1) Мы довольно быстро доходим до конечно пункта, но в конце завершаем очень плавно
2) В начале немного замедленно, а потом выходим на обычную линейность (выравниваем скорость)
3) В начале движемся равномерно, в конце немного притормаживаем
4) В начале и в конце, замедленно движемся
 
Последнее редактирование:
5,021
47
784
Спасибо, это все конечно здорово, но хотелось бы все таки разобраться с этой анимацией. Нервов на изучение еще и апи MD мне уже не хватит))
 
5,021
47
784
Там нет ничего. Если бы не примеры которые ты мне скинул и не пример из ботании, который мне скинул шустер, я бы ничего не понял. Доки по этой анимации - говно, facts
 
1,038
57
229
7,099
324
1,510
Сверху