Полезное

Мы Вконтакте

Discord канал

#
Модератор: icms
Аватара пользователя
Пользователь
Сообщения: 8
Доброго времени суток! Возможно, вопрос Вам покажется глупым, прошу меня простить. Никак не могу найти решение. Смотрел вот этот вот видос (https://www.youtube.com/watch?v=GHPuyzUJuW0) и много других, ориентировался по нему.

Тут у меня устанавливается переменная (функция в TruckController), через дебаг проверял, всё правильно: Изображение

Тут сам TruckController, с переменной ничего в нем не делаю. Изображение

Вот так вот достаю переменную в другом блупринте: Изображение

Вот тут оно ломается: Изображение

Подскажите, пожалуйста, что я делаю не так?
Последний раз редактировалось MementoMori 17 апр 2019, 19:08, всего редактировалось 1 раз.
Аватара пользователя
Пользователь
Сообщения: 469
Переменная TruckController объявлена, но ей не присвоено значение(конкретный экземпляр класса). Это наверное самая распространённая ошибка при использовании кастов. Костыль есть, но предлагать не буду(пока).
При создании любого проекта в котором предполагается обмен данными между разными бп - важно изначально построить иерархическую модель.
Что это значит: нужен один основной бп который будет отвечать за все(иногда не всеми) другие бп. Можно использовать свой вариант, но в UE4 предусмотрены несколько спец классов для этого:GameMode, GameState, GameInstance. Если кратко и не вдаваясь в теорию GameMode это серверный, GameState реплицируемый. Это означает что в случае сетевой игры средствами UE4 изменения внесённые сервером в GameState отразятся у всех клиентов. И наоборот GameMode является в случае сетевого решения классом только для сервера. GameInstance создан для хранения информации о текущей игре и не сбрасывается при смене уровня. Почитайте более подробно и более правильно тут http://shootertutorial.com/2015/05/30/configuring-new-project-ue4-main-classes-explanation/ пользователь Snake как то линковал у нас.

А теперь к практике - как это всё использовать. (всё это как частный случай и не является нерушимой истиной)
В большинстве случаев удобно использовать объект GameInstance. В нём мы определяем все нужные нам бп, т.е. создаём переменные типов наших бп которые планируют общаться. В самих бп в бегин плей получаем через каст доступ к GameInstance и заполняем созданную там переменную именно этого бп типа. Теперь у нас есть не просто переменная а непосредственно ссылка на конкретный бп. Так делаем для всех нужных бп(те которые будут передавать данные друг другу) Второй шаг это получение ссылки на нужный нам бп что бы передать или получить данные. Опять кастом к GameInstance и теперь достаём нужную нам переменную.

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

P.S при создании собственного не забудьте его указать в WorldSettings вашего текущего уровня(указывается в selected GameMode)
кастовать к гейинстанс просто: getGameInstace - castto(нужно указать непосредственно ваш гейм инстанс).

P.S 2 )) Про ошибку. Когда вы объявляете перемененную то вы говорите вот переменная класс машина. Ничего не работает!? А какая именно машина должна ехать или бибикать? Т.е. переменной должна быть присвоена именно та нужная машина. как-то так.
_________________
Project SKIT
Аватара пользователя
Пользователь
Сообщения: 8
icms писал(а):
Переменная TruckController объявлена, но ей не присвоено значение(конкретный экземпляр класса)


Это имеете ввиду?
Изображение
Аватара пользователя
Пользователь
Сообщения: 8
icms писал(а):
GameInstance создан для хранения информации о текущей игре и не сбрасывается при смене уровня. Почитайте более подробно и более правильно тут http://shootertutorial.com/2015/05/30/configuring-new-project-ue4-main-classes-explanation/ пользователь Snake как то линковал у нас.

Спасибо за подробное объяснение. Буду разбираться!
Аватара пользователя
Пользователь
Сообщения: 469
))) Значит слишком много БУкоВ написал. По ссылке описание основных классов, там не описаны способы передачи данныих между бп. Хоть видос снимай, стабильно 2-3 раза в месяц вопросы по этому поводу.
_________________
Project SKIT


Сейчас этот форум просматривают: Google [Bot] и гости: 9

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница