Чтобы попасть в ламповый закрытый Telegram чат, где мы помогаем друг другу в изучении Unreal Engine, 3D и обсуждаем игры, то вам нужно пройти по ссылке boosty.to/makeyourgame и осуществить донат на любую комфортную сумму и написать мне, что хотите в чат, а я вам в течение 24 часов пришлю ссылку. ВАЖНО: Убедитесь, что на boosty у вас открыты сообщения. Присоединяйся к единомышленникам! Доступ - навсегда! ================================= Группа в ВКонтакте: vk.com/makeyourgameunreal ================================= Подписка на канал - только приветствуется! ================================= #games #unreal #unrealengine
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 Один раз нажал - перс ударил один раз. Зажал - перс проводит этот же удар много раз, достаточно повесить всё на Trigger, по аналогии с Movement, один раз нажал персонаж чучь чуть пододвинулся, зажал персонаж идёт. Start удобен только если тебе нужно отработать одно действие (например толкнуть дверь, чтобы она открылась), т.к. для одиночного действия на Trigger нужно будет флажок вешать.
Спасибо что написал разъяснение, молодец. мат часть знаешь (без сарказма, правда спасибо), даже лучше чем в доке написал. Теперь давай бегом учить социальные скиллы и как взаимодейстовать с людьми. А так сам бы уроки пилил, разбираться умеешь да еще и объяснять вроде
Класс спасибо большое за объяснение все очень понятно, хотелось бы еще про все модификаторы и тригеры как что работает. Только начинаю изучать, пока сложно. Ваше единственное видео, что нашел которое действительно мне помогло, лучше понять структуру и логику.
Как потратил день на то, чтобы разобраться как согласуются обе системы управления, старая и EInput, на форумах так ответа четкого не нашел. Очень часто сабсистем не подключалась в проекте, т.е. выдавало невалидность🙄 Спасибо за повтор материала в документации на русском, увидел «полный гайд», подумал более глубокий будет разбор 😊
Подскажите.. Использую 4 версию. На прошлой системе ввода, что бы игрок мог закрыть UI на туже кнопку взаимодействия использовал "Listen for Input Actor" и "Set Input Mode Game and UI". Все нормально работало.. игрок не мог двигаться при работе с окном, а UI закрывалось на туже кнопку взаимодействия. Но столкнулся с тем что в одном месте нужно использовать "Set Input Mode UI Only" и "прослушивание" перестало работать. Сказали перейти на новую тему инпутов, мол это решит твою проблему.. И теперь сломалось все.. ибо "прослушка" работает на обычный ввод, а его как бы нет. И не ясно как к примеру из UI слушать такой вид ввода что бы закрыть уи. Или вот как сделать что на Е одни акторы просто открываются, а у других "подержи". Ибо как мне показалось на этой системе можно сделать кнопку на удержание. И простое нажатие будет и активировать актора (у которого просто нажми), а "выполнение" будет активировать актора( удержание). Правда в такой варианте не выйдет сделать что у акторов могут быть разные таймеры удержания..
Дружище, ну чо за подход? этого я не знаю это вам не нужно. видео все-таки называется ПОЛНЫЙ ГАЙД, почему-бы кратко не показать ВСЕ возможности системы? Если кому то скучно или бесполезно он перемотает этот момент, а для других этот момент может оказаться мега полезным и именно тем что он искал
Спасибо, только почему то не работает вызов через enhanced input ничего не происходит, а через input action всё работает, может в настройках проекта что то надо изменить?
если ты на 4 версии остался и подключил эти как плагин.. Да.. там нужно в настройка проекта поменять пару строк. поиши как это подключается в 4. ибо как я понял в 5 они уже изначально настроили это..
Спасибо большое за объясление, видео по соседству, англоязычный парень делал, какой же это дегенерат, "Я не буду это объяснять", "это слишком сложно" или "Я это сделаю но не скажу зачем", ненавижу такие туториалы, ничего не было объяснено. А здесь всё понятно и по полочкам!
Пустое видео. Ничего о модификаторах, программном переназначение клавиш. За ПОЛ ЧАСА можно всё это рассказать. Даже в каких-то базовых вещах автор путается и путает зрителей. "Ну это сложно, смотрите документацию", видео зачем тогда?))))
Если ты используешь С++ (на 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, но это в будущем когда плагин пилить буду. ЗЫ ПОЛНЫЙ ГАЙД это конечно смело он назвал, тему которую я месяца два изучал и ещё не совсем разобрался.
Привет, 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
Чтобы попасть в ламповый закрытый Telegram чат, где мы помогаем друг другу в изучении Unreal Engine, 3D и обсуждаем игры, то вам нужно пройти по ссылке boosty.to/makeyourgame и осуществить донат на любую комфортную сумму и написать мне, что хотите в чат, а я вам в течение 24 часов пришлю ссылку.
ВАЖНО: Убедитесь, что на boosty у вас открыты сообщения.
Присоединяйся к единомышленникам! Доступ - навсегда!
=================================
Группа в ВКонтакте: vk.com/makeyourgameunreal
=================================
Подписка на канал - только приветствуется!
=================================
#games #unreal #unrealengine
Спасибо, прям глоток понятной информации среди индусов и англ. документаций
Это ОНОО! Спасибо за такие видео! Они прям жизненно необходимы 😃
О. прям видео появились тогда, когда я решил тоже поизучать Enhanced Input. Огромное спасибо!
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 Один раз нажал - перс ударил один раз. Зажал - перс проводит этот же удар много раз, достаточно повесить всё на Trigger, по аналогии с Movement, один раз нажал персонаж чучь чуть пододвинулся, зажал персонаж идёт. Start удобен только если тебе нужно отработать одно действие (например толкнуть дверь, чтобы она открылась), т.к. для одиночного действия на Trigger нужно будет флажок вешать.
Спасибо что написал разъяснение, молодец. мат часть знаешь (без сарказма, правда спасибо), даже лучше чем в доке написал. Теперь давай бегом учить социальные скиллы и как взаимодейстовать с людьми. А так сам бы уроки пилил, разбираться умеешь да еще и объяснять вроде
Класс спасибо большое за объяснение все очень понятно, хотелось бы еще про все модификаторы и тригеры как что работает. Только начинаю изучать, пока сложно. Ваше единственное видео, что нашел которое действительно мне помогло, лучше понять структуру и логику.
Как потратил день на то, чтобы разобраться как согласуются обе системы управления, старая и EInput, на форумах так ответа четкого не нашел. Очень часто сабсистем не подключалась в проекте, т.е. выдавало невалидность🙄
Спасибо за повтор материала в документации на русском, увидел «полный гайд», подумал более глубокий будет разбор 😊
Спасибо! Очень доходчиво разъясняете!
Подскажите..
Использую 4 версию. На прошлой системе ввода, что бы игрок мог закрыть UI на туже кнопку взаимодействия использовал "Listen for Input Actor" и "Set Input Mode Game and UI". Все нормально работало.. игрок не мог двигаться при работе с окном, а UI закрывалось на туже кнопку взаимодействия. Но столкнулся с тем что в одном месте нужно использовать "Set Input Mode UI Only" и "прослушивание" перестало работать. Сказали перейти на новую тему инпутов, мол это решит твою проблему.. И теперь сломалось все.. ибо "прослушка" работает на обычный ввод, а его как бы нет. И не ясно как к примеру из UI слушать такой вид ввода что бы закрыть уи.
Или вот как сделать что на Е одни акторы просто открываются, а у других "подержи". Ибо как мне показалось на этой системе можно сделать кнопку на удержание. И простое нажатие будет и активировать актора (у которого просто нажми), а "выполнение" будет активировать актора( удержание). Правда в такой варианте не выйдет сделать что у акторов могут быть разные таймеры удержания..
Старую систему можно оставить? 5.3 или нет?
мне эта музыка в кошмарах теперь снится
@@vodorodus1 она уже сменилась, можете последние видео для новых кошмаров посмотреть.
@@makeyourgame2210 спасибо!!!
Дружище, ну чо за подход? этого я не знаю это вам не нужно.
видео все-таки называется ПОЛНЫЙ ГАЙД, почему-бы кратко не показать ВСЕ возможности системы?
Если кому то скучно или бесполезно он перемотает этот момент, а для других этот момент может оказаться мега полезным и именно тем что он искал
онгоинг как стрельба очередями по ощущению
канселед может пригодится например для заряженой атаки
комплитед если отпускается кнопка и если кнопка не была отпущена раньше тригера
плеер контролер тригерит игрок а аиконтролер тригерит движок ?
Скажи пожалуйста , можно ли делать игру по мотивам фильма ? Есть фильм один хочу сделать игру но боюсь что будут вопросы 😢
Это лучше с юристом обсуждать.
@@dimanshulgin так автор канала и есть юрист)
Спасибо, только почему то не работает вызов через enhanced input ничего не происходит, а через input action всё работает, может в настройках проекта что то надо изменить?
если ты на 4 версии остался и подключил эти как плагин.. Да.. там нужно в настройка проекта поменять пару строк. поиши как это подключается в 4. ибо как я понял в 5 они уже изначально настроили это..
Спасибо за видео. Я понял что Enhanced это полная шляпа, прощу простыми вещами пользоваться если ты новичок
Спасибо большое за объясление, видео по соседству, англоязычный парень делал, какой же это дегенерат, "Я не буду это объяснять", "это слишком сложно" или "Я это сделаю но не скажу зачем", ненавижу такие туториалы, ничего не было объяснено. А здесь всё понятно и по полочкам!
Пустое видео. Ничего о модификаторах, программном переназначение клавиш. За ПОЛ ЧАСА можно всё это рассказать. Даже в каких-то базовых вещах автор путается и путает зрителей. "Ну это сложно, смотрите документацию", видео зачем тогда?))))
Если ты используешь С++ (на 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, но это в будущем когда плагин пилить буду.
ЗЫ ПОЛНЫЙ ГАЙД это конечно смело он назвал, тему которую я месяца два изучал и ещё не совсем разобрался.
Привет, 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