Unity 3D: 10 способов создания анимации [Tutorial]

แชร์
ฝัง
  • เผยแพร่เมื่อ 28 ก.ย. 2024
  • В геймдеве одна из самых частых задач - это что-нибудь проанимировать. Так как игру хочется сделать сочной и приятной глазу, а появление и изменение объектов естественным, то анимируются всякие выезжающие панельки, кнопки, элементы интерфейса, положение внутриигровых объектов, их цвет и размер, а иногда и другие гейплейные параметры. В этом видео я расскажу про разные способы анимировать разные параметры, скажу про их плюсы и минусы, и расскажу ещё о нескольких смежных фичах
    На этом канале регулярно появляются новые видео, которые позволят тебе научиться создавать игры, или подарят новые идеи и вдохновение, если ты уже умеешь. Подписывайся!
    Остались какие-то вопросы, пожелания, или идеи для других видео? Смело пиши в комментарии под видео

ความคิดเห็น • 86

  • @EmeraldPowder
    @EmeraldPowder  5 ปีที่แล้ว +35

    Кстати функции Lerp есть у классов Vector3, Vector2, Quaternion, Color, Mathf.Lerp для чисел (float), про который не все знают, и material.Lerp. И почти у всех из них ещё есть MoveTowards
    А ещё есть 11 способ - функция SmoothDamp, которая собственно для анимации и предназначена, но я про неё совсем забыл когда делал видео..

    • @Legion_Sword_Games
      @Legion_Sword_Games 3 ปีที่แล้ว +1

      Ещё можно было в аниматоре по-кадровую анимацию показать, но в этом случае с машинкой это из разряда частиц)

  • @denb6215
    @denb6215 4 ปีที่แล้ว +12

    Боже где вы были раньше. Лайк и подписка, продолжайте в том же духе. Особенно по теме 2D

  • @n0ra754
    @n0ra754 5 ปีที่แล้ว +91

    Это лучший канал по Unity! Хоть кто то дает много действительно полезной информации без пустой болтовни.

    • @glebster51
      @glebster51 4 ปีที่แล้ว +1

      *без пустой болтовни, макарошек и временами уток)

    • @mrybs
      @mrybs 3 ปีที่แล้ว +1

      Coглaceн

  • @emche852
    @emche852 5 ปีที่แล้ว +15

    Много полезной инфы)
    Удивительно, но для меня стало откровением, что материалы можно анимировать :D
    Всегда это через код делал, а так удобнее и прикольнее)

    • @EmeraldPowder
      @EmeraldPowder  5 ปีที่แล้ว +4

      Да, я вот тоже недавно узнал совершенно случайно, думал что свойства скрипта можно анимировать, максимум переключать материал, но что-то натыкал и очень удивился когда у меня цвет через материал заданый начал меняться)

  • @BasonIndieDev
    @BasonIndieDev ปีที่แล้ว

    Какие простые и в то же время куртые вещи ты рассказываешь! ты крут парень!

  • @deni9652
    @deni9652 4 ปีที่แล้ว +1

    Большое спасибо. Зашёл узнать буквально один момент в анимации, а узнал столько нового! Спасибо!!!

  • @NickBardier
    @NickBardier 5 ปีที่แล้ว +3

    Спасибо большое за видео, все четко и понятно, притом что я только начал изучать unity.

  • @Alex-hs8xj
    @Alex-hs8xj 4 ปีที่แล้ว +1

    очень крутая подача, спасибо!

  • @boristyulkin8951
    @boristyulkin8951 5 ปีที่แล้ว +8

    Спасибо за еще одно полезное видео)
    А как ты запустил игру для проверки с разным количеством фпс?

    • @EmeraldPowder
      @EmeraldPowder  5 ปีที่แล้ว +4

      QualitySettings.vSyncCount = 0;
      Application.targetFrameRate = fps;
      Не то чтобы научно точный метод измерения, но и у реальных игроков будет не ровно 5 фпс всегда а он будет скакать, если тормозит

    • @boristyulkin8951
      @boristyulkin8951 5 ปีที่แล้ว

      @@EmeraldPowder спасибо, надеюсь я не сильно достаю вопросами под каждым вторым видео)

    • @EmeraldPowder
      @EmeraldPowder  5 ปีที่แล้ว +6

      Да нет конечно, наоборот говорят комменты под видео поднимают их в глазах алгоритмов ютуба)

  • @MaxuhaNax
    @MaxuhaNax 5 ปีที่แล้ว

    Ох круто, для меня, как для новичка информация очень легкая и позновательная, спасибо!

  • @yevhen-studio
    @yevhen-studio 4 ปีที่แล้ว +1

    можно проанимировать в какой-то внешней тулзе типа Spine, Dragonbones и импротнуть в проект, для 3д в редакторах типа blender, maya, 3dsmax
    можно не только в корутинах а в асинхронных методах async/await они лучше чем корутины
    DOTween заслуживает большего внимания так как считаю это один из лучших способов на самом деле анимации
    можно проанимировать в шейдере + шейдер граф уже есть новый

  • @djiexn
    @djiexn 2 ปีที่แล้ว

    спасибо Позаимствовал moveTowards способ

  • @aloYoba
    @aloYoba 3 ปีที่แล้ว +1

    Огромное спасибо за видео! Вы могли бы подсказать, какие из перечисленных методов (кроме доп. плагина), являются наиболее ресурсоемкми, тяжелыми для игры? И какие наиболее легкими. Или они +/- равны, и разницы в производительности не будет?

  • @Kitsikoo
    @Kitsikoo 2 ปีที่แล้ว +1

    А почему есть зависимость от фпс, если уже используется Time.deltaTime?

  • @Skyman759626
    @Skyman759626 4 ปีที่แล้ว

    Ты просто шикарен

  • @assasinvm
    @assasinvm 3 ปีที่แล้ว +1

    А как сделать покадровые анимации для 3D объектов (для voxel воды )?

  • @NewUser78654
    @NewUser78654 ปีที่แล้ว

    3.15 Трансформ позишн зависит от фпс? По моему тут Update зависит от фпс и мы без проблем можем написать Трансформ в FixedUpdate. И тогда на любых фпс объект пройдет равное расстояние. Насколько я понимаю, в Update вообще нельзя писать код расчета т.к. априори этот метод зависит от частоты экрана. Только для отображения,
    Где передвижение объекта с помощью вектора? Трансформ это же мгновенное перемещение, без приложения силы и прочего - итого та-же машина будет без физики, без движения по инерции и т.д. Не используется физический движок.

  • @renatmukhametshin7586
    @renatmukhametshin7586 3 ปีที่แล้ว

    Спасибо, очень информативно. У меня возникла проблема, если данные скрипты использовать по отношению к элементам UI, то они почему-то моментально телепортируются к месту назначения, как это исправить?

  • @мороззадубейко
    @мороззадубейко 3 ปีที่แล้ว

    классный канал!!

  • @mn4840
    @mn4840 2 ปีที่แล้ว

    пример с поворотом и перемещением одновременно был бы полезнее.

  • @goto1212
    @goto1212 5 ปีที่แล้ว +2

    а где можно узнать подробнее о системе частиц?

    • @EmeraldPowder
      @EmeraldPowder  5 ปีที่แล้ว

      Я обычно смотрю всяких ютуберов которые создают всякие прямо очень классные эффекты, смотрю что они тыкают. Там с этими частицами вроде бы всё просто, задаёшь просто скорость, форму, размер.. но вот всё это скомпоновать в красивый эффект это вот искусство. Вот к примеру кто-то на кого подписан: th-cam.com/users/TheMirzaBeigvideos

    • @goto1212
      @goto1212 5 ปีที่แล้ว

      @@EmeraldPowder Спасибо

    • @boristyulkin8951
      @boristyulkin8951 5 ปีที่แล้ว

      Есть еще например русский канал, ErbGameArt, тоже крутые штуки делает

    • @geedroponika
      @geedroponika 5 ปีที่แล้ว

      здесь можно perevodvsem.ru/threads/pluralsight-unity-particle-system-fundamentals-eng-rus.6348/

  • @whatka4242
    @whatka4242 5 ปีที่แล้ว

    Читал что анимировать через изменение position - это не лучший вариант (херит производительность). И предпочтительней использовать addForce.

  • @Kee1L
    @Kee1L 5 ปีที่แล้ว

    Круто

  • @KJPiGames
    @KJPiGames 4 ปีที่แล้ว

    Можно спросить если использовать аниматор в качестве корня для анимаций вес приложения под андроид будет больше или это не влияет?

    • @EmeraldPowder
      @EmeraldPowder  4 ปีที่แล้ว

      Анимации не очень много места занимают обычно, если там не сотни объектов и ключевых кадрах, вроде скелетов всяких. Но для таких сложных случаев особо альтернатив аниматору все равно нет

  • @Заработоквинтернете-д1л
    @Заработоквинтернете-д1л 3 ปีที่แล้ว

    0:19 как так же делать уровни?

  • @polus818
    @polus818 4 ปีที่แล้ว

    Где ты взял пункт Animation я МАКСИМУМ могу добавить animatoR то что мне не надо?

    • @discothunder3820
      @discothunder3820 4 ปีที่แล้ว

      Сверху нажми на windows и там найдешь если ещё актуально

  • @xephosbot
    @xephosbot 4 ปีที่แล้ว

    А можно ли при помощи системы частиц реализовать такую анимацию, когда в 2д игре подбираешь монетку и монетка как бы летит к определенной точке UI

    • @EmeraldPowder
      @EmeraldPowder  4 ปีที่แล้ว +1

      Тут наверное система частиц не очень подойдёт, лучше просто сразу удалять монетку из мира, спаунить в той же точке экрана на UI, и скриптом двигать к нужной точке

    • @xephosbot
      @xephosbot 4 ปีที่แล้ว

      @@EmeraldPowder я думал о таком варианте, но мне казалось что это будет костыль и есть способ проще)
      Просто во многих играх такое реализовано и там монета может не одна быть. Допустим открываешь сундук с монетами и небольшая куча монет летит в сторону счётчика. Не спавнить же думаю 20 монеток.

  • @evagangart5035
    @evagangart5035 5 ปีที่แล้ว

    Вау)

  • @unitynavigator3328
    @unitynavigator3328 5 ปีที่แล้ว

    Есть знания про cel shaded? Чтобы имитировать графику как в серии borderlands.

    • @EmeraldPowder
      @EmeraldPowder  5 ปีที่แล้ว

      Видел пару примеров такого шейдера где-то, но сам не делал. Вообще шейдеры без шейдер-графа это тема интересная, и эффекты можно получить очень крутые, но там математики полно, и я сам не так много их писал. Как раз пытался недавно воссоздать что-то похожее на стиль The Legend of Zelda, но ничего внятного так и не получилось

    • @unitynavigator3328
      @unitynavigator3328 5 ปีที่แล้ว

      @@EmeraldPowder в любом случае жду видосов. (и все еще надеюсь на 2D динамические тени - от врагов, колон и т.д.)))

  • @SekundaPrikola
    @SekundaPrikola ปีที่แล้ว

    Для топ даун гонок есть 3 способа
    1) .AddForce (добавление силы для физики)
    2) transform.Translate (перемещение через трансформацию)
    3) velocity (меняет силу объекта)

  • @АндрейНезенко
    @АндрейНезенко 4 ปีที่แล้ว

    Наканецта я тебя нашол

  • @Дитякуплинова
    @Дитякуплинова ปีที่แล้ว

    Какой же ты умный

  • @VyacheslavTamplier
    @VyacheslavTamplier 4 ปีที่แล้ว +16

    Автор делится своими реальными наработками и делает это максимально просто и открыто. Спасибо ему за это! Редко такой альтруистический подход можно встретить на просторах ютуба. Однозначно подписка.
    P.S.: продолжай в том же духе!

  • @Aeralise
    @Aeralise 3 ปีที่แล้ว +4

    Про движение через корутину, пожалуй, добавлю, что, наверное, в yield return вместо null лучше использовать new WaitForFixedUpdate(), ибо по себе понял, что при null, во-первых, скорость движения завязана на фпс, а во-вторых, если в игре можно ставить паузу (Time.timeScale = 0), то такой объект продолжит двигаться, когда как всё остальное замирает

    • @Kawabatushka
      @Kawabatushka ปีที่แล้ว

      Вот это да! Не представляю, как бы я этот баг исправил в своём проекте

  • @MrRomanba
    @MrRomanba 4 ปีที่แล้ว +2

    Анимация машинки через систему частиц была неожиданной :D Спасибо за видео, очень доходчиво и подробно объяснил!

  • @Ivan_Larsen
    @Ivan_Larsen 2 หลายเดือนก่อน

    Вау! Столько годной информации! Спасибо за видео! Хотелось бы, чтобы канал "ожил". Всего Вам наилучшего!

  • @ВячеславКоуров-г7ь
    @ВячеславКоуров-г7ь ปีที่แล้ว

    Вродь можно ещё InvokeRepeating'ом анимацию накодить, если божьей кары не боишься 🙃

  • @Giblotus
    @Giblotus ปีที่แล้ว

    Замени приписку Tutorial на обзор, и не вводи в заблуждение. В видео показаны возможности, а не руководство как пользоваться. Фраза с стиле "тут надо нажать пару кнопочек" - это не туториал.

  • @mrgoodpeople
    @mrgoodpeople 7 หลายเดือนก่อน +1

    Как бороться с тем, что если на объекте есть камера и компонент Rigidbody, но нужно делать ещё и вручную смещение через изменение transform.position, то не работает нормально режим интерполяции Interpolate. Всё дергается. Помогает смена режима на Extrapolate, но он не такой плавный, на глаз видны подёргивания. Знаю, что не рекомендуется вручную менять position, но вот прямо очень нужно!
    Думал функция MoveTowards поможет, но нет. Пытался даже через физику как-то хитро сделать, типо разовый AddForce, а потом ещё раз AddForce, но с противоположенным значение силы. Ничего не выходит...

    • @ПетрСуворов-б5ь
      @ПетрСуворов-б5ь 6 หลายเดือนก่อน

      Движение камеры отдельным скриптом прописано? Может попробовать тогда её движение прописать в LateUpdate?
      А вообще в целом не очень понятна история со смещением.. Может подойдёт какой-то кратковременное прямое изменение rigidbody.velocity? Без общего понимания ситуации сложно подсказать конечно

    • @mrgoodpeople
      @mrgoodpeople 6 หลายเดือนก่อน

      @@ПетрСуворов-б5ь Спасибо за ответ! Камера жёстко прикреплена к объекту, на котором висит Rigidbody и движется вместе с ним. Если подробнее, то речь о авиасимуляторе. Весь основной код движения находится в FixedUpdate и сделан через применение сил. Однако (так уж сложилось) ветер был сделан через ручное смещение. То есть каждый кадр в самом конце FixedUpdate дополнительно делается position +=.

    • @mrgoodpeople
      @mrgoodpeople 6 หลายเดือนก่อน

      @@ПетрСуворов-б5ь то есть компонент камеры висит на том же объекте, где и компонент Rigidbody, а не является отдельным объект, поэтому скрипта для её перемещения нет, только иногда для смены вида и вращения (если нужно).

    • @ПетрСуворов-б5ь
      @ПетрСуворов-б5ь 6 หลายเดือนก่อน

      @@mrgoodpeople ох, даже не знаю что посоветовать.. У самого опыта маловато) но по ощущениям вот такое вмешательство в позицию будет дёргать кадр всё равно. Может для ветра ввести коэффициент, который будет влиять на применяемую силу? Вроде как и звучит логично, и будет только физические взаимодействия

    • @mrgoodpeople
      @mrgoodpeople 6 หลายเดือนก่อน

      @@ПетрСуворов-б5ь да, с ветром вообще тяжело выходит =). я почему его и сделал так через перемещение, что это было проще. А теперь уже менять сложно. Дело в том, что ветер должен давать конкретный сдвиг для движения самолёта, а не абы какой. Проще всего было контролировать это вручную. И если я попытаюсь делать это через силы (или меняя свойство velocity), то перестаёт корректно работать весь остальной код, ведь там изменится боковой угол сноса. Я конечно думал изначально сделать ветер через силы, но запутался немного как это правильно сделать =). И решил пойти коротким путём, который теперь мешает всё поменять, слишком уж много на этот position+= завязано стало. Боюсь поломать...

  • @mrkickasser1566
    @mrkickasser1566 4 ปีที่แล้ว +1

    Это что за ведро должно быть чтобы 2д игра лагала?) Самсунг Гэлакси Эс 20 на Эксиносе что ли?))

    • @EmeraldPowder
      @EmeraldPowder  4 ปีที่แล้ว +1

      Это не от ведра зависит, а от игры) И от того что там в ней есть, и от того как она написана. Та же фактория какая-нибудь, или Террария, там есть чему тормозить. На мобилках вот не припомню ничего с такой сложной логикой чтобы тормозило прямо из-за неё, но думаю что-то тоже есть

  • @PS-vj6jz
    @PS-vj6jz 5 ปีที่แล้ว +2

    Тебе нужно сделать видос для самых зелёных джунов в плане VFX. Чтобы объяснить, в чем основы работы с частицами, что нужно применить/наложить, какие параметры и тд. Готов подождать:)

    • @EmeraldPowder
      @EmeraldPowder  5 ปีที่แล้ว +1

      Эффекты и частицы я люблю, но помню когда с VFX Graph ещё игрался очень уж долго пытался что-нибудь достаточно красивое сделать, чтобы было достойно видео) Но если придумаю классный эффект то возможно сделаю

    • @PS-vj6jz
      @PS-vj6jz 5 ปีที่แล้ว +1

      Тебе нужно сделать видео уроки. Если есть желание. На самые основы. Из чего состоит анимация этих частиц, что лежит в их основе (3д объекты, если я правильно понимаю) стандартные инструменты (ноды), которыми чаще всего пользуются. Например, мы сегодня будем делать то-то, чтобы это сделать нужен такой объект, и такие ноды, каждая года отвечает за то-то. Объяснить какие у них параметры и за что отвечают. Какие нибудь стандартные фишки, эффекты. Грубо говоря с самых начал. Просто ты объясняешь для понимающих, я примерно понимаю ход мыслей, но если придумать мне задачу, я ее не сделаю.

    • @EmeraldPowder
      @EmeraldPowder  5 ปีที่แล้ว

      @@PS-vj6jz Да, у меня не начального уровня уроки. в основном. А ноды ты имеешь ввиду эти модули которые в стандартной системе частиц, или те которые надо линиями соединять, в VFX Graph?

    • @PS-vj6jz
      @PS-vj6jz 5 ปีที่แล้ว

      @@EmeraldPowder я с системой частиц вообще не знаком. Имел ввиду граф, думал, что это следующая стадия развития частиц в Юнити. Вот и встаёт вопрос, делать тебе их или как. Видосы для обучения.

    • @EmeraldPowder
      @EmeraldPowder  5 ปีที่แล้ว

      @@PS-vj6jz Да, граф вроде как новый, но он ещё не до конца готов, да и у него есть некоторые ограничения. Так что обычная система частиц более практически применима

  • @МирославМалюсейко
    @МирославМалюсейко 4 ปีที่แล้ว

    На самом деле написать мне кроме спасибо нечего, но чтоб ютюб видел, что тут классно напишу коммент.)

  • @ai-arts-manet
    @ai-arts-manet 4 ปีที่แล้ว

    Присоединюсь к комментаторам - ваш канал один из лучших по Unity. Если будет минутка расскажите пожалуйста как можно преодолеть одну неприятную особенность анимации - если параллельно с ней идет корутина с загрузкой данных из сети (UnityWebRequest), то анимация фризится (как бы подлагивает). Можно ли как-то сделать её плавной?

  • @ulbossyn23
    @ulbossyn23 3 ปีที่แล้ว

    Добрый вечер! А как создать игру если Windows (32-bite)?
    И можно создать на Unity тренажер для учеников по сборке ПК?

  • @clayman4549
    @clayman4549 4 ปีที่แล้ว

    Чтобы избежать геморроя с deltatime почему не показали метод FixedUpdate? Там фпс фиксированный в lerp можно обычный float засунуть и контролировать позицию

    • @EmeraldPowder
      @EmeraldPowder  4 ปีที่แล้ว

      Да, FixedUpdate можно использовать, тоже хороший вариант. Там в идеале тоже нужно домножать на Time.fixedDeltaTime, но он никогда не меняется, так что можно и просто константы пихать, и lerp будет одинаково всегда работать.

    • @yevhen-studio
      @yevhen-studio 4 ปีที่แล้ว +1

      так себе идея по большей части FixedUpdate для модельных апдейтов(как физика например), я для визуала как анимации то нужно использовать обычный апдейт
      FixedUpdate - может быть вызван несколько раз за кадр а может быть вообще не вызван. это вообще не нужно для анимации

  • @psi4042
    @psi4042 3 ปีที่แล้ว

    Ничего не понял, но очень интересно

  • @bogotoff
    @bogotoff 5 ปีที่แล้ว

    Первый способ Lerp может работать нормально независимо от FPS.
    Попробуй сделать так:
    pos = Vector3.Lerp(pos, targetPos, 1 - Mathf.Exp(Mathf.Log(1 - R / 60) * 60 * Time.deltaTime));
    R влияет на кривизну графика функции, нужно подбирать методом тыка. Например подставь R=1.2 чтобы было похоже на обычный лерп.

    • @EmeraldPowder
      @EmeraldPowder  5 ปีที่แล้ว

      Да, какая-то формула точно существует с которой всё будет правильно работать. Но всё равно понятнее код будет если сохранить начальное положение и через него сделать

    • @bogotoff
      @bogotoff 5 ปีที่แล้ว

      @@EmeraldPowder Согласен, но если например хочется сделать камеру, которая плавно следует за персонажем, то лучше через эту формулу

    • @yevhen-studio
      @yevhen-studio 4 ปีที่แล้ว

      используй DOTween и не городи костыли