Как реализовать Drag and Drop в Unity UI?

Поделиться
HTML-код
  • Опубликовано: 4 июн 2024
  • Поддержи канал, бро!
    paypal.me/gamedevlavka - мир
    boosty.to/gamedevlavka - рф
    И даже криптой (пока только Ethereum):
    0x7a53325D1C36Eea7BbE8C6a8D00f2a0efd580e77
    Разбиваем визуализацию инвентаря на части, так видео будет короче, и понятнее. И в этой части разберем, такую механику, как Drag and Drop, то есть механику перетаскивания UI элементов. Эта механика может использоваться не только в инвентаре, но и в других местах, поэтому полезно выделить ее в отдельное видео. Данная часть по сути является продолжением цикла видео по созданию инвентаря, но при этом также является самостоятельным видео.
    Как сделать инвентарь в Unity. Часть 1. Абстракция ( • Video )
    Как сделать инвентарь в Unity. Часть 2. Реализация ( • Video )
    Drag and Drop в Unity UI ( • Как реализовать Drag a... )
    Как сделать инвентарь в Unity. Часть 3.1. Подготовка к визуализации ( • Video )
    __________
    Залетай в Таверну Разработчика в телеге, и делись своими траблами в Unity, вместе разбираться будем!
    t.me/gamedevtavern
    Подписывайся на канал в телеге, или на твиттер, там я публикую коротенькие типсы и практики, которые помогут писать код лучше, понятнее и эффективнее:
    Telegram: t.me/gamedevlavka
    Twitter: / gamedevlavka
    Twitter (личный): / vavilichevgd
    __________
    0:00 Вступление
    0:32 Подготовка UI
    4:59 Пишем перемещаемый объект
    12:50 Пишем слот
    14:05 Подводный камень

