Понимание приведений
В простейшей форме, если ваш 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
Заключительные мысли
Есть пара ошибок при использовании чертежей; одним из них в этом случае может быть то, что у вас может быть два класса с одинаковыми именами (хотя они могут иметь разные внутренние «имена сценариев» - фактически полный путь). Когда вы отлаживаете переменную объекта, убедитесь, что вы соответствуете всему пути к местоположению вашего ресурса в вашей папке содержимого; это гарантирует, что вы действительно пытаетесь привести к объекту, который, по вашему мнению, действительно есть.
Еще одна классическая проблема - "горячие перезагрузки". Иногда редактору необходимо перезагрузить модуль после сборки на лету, но конфликт классов происходит внутри; это приводит к тому, что новая версия класса получает другое имя (с префиксом HOTRELOADED). Остерегайтесь этого; это может привести к тому, что вы будете иметь дело с двумя различными типами при касте, и вы даже не поймете. Настоящий здравомыслящий сапер. В случае сомнений закройте и снова откройте редактор; это исправляет это каждый раз.