Делаем кривую Безье в Unity !

Поділитися
Вставка
  • Опубліковано 1 жов 2024
  • Ссылка на скрипты из урока - cloud.mail.ru/...
    В этом уроке показываю как в Unity создать кривую Безье. Пишем код на C#.
    Обычно в компьютерной графике используется построение кривой по 4-м точкам, как я и показываю в видео. Но можно провести ее и через 3 точки, а также через произвольное число точек. В Википедии есть гифки как это выглядит.
    ru.wikipedia.o...

КОМЕНТАРІ • 170

  • @purplepavel5596
    @purplepavel5596 4 роки тому +58

    Классное видео, хочется увидеть как генерить большие сплайны:3

  • @UnkleStepa
    @UnkleStepa 4 роки тому +59

    Магия Безье пропала, теперь это подвластно простым смертным! ) Спасибо огромное, так доходчиво никто не объясняет! )

  • @unonim1759
    @unonim1759 Рік тому +6

    Вот это совпадение! У создателя кривой Безье была фамилия Безье!

  • @icefox2853
    @icefox2853 3 роки тому +15

    Я думал это что-то очень сложное, содержащие в себе всю высшую математику, а это оказалось не так уж и сложно! Спасибо за информацию.

  • @LoerkW
    @LoerkW 3 роки тому +2

    тут 854 лайк, где видос про большой сплайн ?)

  • @nottoday9961
    @nottoday9961 4 роки тому +21

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

  • @МаксимЛогинов-ъ6т
    @МаксимЛогинов-ъ6т 4 роки тому +9

    Хороший канал. Где активность подписчиков ? О_о

    • @EccentricGames
      @EccentricGames  4 роки тому +2

      У тебя тоже хорошие видео на канале

  • @Абвгд-м5ю
    @Абвгд-м5ю 9 місяців тому +1

    что так все пугаются производных? это же просто разница между первым результатом функции и втором выраженная функцией

  • @-unity1357
    @-unity1357 3 роки тому +3

    А где обещанное продолжение?)

  • @DenisB-d5f
    @DenisB-d5f 3 роки тому +2

    Вроде бы вот оно, алгебра и геометрия пригодились.
    Только вот толку? Все забыто было уже через месяц после контрольных.
    Еще одно подтверждение, что нахер не нужно все это в школе изучать без надобности.
    Мне понадобилось - сейчас сяду и разберусь.
    Лучше б гулял, вместо этой конченной школы, где я на пятерки учился.

  • @АртурГригорян-ь6х

    Я сделал несколько участков, но у меня скорость объекта на каждом участке разная. Из-за длины участка, очевидно. Кто-нибудь знает как справиться с этим?

  • @maksimsazanovich6087
    @maksimsazanovich6087 Рік тому +1

    кто ждет видео с большим сплайном, поставьте лай, что автор заметил

  • @AndreyDioX2000
    @AndreyDioX2000 2 роки тому +1

    Отличное видео, но где продолжение с большим количеством точек?

  • @antonzhavner1750
    @antonzhavner1750 3 роки тому +6

    Илья - учитель от бога👍
    Смотрится интересно и понятно с порцией шуток и частичкой научности.
    Смотрю когда на канале больше тысячи лайков, очень хочется урок про большой сплайн🙏
    Надеюсь когда нибудь попаду на твой курс, большое спасибо за труды

  • @andrzejhubski3629
    @andrzejhubski3629 2 роки тому +1

    Что там по поводу путей с помощью кривой безье?

  • @cachatt
    @cachatt 2 роки тому +2

    Их можно использовать для системы строительства дорог.

  • @ag7720
    @ag7720 Рік тому +1

    Шутка со старштклассником огонь!

  • @Ssnake707
    @Ssnake707 7 місяців тому +1

    Где обещанное продолжение?)

  • @co6op13
    @co6op13 3 роки тому +1

    Почему нет продолжения????

  • @Apostoliuk
    @Apostoliuk 2 роки тому +1

    А когда будет урок по путям безье ?

  • @mirNpeace
    @mirNpeace 3 роки тому +3

    можно было бы вынести эти 4 аргумента в отдельный класс + степени с помощью Mathf.Pow() сделать(если не ошибаюсь). Ролик классный, спасибо

  • @zerozek4866
    @zerozek4866 4 роки тому +2

    Хочу увидеть урок большие сплайны

  • @maxwad
    @maxwad 3 роки тому +1

    Илья, ты выпустил ролик по большим сплайнам?) Запрос на него остался - ты очень интересно рассказываешь и доступно объясняешь, так что не давай таланту простаивать.)

  • @TERMOGAD
    @TERMOGAD 2 роки тому +1

    Великолепно

  • @AnderX003
    @AnderX003 3 роки тому +1

    Ждём видео про большой сплайн

  • @m4x_mwg
    @m4x_mwg 19 днів тому

    Очень круто, сними видео пожалуйста про то, как сделать канат через точки, в целом заполнение кривой объектами, это будет удобно для создание дорог путей, веревок и т.д. 1:37

  • @altkun_
    @altkun_ 3 роки тому +1

    лютая годнота!

  • @1037dragon1037
    @1037dragon1037 4 роки тому +2

    Опять ебучие производные вспомнить пришлось) инфа Вери полезная, спасибо, ты классный

  • @LosashExote
    @LosashExote 3 місяці тому

    Спасибо! Мне требовалось реализовать этот алгоритм на другом языке программирования, не связанный с Unity, но все равно воспользовался вашим объяснением из начала ролика, чтобы понять принцип.

  • @suvorik1825
    @suvorik1825 5 місяців тому

    спасибо, довольно полезный и интересный инструмент)

  • @darkkk_bloood
    @darkkk_bloood 6 місяців тому

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

  • @stasian.tip.official
    @stasian.tip.official 11 місяців тому

    а для чего нужен Mathf.Clamp01

  • @dastan331
    @dastan331 Рік тому

    Приветствую! Кстати лайков больше 2к, а ты обещал продолжение по кривым.

  • @СергейХвощев-д2й
    @СергейХвощев-д2й Місяць тому

    Математику не боимся. У меня по вышке 5 было еще в 70-х годах

  • @viktorrayman7407
    @viktorrayman7407 3 роки тому

    Можно пожалуйста для самых маленьких и тупых, как заставить объект автоматически двигаться по безье

  • @mactepmac
    @mactepmac Рік тому

    А можно продолжение увидеть? чтобы траектории строить

  • @antonpashkevich2820
    @antonpashkevich2820 2 роки тому

    1.5 к лайков, а продолжений видео нету... Ну ешки кошки...
    Что за подстава?

  • @helloypiple3281
    @helloypiple3281 Рік тому +2

    А ещё так приятно видеть как пригождаются производные

  • @АлександрЕлисеев-х4ы

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

  • @ИграетБуянит
    @ИграетБуянит Рік тому

    Спасибо огромное! Использовал твой урок для создания скрипта удобного спавна и последующей настройки в редакторе элементов по кривой. Пилю игру на ЯИ. :)
    Я вот тут подумал: может быть успех твоей первой игры на ЯИ как-то связан с твоей кармой??? )))

  • @romaklassman9924
    @romaklassman9924 4 роки тому +4

    Классное видео

  • @unsuigo6426
    @unsuigo6426 3 роки тому +1

    Привет. Ты сказал что если будет 300 лайкщв , сделаешь про длинную кривую видос. ))

  • @BorisAverin
    @BorisAverin 2 роки тому

    Подписка
    Одно из самых шикарных видео по юнити.

  • @notteabut
    @notteabut Рік тому

    Как сделать, чтобы в 2D работало на спрайтах?

  • @novus__ordo
    @novus__ordo 2 роки тому

    Ты очень крутой. Лайк и подписка.

  • @helloypiple3281
    @helloypiple3281 Рік тому +1

    Действительно полезное видео
    Объяснил всё просто шикарно
    Я думаю подбирать монетки таким образом, отличное применение кривых Безье
    Вероятно воспользуюсь этим

  • @ОлегЛеонов-о3в
    @ОлегЛеонов-о3в 3 роки тому +1

    Первый в жизни лайк поставил, чел, СПАСИБО ОГРОМНОЕ!!!

  • @skarabeydm
    @skarabeydm 3 роки тому

    Кстати, когда видос про большую курву?

  • @nikitavarbin4076
    @nikitavarbin4076 4 роки тому +4

    Было бы круто, если бы Вы делали больше материала по всяким штукам из математики(алгоритмам) которые исрользуются в играх. Что бы их можно было бы применить в Unity. Так как таких видео очень мало на русском языке. Можно взять материал из канала Sebastian Lague. Было бы круто, если бы вы его адаптировали на русский язык. Спасибо за видео, было очень интерестно узнать про кривую Безье. Я уверен такой алгорит пригадится мне в будущем.

    • @EccentricGames
      @EccentricGames  4 роки тому +1

      Да, мне нравится канал Sebastian Lague. Буду на него ориентироваться.

    • @Racingstream
      @Racingstream 4 роки тому

      @@EccentricGames лайки подбираются к 300, поэтому есть надежда увидеть видео про большие сплайны :). Но, на самом деле, больше хочется увидеть не столько большие сплайны (их можно сделать после просмотра данного ролика по образу и подобию), а как подобные вещи делаются через editor. Как я понял, если делать через monobehaviour, то при билде игры объект с кривыми остается в сцене, а при работе через editor его не будет. У Sebastian Lague курс, конечно, крутой, но не хватает подробностей механизма работы классов эдитора и его взаимодействия с monobehaviour. В любом случае спасибо, т.к. это видео мне здорово помогло.

  • @kachgamer4432
    @kachgamer4432 3 роки тому

    Уже 700 лайков записывай видео!!!!

  • @redmanone3724
    @redmanone3724 3 роки тому +1

    О господи боже мой, пол года назад учил производную и забыл, не думал что такое может пригодиться, фантастика

  • @datodavita1212
    @datodavita1212 3 роки тому +1

    takie godnie veshi i iest ochen lubimi vashi dlia polzovateliax zaslujenni like tebe bravo i vot t ak derjis

  • @igorshats1766
    @igorshats1766 11 місяців тому +1

    Для тех кто хотел скрипт по кривым высокого порядка (с большим количеством точек):
    using System.Collections.Generic;
    using System.Linq;
    using UnityEngine;
    public class BezierRoad : MonoBehaviour
    {
    private Vector3[] _points;
    [SerializeField]
    private Transform[] _knees;
    [Range(0, 1)]
    public float t;
    [SerializeField]
    private Transform _movableObject;
    private void Awake()
    {
    _points = new Vector3[_knees.Length];
    for (int i = 0; i < _knees.Length; i++)
    _points[i] = _knees[i].position;
    }
    private void OnDrawGizmos()
    {
    _points = new Vector3[_knees.Length];
    for (int i = 0; i < _knees.Length; i++)
    _points[i] = _knees[i].position;
    int sigmentsNumber = 20;
    Vector3 preveousePoint = _points[0];
    for (int i = 0; i < sigmentsNumber + 1; i++)
    {
    float paremeter = (float)i / sigmentsNumber;
    Vector3 point = CalculateBezierPoint(paremeter, _points.ToList());
    Gizmos.color = Color.white;
    Gizmos.DrawLine(preveousePoint, point);
    Gizmos.color = Color.green;
    for (int j = 0; j < _points.Length - 1; j++)
    Gizmos.DrawLine(_points[j], _points[j + 1]);
    preveousePoint = point;
    }
    }
    private void Update()
    {
    _movableObject.position = GetPointOnBezierCurve(_points.ToList(), t);
    }
    public static Vector3 GetPointOnBezierCurve(List controlPoints, float t)
    {
    int n = controlPoints.Count - 1; // порядок кривой
    Vector3 point = Vector3.zero;
    for (int i = 0; i

    • @RalanMad
      @RalanMad 12 днів тому

      я понимаю, что давно неписан коммент, но мало ли) Как в этом коде поворачивать объект вдоль кривой?

    • @igorshats1766
      @igorshats1766 12 днів тому

      @@RalanMad я плохо понял ваш вопрос, к сожалению сейчас не могу уделить ему время, но я закинул в чат гпт и он выдал вот такое решение. Решение я не тестировал, но надеюсь это вам поможет:)
      using System.Collections.Generic;
      using System.Linq;
      using UnityEngine;
      public class BezierRoad : MonoBehaviour
      {
      private Vector3[] _points;
      [SerializeField]
      private Transform[] _knees;
      [Range(0, 1)]
      public float t;
      [SerializeField]
      private Transform _movableObject;
      [SerializeField, Tooltip("Малое значение для вычисления тангенса")]
      private float deltaT = 0.01f;
      private void Awake()
      {
      _points = new Vector3[_knees.Length];
      for (int i = 0; i < _knees.Length; i++)
      _points[i] = _knees[i].position;
      }
      private void OnDrawGizmos()
      {
      _points = new Vector3[_knees.Length];
      for (int i = 0; i < _knees.Length; i++)
      _points[i] = _knees[i].position;
      int segmentsNumber = 20;
      Vector3 previousPoint = _points[0];
      for (int i = 0; i < segmentsNumber + 1; i++)
      {
      float parameter = (float)i / segmentsNumber;
      Vector3 point = CalculateBezierPoint(parameter, _points.ToList());
      Gizmos.color = Color.white;
      Gizmos.DrawLine(previousPoint, point);
      Gizmos.color = Color.green;
      for (int j = 0; j < _points.Length - 1; j++)
      Gizmos.DrawLine(_points[j], _points[j + 1]);
      previousPoint = point;
      }
      }
      private void Update()
      {
      // Получение текущей позиции на кривой
      Vector3 currentPos = GetPointOnBezierCurve(_points.ToList(), t);
      // Вычисление предыдущей позиции для направления движения
      float adjustedT = Mathf.Clamp01(t - deltaT); // Ограничиваем t, чтобы оно не вышло за пределы [0, 1]
      Vector3 previousPos = GetPointOnBezierCurve(_points.ToList(), adjustedT);
      // Определение направления движения
      Vector3 direction = (currentPos - previousPos).normalized;
      // Установка позиции объекта
      _movableObject.position = currentPos;
      // Вращение объекта по направлению движения
      if (direction != Vector3.zero) // Проверяем, чтобы избежать вращения, если нет направления
      {
      _movableObject.rotation = Quaternion.LookRotation(direction);
      }
      }
      public static Vector3 GetPointOnBezierCurve(List controlPoints, float t)
      {
      int n = controlPoints.Count - 1; // порядок кривой
      Vector3 point = Vector3.zero;
      for (int i = 0; i

  • @1mpulse696
    @1mpulse696 2 роки тому

    1.5к лайков есть, а проды нет(

  • @mar_kha
    @mar_kha 3 роки тому

    12:46 достаточно канала "Математика без х**ни")

  • @vitaliySobakinson
    @vitaliySobakinson Рік тому

    Где видео про большой сплайн?))

  • @nivikantavo4667
    @nivikantavo4667 3 роки тому +1

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

  • @vishnia445
    @vishnia445 10 місяців тому

    Где видео с большим количеством точек?

  • @ВячеславРустамян-н2х

    Наберем 300 господа!

  • @flightdrone1960
    @flightdrone1960 2 роки тому

    А как запустить движение при старте?

  • @DrZupan
    @DrZupan 2 роки тому

    наконец-то я понял, что такое lerp!!!

  • @serhiybabchuk5977
    @serhiybabchuk5977 4 роки тому +1

    Привет, интересный урок, давайте лайкайте интересно продолжение.

  • @ТерриМакГиннис
    @ТерриМакГиннис 3 роки тому

    Где видео про большой сплайн?

  • @AtlanticCG
    @AtlanticCG 4 роки тому +1

    -Сейчас будет немножечко математики, не пугайтесь!
    как у зубного: "а сейчас будет немножечко больно" :D

  • @alexeybunin2927
    @alexeybunin2927 2 роки тому

    Так продолжение то будет?

  • @99k27
    @99k27 3 роки тому +1

    ты просто лучший! максимум полезной информации за 14 минут

  • @bulinchik1889
    @bulinchik1889 10 місяців тому

    Он все ещё не сделал сложную безье (

  • @MVMSE
    @MVMSE 3 роки тому

    У меня постоянно Юнити намертво зависает при визуальном построении кривой через Гизмос. При сохранении префаба - тоже

  • @PILZMAN
    @PILZMAN 3 роки тому

    Саша, ты ювелир

  • @kotikovdmitry4274
    @kotikovdmitry4274 4 роки тому +1

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

  • @Maxim325
    @Maxim325 3 роки тому

    777 лайков. 22 мая 2021-го.

  • @maks94express
    @maks94express 2 роки тому

    А можно ли сделать безьё в качестве лески для удилища? Ну,для своей игры.

    • @FloatingGames
      @FloatingGames 8 місяців тому

      Можно конечно но зачем

  • @NafisKhalilov
    @NafisKhalilov 4 роки тому +2

    Стоит явно упомянуть, что безье можно строить на произвольном количестве точек. И как-то мне проще понимать формулы было если начинать расписывать с двух точек, хотя лерп тоже для по своему удобен.

    • @EccentricGames
      @EccentricGames  4 роки тому +1

      Да, согласен, стоило упомянуть

    • @QueenElizabeth1sth
      @QueenElizabeth1sth 4 роки тому

      А как это реализовать через код?

  • @goosesuka
    @goosesuka Рік тому

    а как сделать кривую для прыжка регулировать прыжок я где-то видел и забыл как это называется

    • @Toki-
      @Toki- 8 місяців тому

      Скорее всего ты говоришь про Amination Curve=)
      Кстати, 7 месяцев прошло, как с проектом?

  • @Arko698
    @Arko698 3 роки тому

    Как можно изменить ротацию объекта на определённых промежутках ?

  • @kickone-1
    @kickone-1 2 роки тому

    Увлекательно 😊

  • @ilhanilhanDev
    @ilhanilhanDev 4 роки тому +1

    для дракона самое то, для полета хех

  • @KabanKabanus
    @KabanKabanus 2 роки тому

    Очень хороший урок, большое спасибо! Жаль, что про большой сплайн видео так и не вышло :))))))

  • @AugonStudio
    @AugonStudio 4 роки тому +1

    Интересная инфа, спасибо

  • @webdevi
    @webdevi 2 роки тому

    Благодарю, очень понятно рассказываете! Продолжайте 😎

  • @GroveStreet-Home
    @GroveStreet-Home Рік тому

    Очень полезный урок. Я думаю, даже - уникальный. Молодец!)

  • @RedkeiGost
    @RedkeiGost 3 роки тому

    Геометрический способ рисовать кривую Бизье на 2:00 понятен, способ управления кривыми через точки с ручками на 0:30 понятен. Но не совсем очевидно, как они связаны. Получается, если мы возьмем среднюю точку на 0:30 на правом отрезке с желтыми точками, то это будет p1, верхнюю на том же отрезке - p0? Можно как-то наложить отрезки с 0:30 на 2:00?

  • @moranyt8299
    @moranyt8299 3 роки тому

    Привет, есть вопросик, как можно адаптировать скрипт, чтобы можно было добавлять точек сколько угодно? мне нужно реализовать в игре чтобы камера следовала за персонажем по определенной траектории(как в игре little nightmare) в общем так чтобы я просто расставил по уровню точки по которым должна бегать камера, и сделать скрипт в котором камера следует за гг, если остальное я могу сделать, а вот как адаптировать твой код на дофига точек я хз(

  • @Bond007in
    @Bond007in 4 роки тому +1

    Отлично. Коротко, понятно, интересно.

  • @user-sun-ray
    @user-sun-ray 2 роки тому

    А когда будет видео про большой сплайн?) Тут лайков уже на 3-4 таких урока)))

  • @Bushido_Cat
    @Bushido_Cat Рік тому

    Супер, Классное видео!!! Подскажи пожалуйста книги по изучению векторов и всех формул и как ты научился их адаптировать по юнити на C#?

  • @modjaid3907
    @modjaid3907 3 роки тому

    Пожалуйста скинь исходник безье только с массивом точек, а не с четыремя, я буду мега благодарен

  • @gumelov
    @gumelov 3 роки тому

    Я только не очень понимаю по производной. Производная в линейной получается число целое а в Кубической и далее уже с переменными. Написал код для любых порядков а вот как прикрутить вращение к ним не пойму.

  • @СергейОрлов-й6б
    @СергейОрлов-й6б 4 роки тому +5

    Невероятно) спасибо. Кстати, помни, что обучающие видео по 3d собирают 3к - 30к. Тут же целое программирование, просмотров будет меньше. Но это не повод прекращать! Ведь 200+ человек у тебя научились, они с тобой. Это очень много) продолжай)

  • @yurybatsyuro8293
    @yurybatsyuro8293 3 роки тому

    Если нужно определить именно направление, то нет никакой нужды брать производную, т.к. кривая Безье направлена по касательной к последниму из вот этого каскада отрезков.

  • @womanizer1389
    @womanizer1389 3 роки тому

    А как сделать чтобы не приходилось вручную пермещать полузнок с значениями переменной t ,а чтобы как в игре про уток они сами летали о указаной таректории

  • @maks94express
    @maks94express 2 роки тому

    Наконецто...Больше года искал этот туториал.

  • @siera4333
    @siera4333 3 роки тому

    Расскажите пожалуйста про Сплайн Эрмита на с#, прошу вас.

  • @anstancecouy5020
    @anstancecouy5020 4 роки тому +1

    Спасибо Вам. )))

  • @mazewindow2869
    @mazewindow2869 4 роки тому

    Когда я учил матан и линал, любил представлять как двигаются точки, графики и фигуры у себя в голове чтоб понять суть. Здорово что теперь это можно сделать с помощью Юнити.
    Спасибо большое за красивое, интересное, информативное, но легкое для понимания видео!

  • @sashikshik
    @sashikshik 3 роки тому

    Чувааак, ты обязан сделать продолжение, я без него жить не смогу! Реально, пожалуйста

  • @ДаниилК-ь1ц
    @ДаниилК-ь1ц Рік тому

    Круто !
    Хочу больше видимо на математические тематики

  • @hdmofic3658
    @hdmofic3658 3 роки тому

    А как двигать объект по кривой Безье равномерно?

  • @skarabeydm
    @skarabeydm 3 роки тому

    Народ, поворот в сторону движения по кривой можно сделать проще. И для этого не нужно ничего писать в Bezier.
    Написано всё в апдейте, если кто не понял
    // Позиция в предыдущем кадре
    Vector3 positionBefore = transform.position;
    // Расчёт нынешней позиции (из видео)
    transform.position = Bezier.GetPoint(P0.position, P1.position, P2.position, P3.position, t);
    // Вектор направления
    Vector3 direction = (transform.position - positionBefore).normalized;
    // Поворот в сторону движения
    transform.rotation = Quaternion.LookRotation(direction, Vector3.up);

    • @skarabeydm
      @skarabeydm 3 роки тому

      И ещё. Если вас раздражает сообщение в дебаге о том, что вектор направления равен нулю, можете последнюю строчку заменить на это:
      if(direction != Vector3.zero)
      transform.rotation = Quaternion.LookRotation(direction, Vector3.up);

    • @rassl_xion
      @rassl_xion 3 роки тому

      Это некорректно. В рамках какой-то одной вашей задачи оно может работать, но если реализация будет к примеру такой, что в одном кадре точка рассчитывается на 30%, а в следующем кадре на 60%, тогда вектор в вашем алгоритме будет направлен от позиции в 30 к позиции в 60, а должно быть (условно) от 59.(9) к 60!

    • @rassl_xion
      @rassl_xion 3 роки тому

      @@skarabeydm А здесь явно показана еще одна возможная проблема, что движение в двух кадрах будет минимальным настолько, что float внутри Vector3 округлится к нулю и тогда поворот не будет осуществлен вовсе

  • @romansmirnov2440
    @romansmirnov2440 2 роки тому

    Ты просто гений! :) Огромное тебе спасибо, лайк+подписка! Желаю тебе удачи во всех твоих идеях и существующих задачах :)