Комментарии • 60

  • @eveuptime
    @eveuptime 2 года назад +22

    Гендерно-нейтральный коммент, минимум из трех слов, для продвижения канала

    • @gamedevlavka
      @gamedevlavka  2 года назад +22

      Авторитетный ответ в сопровождении с лайком, для имитации диалога с подписчиком

  • @vladisslavss
    @vladisslavss 2 года назад +1

    Отличный урок!
    Лукас и коммент в поддержку канала !

  • @Sussland
    @Sussland Год назад +1

    Крутое видео, понятное и именно то, что я искал!

  • @design_art_style
    @design_art_style 2 месяца назад +1

    Всё супер с первого раза получилось именно так и нужно объяснять всё по полочкам спасибо большое

  • @mypaxa003
    @mypaxa003 2 года назад +9

    Очень простая и понятная реализация👍 Но я бы, наверное, ещё подумал по поводу отрисовки предмета поверх слотов. Мне кажется, во многих случаях отключать сетку будет неудобным (при добавлении новых слотов например), но это уже совсем другая история))

    • @gamedevlavka
      @gamedevlavka  2 года назад +2

      Да, это другая история) однако, отключение сетки все равно можно юзать: добавляешь элемент, включаешь сетку, перестраиваешь, отклбчаешь сетку, можно таскать) можно со слоями запариться, схожу не скажу, что проще, там и так и так есть подводные камни)

  • @zdrastepriehali49
    @zdrastepriehali49 2 года назад +1

    блин просто отличный тутор, все сразу получилось!!

  • @Priboy313
    @Priboy313 Год назад +1

    Отличное видео!
    От себя хочу добавить, хоть и прошло уже прилично времени, что по наблюдениям если бросить предмет когда курсор не точно над белым квадратом, а рядом, над пустым бортиком, то дроп не сработает и предмет вернётся в стартовую позицию.
    Я это решил следующим образом: image в слоте сделал полностью прозрачным и увеличил его размеры на ширину spacing в сетке. И сделал ребёнком ещё один image белого квадрата старых размеров, которому отключил рейкаст таргет. Визуально то же самое, но без пробелов в сетке.

  • @AlexandrFedotov009
    @AlexandrFedotov009 2 года назад

    Godlike! очень крутое видео!!! Спасибо)

  • @aleksandrrecoba1434
    @aleksandrrecoba1434 2 года назад +3

    Спасибо за урок, можно ли в ближайшем будущем урок по Drag and Drop в Unity 3Д объектов на поле. Как шахматные фигуры в 3Д.

  • @kokos_kek
    @kokos_kek 28 дней назад +1

    Пишу от 07.05.24.
    Если вкратце - отличный видос, нашёл решение своей проблемы, спасибо, снимаю шляпу.

    • @MoronicSoul
      @MoronicSoul 15 дней назад

      если ты про размеры грида 1800х1100, то просто это суммы размеров ячеек, отступов внутрь контейнера, и наружных отступов ячеек)1800 = 300*5 + 50*4 +100 и 1100 = 300*3+50*2+100.
      Если ты не про эти размеры то сори что влез и задушнил)

  • @brittanymiller8590
    @brittanymiller8590 2 года назад +2

    Красавчик)
    Лайк и подписка)

  • @user-vh8oe5cz8h
    @user-vh8oe5cz8h 2 года назад +1

    Спасибо!

  • @romarizkov
    @romarizkov Год назад

    Бро, а нужно ли в свойствах Main Camera в стеке прописывать UICamera, чтобы при первом запуске видеть не пустой Скайбокс, а созданный интерфейс инвентаря?

  • @bleach4rever
    @bleach4rever 2 года назад +9

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

  • @satilast
    @satilast Год назад

    Спасибо. Отлично объяснено. Лайк поставил.
    Правда я не стал сортировать элементы в группе. Если я правильно понимаю - это работа с массивом и памятью при каждом переносе.
    Вместо этого в OnBeginDrag запоминал parent (если мы хотим, чтобы он возращался в предыдущий слот в случае промаха) и задавал parent = grid, предварительно выключив GridGroupLayout (раз это внешний элемент по отношению ко всем другим), а на OnEndDrag включал обратно GridGroupLayout и проверял, если родитель grid, то задать родителем предыдущий слот.
    Всё-таки событие OnDrop произойдет раньше OnEndDrag, поэтому такое условие подойдёт.
    Его можно применять, если по каким-то причинам не хочется менять порядок самих слотов.
    Если в чём-то логически ошибся - поправь пожалуйста. Только начинаю изучать Юнити и С#.

  • @othelnik6659
    @othelnik6659 Год назад +1

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

  • @romarizkov
    @romarizkov Год назад +1

    Бро, есть способ каким-то образом реализовать оконный интерфейс в Unity? Окна как в Винде, всплывающие меню, закрытие одних окон, открытие других?

  • @user-nj8ee1hj8z
    @user-nj8ee1hj8z 2 года назад +2

    Очередное отличное видео. Спасибо.

  • @ericpetakchyan9457
    @ericpetakchyan9457 2 года назад +1

    Спасибо за урок, все работает четко, как в видео. Такой вопрос только: когда отпускаю item, он садиться в slot резко, моментально, без анимации. Можно реализовать что-то подобное, чтобы item садился в slot плавно ?

    • @gamedevlavka
      @gamedevlavka  2 года назад

      Конечно можно, нужно просто не присваивать новую координату резко, а запускать алгоритм "полета" из текущей точки в нужную. Я такие вещи делаю через корутину

  • @brunskiy
    @brunskiy 2 года назад

    Спасибо

  • @nikghost3356
    @nikghost3356 Год назад +1

    Я бы не сказал что это удачный способ. При начале перетаскивания запоминаем родителя, и вытаскиваем элемент за пределы Grid. После чего перемещаем, и устанавливаем нового родителя. Если UIItem за пределами слотов, просто возвращаем изначальный слот.

  • @def6141
    @def6141 2 года назад +2

    Спасибо! Очень полезно новичку! Как раз сегодня думал разобраться, как сделать джостик на андроид. Вот теперь понятно куда копать :) Может сделаешь урок по реализации простого джостика для андроид управления персонажем но через InputSystem и Character Controller😁

    • @WanP1su
      @WanP1su 2 года назад +2

      А бесплатный плагин Joystick Pack с ассет стора не подойдёт?

    • @gamedevlavka
      @gamedevlavka  2 года назад +1

      Согласен с предыдущим оратором, есть Joistick Pack, который легко кастомизируется. А зачем тебе InputSystem? Он обычно используется, можно было игроку дать настраивать управление, но это больше для ПК/Консоли история, а не про мобилки. Либо я не до конца понял вопрос)

    • @def6141
      @def6141 2 года назад

      @@gamedevlavka Зато я понял немного больше теперь ))) Да видел этот пак. Надо в коде разбираться самому, а когда тебе рассказывают намного проще😊 Я пока не сильно понимаю как правильно двигать персонажа (есть же куча вариантов). А через Joystick Pack и rigidbody.MovePosition у меня почему то персонаж как то дергано двигался. В то время как через wasd было норм

    • @livingend1638
      @livingend1638 2 года назад

      раньше был прямо готовый джойстик для андроида в стандартных ассетах, может и сейчас он там лежит...

    • @unityrututorials1327
      @unityrututorials1327 2 года назад

      @@livingend1638 там он всегда есть и будет. единственное что стандарт теперь надо самому скачивать))))) а новички которые 2020 ставят, даже и не подозревают о наборе стандарт ассета!!

  • @dihaneeer
    @dihaneeer 2 года назад +2

    Круто, просто и понятно!

  • @AleksYurchenko
    @AleksYurchenko Год назад

    Кастомные контролы в UI Toolkit хотелось бы создать и тоже тягать их. Только так, что бы один контрол занимал место другого, а другой смещался вверх или вниз.

  • @PorksandWith
    @PorksandWith 2 года назад +3

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

    • @gamedevlavka
      @gamedevlavka  2 года назад +2

      Привет! Да там снимать нечего) голый райдер)

  • @antplay6759
    @antplay6759 2 года назад +2

    А можно ли как-то закрепить позицию по определённой оси? Я хочу чтобы объект двигался только по оси X

    • @romarizkov
      @romarizkov Год назад

      В свойствах нужного объекта ищи ключевое слово fix или его вариации

  • @romankisel9261
    @romankisel9261 2 года назад +1

    Здравствуйте , а можно где-то взять готовый код?

    • @romarizkov
      @romarizkov Год назад

      Быстрее самому будет написать, чем искать готовый код целый год

  • @nikegoof1912
    @nikegoof1912 2 года назад

    Возможно это только у меня белый экран на заднем плане і не тащится предмет... или я штото не так сделал
    ;(

  • @MoronicSoul
    @MoronicSoul 15 дней назад

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

  • @DrZupan
    @DrZupan 5 месяцев назад

    а как 3д объект дропнуть в ячейку?

  • @romarizkov
    @romarizkov Год назад

    Бро, как ты так сделал, что в редакторе скриптов появляется всплывающее меню, которое даёт выбирать слова?

    • @gamedevlavka
      @gamedevlavka  Год назад

      Если я правильно понял вопрос, то это все все райдер (Rider: www.jetbrains.com/rider/).

    • @romarizkov
      @romarizkov Год назад

      @@gamedevlavka Visual Studio Code поставил. Там норм

    • @romarizkov
      @romarizkov Год назад

      Бро, а как ты быстро пронаштамповал UISlot'ов пробельчиком? У меня каждый раз надо вызывать из меню дупликейт.

    • @gamedevlavka
      @gamedevlavka  Год назад +2

      @@romarizkov ctrl+d - шоткат для создания дупликата)

    • @user-dm5wf5tq2n
      @user-dm5wf5tq2n Год назад

      @@gamedevlavka Привет, тутор очень понравился, доходчиво всё объясняешь. У меня только возникла проблемка с scaleFactor. Сам визуал инвентаря я сделал не через камеру, а сразу с канвасом. И как бы я не делил дельту на scaleFactor, всё равно он запаздывает за курсором. При дебаге scaleFactor не равен нулю. Я хз как это исправить. Подскажи плез, буду очень благодарен🙏🙏🙏

  • @TimKarlMarxLenin
    @TimKarlMarxLenin Год назад +1

    Отличное видео! Спасибо за прекрасные и простые видео на русском языке!

  • @1cheeky_cat1
    @1cheeky_cat1 Год назад +1

    Как правильно сделать двойной клик/тап по предмету?

    • @gamedevlavka
      @gamedevlavka  Год назад +1

      Через кеширование первого клика: запоминается клик и запускается короткий таймер, который очищает информацию о первом клике. Если таймер ещё не кончился, а игрок кликнул ещё раз, то это двойной клик/тап

  • @requiem_for_a_dream5463
    @requiem_for_a_dream5463 Год назад

    Что такое партикл?

    • @gamedevlavka
      @gamedevlavka  Год назад +1

      Частица в переводе с английского. В юнити есть система частиц для создания эффектов (ParticleSystem)

    • @requiem_for_a_dream5463
      @requiem_for_a_dream5463 Год назад

      @@gamedevlavka Спасибо за ответ!

    • @requiem_for_a_dream5463
      @requiem_for_a_dream5463 Год назад

      @@gamedevlavka А можно попросить тебя пожалуйста, какие книги посоветуешь почитать по с#? Я смотрел сегодня твои два первых видоса по инвентарю. Пару раз пересмотрел. Сами методы понятны, что они означают и что делают, но непонятен синтаксис. что такое Interface я вообще не знал, что существует такой класс или как это называется. И сам синтаксис непонятен. Может есть какие нибудь книжки где все это объясняется. Скоро как раз учеба. Будет чем на лекциях заняться.

  • @livingend1638
    @livingend1638 2 года назад +3

    Где ты был две недели назад, че я сам систему пилил... ruclips.net/video/0TRuiWNdknk/видео.html

  • @yatyanochka
    @yatyanochka Год назад

    можно ли сделть что-то подобное?
    public void OnDrop(PointerEventData eventData)
    {
    if(gameObject.name == "Slot1")
    {
    Debug.Log("!!!");
    }

    }

  • @leg0redd0
    @leg0redd0 Год назад +1

    Спасибо!