ПОЛНЫЙ ГАЙД по Enhanced Input | Уроки Unreal Engine 5

Поділитися
Вставка
  • Опубліковано 29 лис 2024

КОМЕНТАРІ • 29

  • @makeyourgame2210
    @makeyourgame2210  9 місяців тому +1

    Чтобы попасть в ламповый закрытый Telegram чат, где мы помогаем друг другу в изучении Unreal Engine, 3D и обсуждаем игры, то вам нужно пройти по ссылке boosty.to/makeyourgame и осуществить донат на любую комфортную сумму и написать мне, что хотите в чат, а я вам в течение 24 часов пришлю ссылку.
    ВАЖНО: Убедитесь, что на boosty у вас открыты сообщения.
    Присоединяйся к единомышленникам! Доступ - навсегда!
    =================================
    Группа в ВКонтакте: vk.com/makeyourgameunreal
    =================================
    Подписка на канал - только приветствуется!
    =================================
    #games #unreal #unrealengine

  • @merlin3617
    @merlin3617 9 місяців тому +5

    Спасибо, прям глоток понятной информации среди индусов и англ. документаций

  • @WestsiderzRU
    @WestsiderzRU 9 місяців тому +1

    Это ОНОО! Спасибо за такие видео! Они прям жизненно необходимы 😃

  • @wi1dd0g_games
    @wi1dd0g_games 9 місяців тому +1

    О. прям видео появились тогда, когда я решил тоже поизучать Enhanced Input. Огромное спасибо!

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

    Класс спасибо большое за объяснение все очень понятно, хотелось бы еще про все модификаторы и тригеры как что работает. Только начинаю изучать, пока сложно. Ваше единственное видео, что нашел которое действительно мне помогло, лучше понять структуру и логику.

  • @return_89
    @return_89 9 місяців тому +3

    Как потратил день на то, чтобы разобраться как согласуются обе системы управления, старая и EInput, на форумах так ответа четкого не нашел. Очень часто сабсистем не подключалась в проекте, т.е. выдавало невалидность🙄
    Спасибо за повтор материала в документации на русском, увидел «полный гайд», подумал более глубокий будет разбор 😊

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

    мне эта музыка в кошмарах теперь снится

    • @makeyourgame2210
      @makeyourgame2210  3 місяці тому +1

      @@vodorodus1 она уже сменилась, можете последние видео для новых кошмаров посмотреть.

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

      @@makeyourgame2210 спасибо!!!

  • @FlyToha
    @FlyToha 9 місяців тому

    Спасибо! Очень доходчиво разъясняете!

  • @АндрейЗнак-и1б
    @АндрейЗнак-и1б 2 місяці тому

    Спасибо, только почему то не работает вызов через enhanced input ничего не происходит, а через input action всё работает, может в настройках проекта что то надо изменить?

  • @dimanshulgin
    @dimanshulgin 9 місяців тому +6

    14:10 Чем хороша практика и Trigger и Start? Кто тебе эту чушь сказал? Сам придумал, поэтому хорошая
    Есть TriggerState - входные значения в ответах триггера UpdateState и Есть TriggerEvent - это интерпретация Действия всех переходов между триггерными состояниями, которые произошли для действия за последний такт.
    TriggerState содержит состояние None, Ongoing и Triggered
    None и в Африке нонэ;
    Triggered - триггер сработал
    Ongoing - триггер не сработал (пока не сработал), не достиг порогового элемента, если какому либо действию требуется время
    TriggerEvent
    Started - переключение состояния (None -> Ongoing, None -> Triggered) у TriggerState (начинаем что-то нажимать кнопку или ещё что-то)
    Ongoing - переключение состояния (Ongoing -> Ongoing) Если действию требуется какое-то время на свершение, действие может быть отменено Canceled
    Triggered - (None -> Triggered, Ongoing -> Triggered, Triggered -> Triggered) - триггер сработал (триггер может сработать и без Ongoing)
    Canceled - (Ongoing -> None) См. Ongoing
    Completed - (Triggered -> None) - например отпустили кнопку, официально правильное завершение обработки
    Итого Started и Triggered могут быть в одном такте обработки и почему их нужно объединить? Если это объединять то некоторые действия будут происходить дважды, да и у тебя если присмотреться куб в начале дёргается (т.е. перемещается на большее чем надо расстояние), а затем плавно двигается (когда срабатывают Trigger).
    Start - используется если нужно обработать однократное событие (чаще всего кнопка), действия такие как открыть закрыть инвентарь или например атака (но не обязательно)
    Trigger - действия такие как движение, прыжок, лутание если нужно удерживать кнопку.
    Например движение персонажа на Trigger прикрепляют затем, что игрок может на движение использовать джойстик, а не клаву и там есть порог срабатывания т.е. будут приходить Ongoing перед Trigger.
    PS Может сперва стоит тему серьёзней изучать, а потом ролик пилить, тебя же ни кто не торопит в чём проблема изучать этот плагин в течении месяца или два, а потом ролик делать.
    PPS Этот плагин появился не в UE5, а был и в UE4, но отключён по умолчанию (а в UE5 включён по умолчанию) и кстати он ещё не допилен есть куча todo внутри исходников, например альтернативная раскладка, то как эпики предлагают её реализовывать сейчас мягко говоря странно. Именно поэтому я свой плагин запилил "унаследовавшись" от эпиковского.
    PPPS Ссылочки для самостоятельного изучения
    docs.unrealengine.com/5.1/en-US/enhanced-input-in-unreal-engine/
    dev.epicgames.com/community/learning/tutorials/aqrD/unreal-engine-enhanced-input-binding-with-gameplay-tags-c
    nightails.com/2022/10/16/unreal-engine-enhanced-input-system-in-c/
    Слишком громкое название для видосика ПОЛНЫЙ ГАЙД, я бы это назвал вводный урок и не более.

    • @makeyourgame2210
      @makeyourgame2210  9 місяців тому

      Я не утверждал, что это прям повсеместная и хорошая практика совмещать старт и тригер, я сказал что в зависимости от задач можно и хорошо совмещать тригер и старт) Например, один раз нажал - перс ударил один раз. Зажал - перс проводит этот же удар много раз)

    • @dimanshulgin
      @dimanshulgin 9 місяців тому

      @@makeyourgame2210 Один раз нажал - перс ударил один раз. Зажал - перс проводит этот же удар много раз, достаточно повесить всё на Trigger, по аналогии с Movement, один раз нажал персонаж чучь чуть пододвинулся, зажал персонаж идёт. Start удобен только если тебе нужно отработать одно действие (например толкнуть дверь, чтобы она открылась), т.к. для одиночного действия на Trigger нужно будет флажок вешать.

  • @Scairp
    @Scairp 4 місяці тому

    Старую систему можно оставить? 5.3 или нет?

  • @cristalGamer5100
    @cristalGamer5100 Місяць тому

    онгоинг как стрельба очередями по ощущению

    • @cristalGamer5100
      @cristalGamer5100 Місяць тому

      канселед может пригодится например для заряженой атаки

    • @cristalGamer5100
      @cristalGamer5100 Місяць тому

      комплитед если отпускается кнопка и если кнопка не была отпущена раньше тригера

    • @cristalGamer5100
      @cristalGamer5100 Місяць тому

      плеер контролер тригерит игрок а аиконтролер тригерит движок ?

  • @FreeMixHD
    @FreeMixHD 2 місяці тому

    Дружище, ну чо за подход? этого я не знаю это вам не нужно.
    видео все-таки называется ПОЛНЫЙ ГАЙД, почему-бы кратко не показать ВСЕ возможности системы?
    Если кому то скучно или бесполезно он перемотает этот момент, а для других этот момент может оказаться мега полезным и именно тем что он искал

  • @skakun.design
    @skakun.design Місяць тому

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

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

    Спасибо большое за объясление, видео по соседству, англоязычный парень делал, какой же это дегенерат, "Я не буду это объяснять", "это слишком сложно" или "Я это сделаю но не скажу зачем", ненавижу такие туториалы, ничего не было объяснено. А здесь всё понятно и по полочкам!

  • @Diudusa
    @Diudusa 9 місяців тому

    Скажи пожалуйста , можно ли делать игру по мотивам фильма ? Есть фильм один хочу сделать игру но боюсь что будут вопросы 😢

    • @dimanshulgin
      @dimanshulgin 9 місяців тому

      Это лучше с юристом обсуждать.

    • @AnttiViskari-k3d
      @AnttiViskari-k3d 7 місяців тому

      @@dimanshulgin так автор канала и есть юрист)

  • @JIockjoy
    @JIockjoy 9 місяців тому +1

    Привет, 14:40, я понимаю что есть желание помочь разобраться другим, но зачем говорить то что сам не понял - К примеру на 14:40 о Value Type, кто вешает подобную логику на взрыва куба на VALUE TYPE !!! Прошу читай ОФФ документы правильно!!!!! А вот выписка из него
    You should use bool actions for inputs that have an on or off state. This is the equivalent of the older Action mappings in the legacy input system. For controls like gamepad thumbstick values, you can use 2D axis actions to hold the X and Y value of the thumbstick position. You can use the 3D axis to hold more complex data, such as motion controller information.
    legacy input system, legacy input system , legacy input system , legacy input system - Понимаешь значение этого - legacy input system legacy input system legacy input system legacy input system legacy input system legacy input system legacy input system

  • @uegamedev
    @uegamedev 9 місяців тому +4

    Пустое видео. Ничего о модификаторах, программном переназначение клавиш. За ПОЛ ЧАСА можно всё это рассказать. Даже в каких-то базовых вещах автор путается и путает зрителей. "Ну это сложно, смотрите документацию", видео зачем тогда?))))

    • @dimanshulgin
      @dimanshulgin 9 місяців тому

      Если ты используешь С++ (на Blueprint по-моему нельзя, но это не точно, я не разбирался с ними), то программное переназначение клавиш я делал как-то так
      void UGameEnhancedInputSubsystem::RebindMappingKeysControl(const FGameMappableKey& NewMappingKeysControl, bool bForceImmediately)
      {
      if (NewMappingKeysControl.PrimaryIMC)
      {
      if (NewMappingKeysControl.PrimaryIndex < NewMappingKeysControl.PrimaryIMC->GetMappings().Num())
      {
      UInputMappingContext* Context = const_cast(NewMappingKeysControl.PrimaryIMC);
      Context->GetMapping(NewMappingKeysControl.PrimaryIndex).Key = NewMappingKeysControl.PrimaryKey;
      }
      if (NewMappingKeysControl.SecondaryIMC)
      {
      if (NewMappingKeysControl.SecondaryIndex < NewMappingKeysControl.SecondaryIMC->GetMappings().Num())
      {
      UInputMappingContext* Context = const_cast(NewMappingKeysControl.SecondaryIMC);
      Context->GetMapping(NewMappingKeysControl.SecondaryIndex).Key = NewMappingKeysControl.SecondaryKey;
      }
      }
      }
      if (bForceImmediately)
      {
      FModifyContextOptions ModifyContextOptions;
      ModifyContextOptions.bForceImmediately = bForceImmediately;
      RequestRebuildControlMappings(ModifyContextOptions);
      }
      }
      где
      USTRUCT(BlueprintType)
      struct FGameMappableKey
      {
      GENERATED_USTRUCT_BODY()
      /**The tag associated with the input mapping context*/
      UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "GameMappableKey")
      FGameplayTag ContextTag;
      /**The unique mapping key name for the associated input mapping context. Name from UPlayerMappableKeySettings.*/
      UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "GameMappableKey")
      FName MappingName;
      /**The localized display name of this key mapping. Use this when displaying the mappings to a user.*/
      UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "GameMappableKey")
      FText DisplayName;
      /**Primary input mapping context*/
      UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "GameMappableKey")
      const UInputMappingContext* PrimaryIMC = nullptr;
      /**The mapping key index for the associated primary input mapping context. Value -1 if mapping key not found.*/
      UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "GameMappableKey")
      int32 PrimaryIndex = -1;
      /**The mapping key of the primary IMC. Used to remap keys.*/
      UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "GameMappableKey")
      FKey PrimaryKey;
      /**Secondary input mapping context*/
      UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "GameMappableKey")
      const UInputMappingContext* SecondaryIMC = nullptr;
      /**The mapping key index for the associated secondary input mapping context.*/
      UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "GameMappableKey")
      int32 SecondaryIndex = -1;
      /**The mapping key of the secondary IMC. Used to remap keys.*/
      UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "GameMappableKey")
      FKey SecondaryKey;
      FGameMappableKey() = default;
      explicit FGameMappableKey(const FName& InName)
      : MappingName(InName)
      , PrimaryIMC(nullptr)
      , PrimaryIndex(-1)
      , SecondaryIMC(nullptr)
      , SecondaryIndex(-1)
      {}
      }; - Здесь всякие const указатели на UObject - ы ещё предстоит заменить на TObjectPtr, но это в будущем когда плагин пилить буду.
      ЗЫ ПОЛНЫЙ ГАЙД это конечно смело он назвал, тему которую я месяца два изучал и ещё не совсем разобрался.