Почему «Cast to BP_Ladder» все время терпит неудачу? - PullRequest
0 голосов
/ 18 января 2019

У меня проблемы с моим проектом Unreal Engine 4.Я очень новичок в этом, и я не очень понимаю, что происходит.Я сделал функционал лестницы, чтобы персонаж мог взобраться по лестнице и встать на статическую сетку, которая находится сверху.Но когда я хочу спуститься по лестнице, я хочу вызвать функцию «Разрешить вниз» на актере «BP_Ladder», но приведение акта каждый раз терпит неудачу.что вызывает сбой приведения?

Я осмотрелся, и другие люди с проблемами приведения были в основном неверными именами, но моя лестница называется "BP_Ladder", и это то, к чему я обращаюсь, такэто оставляет меня в замешательстве.

Мой план BP_Dude (это называется каждый тик) my BP_Dude blueprint

Мой план BP_Ladder (это то, что я пытаюсь вызвать) My BP_Ladder blueprint

Целью этой функции является то, что столкновение статической сетки выключится, а затем позволит мне двигаться вниз по лестнице, как обычно.

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

Ответы [ 2 ]

0 голосов
/ 20 января 2019

On Begin Overlap срабатывает только тогда, когда вы начинаете перекрытие, поэтому, если у вас есть логика, которая устанавливает ваше «может взобраться» на false, вам нужно будет выйти за пределы коллайдера и снова вернуться в него для другого события Begin Overlap.

0 голосов
/ 19 января 2019

Понимание приведений

В простейшей форме, если ваш Actor может быть приведен к BP_Ladder, он вернет приведенный объект на выходной контакт.

Просто чтобы убедиться, что вы знаете, как работает приведение, я должен указать, что вы не можете приводить данный тип к какому-либо не связанному произвольному типу; он должен быть «кастуемым» к месту назначения. Так что, если вы думаете, что объект Actor, возвращаемый вашим перекрытием, на самом деле является BP_Ladder или классовым планом, который наследуется от BP_Ladder, то вы должны быть в порядке. Но это должно быть так; в противном случае он будет терпеть неудачу каждый раз.

https://docs.unrealengine.com/en-us/Engine/Blueprints/UserGuide/CastNodes

Извините, если я покровительствую, но если каст не работает 9/10, он не был использован правильно.


Debugging

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

  • Выберите объект в вашем проекте.
  • Нажмите F9 , чтобы создать точку останова; красный кружок должен появиться в левом верхнем углу вашей кастовой коробки
  • Запустите игру в режиме PIE (Combo рядом с игрой, Новое окно редактора (PIE) )
  • Поместите игру в сценарий, в котором ваш бросок сработает (я полагаю, коснитесь лестницы)
  • Точка останова должна сработать; ваше игровое окно станет серым, и вы увидите большую красную стрелку, направленную вниз к вашей ячейке, где вы установили точку останова
  • Наведите указатель мыши на Object на входной стороне литого ящика. Должен отображаться альтернативный текст, содержащий сведения о переменной.
  • Внутри альтернативного текстового поля найдите Текущее значение ; это должно показать вам текущий тип объекта, который вы собираетесь использовать. Вы должны убедиться, что это значение соответствует ожидаемому.

https://docs.unrealengine.com/en-US/Engine/Blueprints/UserGuide/Debugging

* * Пример тысячи пятьдесят две * 1 053 *

Я сделал скриншот работающей игры; в этом вы увидите:

  • a Точка останова (красный круг) отображается на узле функции (поле)
  • Узел выполнения (красная стрелка) равен Create Rolling Stock
  • Текущее значение переменной равно DepotComponent...Depot

Example Blueprint breakpoint triggered


Заключительные мысли

Есть пара ошибок при использовании чертежей; одним из них в этом случае может быть то, что у вас может быть два класса с одинаковыми именами (хотя они могут иметь разные внутренние «имена сценариев» - фактически полный путь). Когда вы отлаживаете переменную объекта, убедитесь, что вы соответствуете всему пути к местоположению вашего ресурса в вашей папке содержимого; это гарантирует, что вы действительно пытаетесь привести к объекту, который, по вашему мнению, действительно есть.

Еще одна классическая проблема - "горячие перезагрузки". Иногда редактору необходимо перезагрузить модуль после сборки на лету, но конфликт классов происходит внутри; это приводит к тому, что новая версия класса получает другое имя (с префиксом HOTRELOADED). Остерегайтесь этого; это может привести к тому, что вы будете иметь дело с двумя различными типами при касте, и вы даже не поймете. Настоящий здравомыслящий сапер. В случае сомнений закройте и снова откройте редактор; это исправляет это каждый раз.

...