Unreal Engine 4 http://uengine.ru/forum/ |
|
Программирование сюжета через консольные команды. http://uengine.ru/forum/viewtopic.php?f=3&t=14539 |
Страница 1 из 2 |
Автор: | Monolag [ 20 авг 2018, 15:50 ] |
Заголовок сообщения: | Программирование сюжета через консольные команды. |
Столкнулся с такой ситуацией: В проекте для каждой локации свой саблевел, собственно, под логику на каждый левел я тоже создал по левелу, чтобы можно было комфортно выгружать/загружать. Хотел узнать: нормально ли всю логику определенного левела прописывать в отдельном саблевеле, который предназначен только для его логики? И нормально ли вызывать функции саблевела через execute console command? Т.е. к примеру, сейчас, чтобы вызывать эвент из левел блюпринта, к примеру, после открытия двери, я просто прописываю ce EventName в ExecuteConsoleCommand. Хочется хранить всю сюжетную логику в одном месте, и использовать специальные функции в саблевеле, которые используются по ходу всего сюжета. Просто будет неприятно столкнуться с какими-нибудь проблемами на поздних стадиях проекта из-за этого... Еще вопрос: Нормально ведь создать чайлд от LevelScriptActor на ++, и прописать там функции, которые используются на каждом саблевеле, чтобы не прописывать их по сто раз? |
Автор: | Prytaleks [ 22 авг 2018, 06:18 ] |
Заголовок сообщения: | Re: Программирование сюжета через консольные команды. |
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, за это я люблю каст больше интерфейса. |
Автор: | Snake [ 22 авг 2018, 11:23 ] |
Заголовок сообщения: | |
Цитата: Интерфейс - это присоединение методов и свойств классам, которые не являются родственниками, но... после добавления интерфейса - уже являются родствениками. в отличии от С-Шарпа(там насколько мне поверхностно известно по другому), конкретно в анриале, да и в с++ интерфейсы сделаны множественным наследованием, интерфейс в с++ просто обычный класс, интерфейс для ан6риаловского БП это это специальный класс... цепляются интерфейсы по синтаксису множественного наследования. теперь обьект имеет свойства двух классов. от родителя и от интерфейса. Prytaleks , чтоб обратиться к свойствам интерфейса нужно сначала привести к типу интерфейса(кастануть :) ) потом вызывать его методы. чтоб обратиться к свойствам обьекта нужно приводить к типу обьекта(кастануть :) ) потом вызывать его методы. поэтому твоя фраза звучит - "я предпочитаю кастануть вместо кастануть." стыдно должно быть что после уже пары лет ты все никак не разберешься с основами. |
Автор: | Prytaleks [ 22 авг 2018, 20:20 ] |
Заголовок сообщения: | |
в принципе я осознаю что я неправильно выразился - это ошибка, так как интерфейс требует такого же каста, точнее фраза будет выглядить так, "я больше люблю custom events, нежели интерфейс", или "я предпочитаю просто каст, без интерфейса". Также, в скрине в моем первом посте, функция с кастом не требуется, лучше сразу записать это в переменную - ссылку на бегин плэй, я так обычно и делаю, хз почему пример показал таким, вероятно в последнее время создавал pure функции)) Так будет правильнее - http://picua.org/img/2018-08/22/0cs7b6n ... 3pk8zg.png |
Автор: | Monolag [ 26 авг 2018, 20:39 ] |
Заголовок сообщения: | |
Большое спасибо за скриншоты, приятно, что вы не просто "вбросили" объяснение. Я уже не первый год занимаюсь UE4, просто я ищу альтернативы, которые могли бы облегчить разработку. Это не значит, что я их собираюсь использовать. Неплохо, конечно, с отдельным эктором БП. Но если нужно выполнить действие с объектом на карте? Это нужно вызывать в левелБП эту функцию из эктора, причем, создав инпуты для референсов к объектам. Или такая логика просто пишется у вас в ЛевелБП? Так в чем проблема все же использовать команду ce "EventName", по-моему, это частично прямая альтернитива тому, что если бы можно было кастить к саблевелу. Мне и самому кажется, что это немного странноватый способ, но пока что он работает более-менее нормально, есть, конечно огромный минус при переименовывании функций и вообще не особо удобно использовать. Но как альтернатива - использование отдельного эктора с логикой тоже не кажется идеальным вариантом... Если только использование его в совершенно редких случаях, когда нужно выполнить какую-ту логику, допустим, после того, как игрок откроет дверь. Тогда альтернатив этому общему эктору не вижу особо, он довольно хорошо справится. |
Автор: | Prytaleks [ 26 авг 2018, 20:47 ] |
Заголовок сообщения: | |
любой объект на сцене, может себя записывать в определенный массив в LogicActor, но тогда это должен быть блюпринт, если это просто статик меш, тогда да, это нужно делать в LevelBlueprint, но вообще избегай это, лучше использовать блюпринты, тогда все будет автономно. У меня актор для логики, содержит ссылки на все блюпринты в уровне, будь то то нпц, или пятна крови, и вообще любые объекты, все что требуется сохранять. Кроме сохранения, есть и куча других евентов, которые работают в каждом уровне. |
Автор: | Monolag [ 26 авг 2018, 20:57 ] |
Заголовок сообщения: | |
А почему избегать-то? Какие плюсы блюпринт эктора в данном случае? Ведь даже эпики, насколько я заметил по их готовым проектам, всю логику пишут на ЛевелБП. Я использовал для логики полностью ЛБП в игре, которая недавно вышла, и не видел особо проблем, люди играют, логика работает правильно, единственное, если логика вызывалась при использовании предмета, к примеру, а не с триггера, тогда ЛБП бесполезен, полезен ваш вариант. Я не ругаюсь и не пытаюсь вас переубедить, просто стараюсь понять. |
Автор: | Prytaleks [ 26 авг 2018, 21:07 ] |
Заголовок сообщения: | Re: |
Monolag писал(а): А почему избегать-то? Какие плюсы блюпринт эктора в данном случае? Ведь даже эпики, насколько я заметил по их готовым проектам, всю логику пишут на ЛевелБП. любая логика которая будет применима к объекту в левел БП, будет уникальной, и ее уже нельзя будет использовать в другом уровне. |
Автор: | Prytaleks [ 26 авг 2018, 21:14 ] |
Заголовок сообщения: | |
к примеру, ты написал логику в левел блюпринте которая двигает платформу влево - вправо. или, ты создал автономный блюпринт, с функцией который может двигать платформу и влево-вправо, и вверх-вниз, и как угодно по другому в любом уровне. |
Автор: | Monolag [ 26 авг 2018, 21:20 ] |
Заголовок сообщения: | |
Ну да, сейчас я понял вас, спасибо. Просто я не особо сталкивался с этим в проектах, с которыми был связан, почти каждый эвент в логике - уникальный(кат-сцены, какие-то геймплейные эвенты) так как игра линейная и касты везде разные. А все двери, интерактивные предметы, предметы для инввентаря и т.п., конечно - отдельные БП или компоненты. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |