Полезное

Мы Вконтакте

Discord канал

#
Пред.
12
Модератор: icms
Аватара пользователя
Пользователь
Сообщения: 47
Столкнулся с такой ситуацией:
В проекте для каждой локации свой саблевел, собственно, под логику на каждый левел я тоже создал по левелу, чтобы можно было комфортно выгружать/загружать. Хотел узнать: нормально ли всю логику определенного левела прописывать в отдельном саблевеле, который предназначен только для его логики? И нормально ли вызывать функции саблевела через execute console command? Т.е. к примеру, сейчас, чтобы вызывать эвент из левел блюпринта, к примеру, после открытия двери, я просто прописываю ce EventName в ExecuteConsoleCommand. Хочется хранить всю сюжетную логику в одном месте, и использовать специальные функции в саблевеле, которые используются по ходу всего сюжета.
Просто будет неприятно столкнуться с какими-нибудь проблемами на поздних стадиях проекта из-за этого...
Еще вопрос: Нормально ведь создать чайлд от LevelScriptActor на ++, и прописать там функции, которые используются на каждом саблевеле, чтобы не прописывать их по сто раз?
Аватара пользователя
Пользователь
Сообщения: 4069
Monolag писал(а):
Еще вопрос: Нормально ведь создать чайлд от LevelScriptActor на ++, и прописать там функции, которые используются на каждом саблевеле, чтобы не прописывать их по сто раз?


нормально будет создать блюпринт специально для логики типа - актор, этот блюпринт должен на событии Begin Play делать каст(Cast To) в на гэйм инстанс и записывать себя(нода Self) в переменную, естественно предварительно нужно создать БП типа GameInstance, и создать в переменную - типа актор в нем, также в тип данных можно указать имя нужного БП.

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

Тоже самое в скринах

1. Создание гэйминстанса(я уже создал и назвал NewGameInstance) -
http://picua.org/img/2018-08/22/xakoaxg ... xk17yg.png

2. Указание нового гэйминстанса в настройках проекта. -
http://picua.org/img/2018-08/22/6i39vzv ... b8zwrm.png

3. Зайди в созданный гэйминстанс и создай там переменную, тип данных - актор -
http://picua.org/img/2018-08/22/96qi48t ... hj3ipc.png

4. Создай блюпринт типа актор и выполни в нем следующую логику для теста -
http://picua.org/img/2018-08/22/9dm29vu ... bk74uj.png

5. Зайди в персонажа(легче протестировать), создай в нем следующую функцию, в out пине, тип данных укажи имя твоего БП с логикой - обязательно, просто актор будет не достаточно.
Также рекомендую включить галочку pure. -
http://picua.org/img/2018-08/22/kprkvin ... zwua57.png

6. Теперь в персонаже на клавишу Е вызывай тестовый евент. Вытаскивай его по имени из пина -
http://picua.org/img/2018-08/22/0hjkhwk ... 7n8krz.png

7. Обязательно вытащи актор с логикой на карту. -
http://picua.org/img/2018-08/22/4gw37z5 ... fo2tcw.png

Запусти, нажми Е и убедись что ты все сделал правильно.
Дважды кликнув на TestEvent тебя мгновенно перенесет в блюпринт LogicActor, за это я люблю каст больше интерфейса.
Аватара пользователя
Пользователь
Сообщения: 2319
Цитата:
Интерфейс - это присоединение методов и свойств классам, которые не являются родственниками, но...

после добавления интерфейса - уже являются родствениками.

в отличии от С-Шарпа(там насколько мне поверхностно известно по другому),
конкретно в анриале, да и в с++ интерфейсы сделаны множественным наследованием, интерфейс в с++ просто обычный класс, интерфейс для ан6риаловского БП это это специальный класс...
цепляются интерфейсы по синтаксису множественного наследования.
теперь обьект имеет свойства двух классов. от родителя и от интерфейса.

Prytaleks ,
чтоб обратиться к свойствам интерфейса нужно сначала привести к типу интерфейса(кастануть :) ) потом вызывать его методы.
чтоб обратиться к свойствам обьекта нужно приводить к типу обьекта(кастануть :) ) потом вызывать его методы.

поэтому твоя фраза звучит - "я предпочитаю кастануть вместо кастануть."
стыдно должно быть что после уже пары лет ты все никак не разберешься с основами.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 4069
в принципе я осознаю что я неправильно выразился - это ошибка, так как интерфейс требует такого же каста, точнее фраза будет выглядить так,
"я больше люблю custom events, нежели интерфейс", или "я предпочитаю просто каст, без интерфейса".

Также, в скрине в моем первом посте, функция с кастом не требуется, лучше сразу записать это в переменную - ссылку на бегин плэй, я так обычно и делаю, хз почему пример показал таким, вероятно в последнее время создавал pure функции))

Так будет правильнее - http://picua.org/img/2018-08/22/0cs7b6n ... 3pk8zg.png
Аватара пользователя
Пользователь
Сообщения: 47
Большое спасибо за скриншоты, приятно, что вы не просто "вбросили" объяснение. Я уже не первый год занимаюсь UE4, просто я ищу альтернативы, которые могли бы облегчить разработку. Это не значит, что я их собираюсь использовать.
Неплохо, конечно, с отдельным эктором БП. Но если нужно выполнить действие с объектом на карте? Это нужно вызывать в левелБП эту функцию из эктора, причем, создав инпуты для референсов к объектам. Или такая логика просто пишется у вас в ЛевелБП?
Так в чем проблема все же использовать команду ce "EventName", по-моему, это частично прямая альтернитива тому, что если бы можно было кастить к саблевелу. Мне и самому кажется, что это немного странноватый способ, но пока что он работает более-менее нормально, есть, конечно огромный минус при переименовывании функций и вообще не особо удобно использовать. Но как альтернатива - использование отдельного эктора с логикой тоже не кажется идеальным вариантом... Если только использование его в совершенно редких случаях, когда нужно выполнить какую-ту логику, допустим, после того, как игрок откроет дверь. Тогда альтернатив этому общему эктору не вижу особо, он довольно хорошо справится.
Аватара пользователя
Пользователь
Сообщения: 4069
любой объект на сцене, может себя записывать в определенный массив в LogicActor, но тогда это должен быть блюпринт, если это просто статик меш, тогда да, это нужно делать в LevelBlueprint, но вообще избегай это, лучше использовать блюпринты, тогда все будет автономно.

У меня актор для логики, содержит ссылки на все блюпринты в уровне, будь то то нпц, или пятна крови, и вообще любые объекты, все что требуется сохранять.
Кроме сохранения, есть и куча других евентов, которые работают в каждом уровне.
Аватара пользователя
Пользователь
Сообщения: 47
А почему избегать-то? Какие плюсы блюпринт эктора в данном случае? Ведь даже эпики, насколько я заметил по их готовым проектам, всю логику пишут на ЛевелБП.
Я использовал для логики полностью ЛБП в игре, которая недавно вышла, и не видел особо проблем, люди играют, логика работает правильно, единственное, если логика вызывалась при использовании предмета, к примеру, а не с триггера, тогда ЛБП бесполезен, полезен ваш вариант.
Я не ругаюсь и не пытаюсь вас переубедить, просто стараюсь понять.
Аватара пользователя
Пользователь
Сообщения: 4069
Monolag писал(а):
А почему избегать-то? Какие плюсы блюпринт эктора в данном случае? Ведь даже эпики, насколько я заметил по их готовым проектам, всю логику пишут на ЛевелБП.

любая логика которая будет применима к объекту в левел БП, будет уникальной, и ее уже нельзя будет использовать в другом уровне.
Аватара пользователя
Пользователь
Сообщения: 4069
к примеру, ты написал логику в левел блюпринте которая двигает платформу влево - вправо.

или, ты создал автономный блюпринт, с функцией который может двигать платформу и влево-вправо, и вверх-вниз, и как угодно по другому в любом уровне.
Аватара пользователя
Пользователь
Сообщения: 47
Ну да, сейчас я понял вас, спасибо. Просто я не особо сталкивался с этим в проектах, с которыми был связан, почти каждый эвент в логике - уникальный(кат-сцены, какие-то геймплейные эвенты) так как игра линейная и касты везде разные. А все двери, интерактивные предметы, предметы для инввентаря и т.п., конечно - отдельные БП или компоненты.


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

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