|
|
|
Канал Игры Мечты: «UE4» |
|
|
Zachesa
151 EGP
  Рейтинг канала: 4(95) Репутация: 13 Сообщения: 1420 Откуда: Хабаровск Зарегистрирован: 12.11.2007
 |
|
Такое ощущение, что существует ограничение на время исполнения скрипта. В итоге, такой сложный скрипт как подсчёт количества акторов определённого класса в сцене может не все блоки подсчитать. А соответственно копирование нескольких матриц с данными на диск вообще может длится долго.
_________________ Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины. |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
Zachesa : |
на время исполнения скрипта.
|
Это не скрипты. И ограничения по времени нет. Есть на кол-во проходов в цикле и на кол-во элементов в массиве. Это все.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
Zachesa
151 EGP
  Рейтинг канала: 4(95) Репутация: 13 Сообщения: 1420 Откуда: Хабаровск Зарегистрирован: 12.11.2007
 |
|
Блин, а может массивы обернуть во что-нибудь, создать некий объект цельны для сохранения?
_________________ Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины. |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
Стоп, а я вот, кстати не посмотрел, а что там у тебя в массивах то хранится?
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
Zachesa
151 EGP
  Рейтинг канала: 4(95) Репутация: 13 Сообщения: 1420 Откуда: Хабаровск Зарегистрирован: 12.11.2007
 |
|
На официальном форуме открыл тему, но что-то тишина ссылка
добавлено спустя 1 минуту:
Три массива один Экторы, второй векторы координат, третий векторы ориентации.
добавлено спустя 3 минуты:
Сейчас в очередной раз пересобрал демку. Гонял её так и этак накидываю множество блоков вразнобой разных, записываю. Потом удаляю, при загрузке все они появляются, значит подсчёт и потом расстановка заново работает. Но стоит перезагрузится, то в сохранении ни чего как будь-то нет.
добавлено спустя 4 минуты:
Но сейчас нет установленных в редакторе блоков. Если их поставить, то сохранив сцену, при загрузке они появляются, если их к примеру в игре удалить. Я сразу это не видел, а потом во вьюпорте обратил внимание, что количество Экторов в сцене увеличивается. При чём в процессе таких экспериментов иногда несколько вновь установленных блоков записывалось.
добавлено спустя 4 минуты:
Есть ещё косяк, который я не победил. При ротации призмы её надо смещать на некоторое расстояние, при чём это смещение нужно при 60 гр., а при 120 не нужно. Шаг ротации 60, соответственно. Так вот при повороте я ставлю фазу ротации, булеву переменную, она иногда сбоит, меняется как ей заблагорассудится.
добавлено спустя 53 минуты:
Вообще, наверное существует способ отправки данных не в родное сохранение, а в отдельный файл вне проекта, как со сторонним сервером при мультиплеере в виде JSON контейнера. Мне то по сути дефолтное сохранение особо не нужно, только чтоб демку получить более менее функциональную и то для текущего этапа всего лишь.
добавлено спустя 11 минут:
Просто есть такой плагин https://hiazma.atlassian.net/wiki/spaces/VAR/overview может его сразу задействовать, чтоб отправлять данные на сервак.
_________________ Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины.
Последний раз редактировалось: Zachesa (15:28 19-10-2017), всего редактировалось 6 раз(а) |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
Zachesa : |
Вообще, наверное существует способ отправки данных не в родное сохранение
|
Как реализовано сохранение я тебе дал в листингах вчера. Пиши что душе угодно. Хабовская версия для этого не нужна.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
Zachesa
151 EGP
  Рейтинг канала: 4(95) Репутация: 13 Сообщения: 1420 Откуда: Хабаровск Зарегистрирован: 12.11.2007
 |
|
ТехноМаг : |
Пиши что душе угодно.
|
Вот как раз писать в С++ я сейчас не настроен. У меня на первом плане Эликсир/Эрланг. Поэтому пытаюсь всё сделать при помощи Блупринтов, жалко что они глючат.
_________________ Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины. |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
Zachesa : |
жалко что они глючат.
|
Да не глючат они. Надо просто сесть и внимательно все еще раз просмотреть.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
Нашел косяк.
Вчера не обратил внимание...
У тебя в SaveObject уходит потомок класса AActor (PrismActor)
Он не сериализуется... Тебе надо сохранять не потомок AActor, а выдрать оттуда AssetID, либо привязать класс к тегу и сохранять тег. И по тегу уже выбирать нужный класс для спавна. Либо (как я делал) перегнать нужные параметры в одноименную структуру и сохранять структуру.
Объясню почему:
Когда ты отправляешь объект SaveGame на сохранение все переменные этого объекта сериализуются в массив байт (см. GameStatics.cpp).
Переменные объектов, в частности ВСЕХ потомков uObject(а следовательно и aActor) являются указателями и при сериализации мы получаем не объект, а число типа long. Соответственно при загрузке этот указатель будет некорректным, т.к. объекта по тому адресу, куда он ссылается не будет.
PS: Рекурсивной сериализации в GenericSaveSystem нет.
Если представить твой класс SaveObject в C++, то получится вот что:
Код: |
class USpaceSave : public USaveGame
{
GENERATED_UCLASS_BODY()
public:
FString PlayerName;
FString SlotName;
TArray <FVector> PrizmLocation;
TArray <FRotator> PrizmRotator;
TArray <APrizmActor*> PrizmActor; //и вот тут косяк, ибо оно на самом деле long, т.е. при сериализации это видется как TArray <long int> PrizmActor
}
|
НУ и при загрузке (при рестарте игры!) оно пытается обратится к несуществующему (или существующему, но занятому другим классом) участку памяти. И не может получить (либо может, но неверный) экземпляр класса uClass. Вообщем именно поэтому у тебя и рандом такой при загрузке (то работает, то нет).
Т.е. при работе с сохранением ты должен убедится, что у тебя нет ссылочных переменных. Или, если перевести на понятия анриала, у тебя не должно быть переменных от Blueprint Class, если только это не Structure (см вкладку Blueprints в Content Manager. Самая последняя будет).
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (22:52 19-10-2017), всего редактировалось 8 раз(а) |
|
|
Zachesa
151 EGP
  Рейтинг канала: 4(95) Репутация: 13 Сообщения: 1420 Откуда: Хабаровск Зарегистрирован: 12.11.2007
 |
|
Спасибо огромное! Посыпаю голову пеплом, что забыл учесть такой момент, что ссылки на объект могут потерять актуальность даже непосредственно в процессе выполнения приложения, их банально удалит сборщик мусора. Что уж говорить о попытке сохранения информации в виде ссылок.
Структура из объектов класса уже имеется, из неё идёт выбор экторов для размещения на сцене. Поэтому вместо ссылок на экторы надо было сразу брать соответствующие элементы из этой структуры.
Так что собираю очередную демку, где можно будет уже сохранить то, что построил.
_________________ Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины. |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
Народ, нид хелп! Кто-нить с системами частиц разбирался? Не могу понять, где у Эмиттера задается максимальный срок жизни частицы (не модуль Lifetime). В общем у меня получается так, что через 15 минут переменная ActiveParticles встает в нуль и до свиданья. Перерыл уже весь юнит EmitterInstance.cpp - не могу найти и деббагером поймать где именно оно нулится и из-за чего
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
А кажется нашел. Осталось понять, как это можно заюзать
Код: |
const float PrevTileTimeOfDeath = TileTimeOfDeath[AllocatedTileIndex];
const float ParticleTimeOfDeath = SecondsSinceCreation + 1.0f / NewParticle->TimeScale;
const float NewTileTimeOfDeath = FMath::Max(PrevTileTimeOfDeath, ParticleTimeOfDeath);
TileTimeOfDeath[AllocatedTileIndex] = NewTileTimeOfDeath;
|
ADD: Похоже придется патчить движок... Там константа
Код: |
NewParticle->TimeScale = FMath::Max<float>(TempParticle->OneOverMaxLifetime, 0.001f);
|
или 1000 секунд. Как раз 16.6 минут получается
ADD2: Пропатчил. Потестирую и залью на гитхаб. Пригодится для потомков.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (21:19 29-04-2018), всего редактировалось 3 раз(а) |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
Залил. Кому нужно, можно забрать отсюда:
ссылка
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
Еще один ништячек от вашего покорного слуги:
https://github.com/TehnoMag/Unreal-Engine-4-Multi-Map-Plugin
Плагин MultiMap. Позволяет загружать уровни в OffScene и переключать актеров в нужный момент с уровня на уровень. Каждый уровень имеет те-же функции, что и стандартный мир. Плагин должен помочь с обходом float проблемы для очень больших локаций.
Сам плагин пока еще в разработке. Если будет желание, можете присоеденится к разработке.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
Еще один ништячек от вашего покорного слуги:
https://github.com/TehnoMag/Unreal-Engine-4-InfiniteWorld-Plugin
Плагин Infinite World. Он позволяет имплементировать бесконечный сетевой мир с моделью Клиент-Сервер-Клиент.
Пока плагин не готов, но я крепко за него взялся - ибо он войдет в ядро Лимы.
Пожелания/замечания принимаются тут и в хабе.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
Zachesa
151 EGP
  Рейтинг канала: 4(95) Репутация: 13 Сообщения: 1420 Откуда: Хабаровск Зарегистрирован: 12.11.2007
 |
|
Прошло время...
И так, пытаюсь вспомнить, что я там "наваял" в "демке" http://suef.ru/ больше года тому назад. Там я остановился на постройке стационарных объектов в космосе и возможности сохранения того, что построишь. Большим подспорьем мне стали исходники стрима https://habr.com/ru/post/327372/ само видео тоже смотрел мельком. Сейчас надо разобраться с вот этим материалом https://habr.com/ru/post/350124/ . Стоит задача сделать сетевой вариант "демки", возможно добавить ракеты и прочее оружие.
Пока не представляю даже, как делать отдельные компоненты, в проекте игры, для клиента и сервера, как организовать их взаимодействие.
Вообще, реальная игра должна будет иметь отдельно созданный сервер, рассчитанный на значительное количество игроков, но самое главное, он должен будет управлять большим количеством компьютерных персонажей. В данном случае я пока что решаю вопрос лишь с созданием прототипа, иначе говоря "демки".
_________________ Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины. |
|
|
Zachesa
151 EGP
  Рейтинг канала: 4(95) Репутация: 13 Сообщения: 1420 Откуда: Хабаровск Зарегистрирован: 12.11.2007
 |
|
https://docs.unrealengine.com/en-us/Platforms/Linux/GettingStarted
Получилось собрать проект движка и запустить компиляцию.
Мой старенький комп жевал это долго... Впрочем закачка исходников через git clone длилась ещё дольше. Скопировать архив и распаковать будет намного быстрее.
Для новых версий движка надо изменить r.PostProcessing.PropagateAlpha=False to r.PostProcessing.PropagateAlpha=0 in defaultengine.ini либо в настройках редактора поменять это. Это потребует перекомпиляции шейдеров, что естественно займёт много времени.
Плагины, которые ставишь с магазина в загрузчике ставятся в папку \Engine\Plugins\Marketplace
соответственно достаточно просто скопировать нужные плагины в папку движка из сорцов.
_________________ Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины.
Последний раз редактировалось: Zachesa (06:57 20-01-2019), всего редактировалось 4 раз(а) |
|
|
Zachesa
151 EGP
  Рейтинг канала: 4(95) Репутация: 13 Сообщения: 1420 Откуда: Хабаровск Зарегистрирован: 12.11.2007
 |
|
Вот ещё полезная ссылка. Руководство по стилю проекта UE4. https://github.com/CosmoMyzrailGorynych/ue4-style-guide-rus/blob/master/README.md
Генератор полигональных карт https://github.com/Jay2645/Unreal-Polygonal-Map-Gen
добавлено спустя 5 минут:
И даже библиотеку машинного обучения можно подключить, используя её вместе с Питоном или Блупринтами https://github.com/getnamo/tensorflow-ue4
добавлено спустя 38 минут:
Мастер сервер https://github.com/RyroNZ/UE4MasterServer
_________________ Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины.
Последний раз редактировалось: Zachesa (01:55 19-01-2019), всего редактировалось 3 раз(а) |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
Новый ништяк от вашего покорного слуги: фича под названием Collision Layer.
Эта штука позволяет определить для актера слой, в котором он будет отвечать на запросы коллизий. Работает это так:
1) Движок запрашивает окружение, нет ли на данный момент столкновения.
2) Проверяется слой коллизий. Если объект находится в другом слое, то игнорируется.
3) Проверяется канал коллизии.
4) Проверяется ответ на коллизию.
Таким образом, можно удобно организовать актеров в разные глобальные группы, внутри которых можно определить различные каналы и настройки.
Фича доступна на данный момент только для версии 4.23 и для включения требует пересборки движка. Скачать можно отсюда: https://github.com/TehnoMag/Unreal-Engine-4-Patches/blob/master/4.23/collision_layer_feature.patch
ВНИМАНИЕ! на данный момент сломаны все LineTrace функции. Они работают только в слое 0 (дефолт). Баг уже адресован и исправление будет доступно завтра. Исправлено.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (14:26 01-12-2019), всего редактировалось 2 раз(а) |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
ТехноМаг : |
Еще один ништячек от вашего покорного слуги:
https://github.com/TehnoMag/Unreal-Engine-4-Multi-Map-Plugin
Плагин MultiMap. Позволяет загружать уровни в OffScene и переключать актеров в нужный момент с уровня на уровень. Каждый уровень имеет те-же функции, что и стандартный мир. Плагин должен помочь с обходом float проблемы для очень больших локаций.
Сам плагин пока еще в разработке. Если будет желание, можете присоеденится к разработке.
|
https://github.com/TehnoMag/UE4-Module-RelatedWorld
Концептуально обновленная версия плагина (на данный момент доступна только как сурц модуль, но скоро залью на маркет в качестве плагина). В отличии от предыдущей версии полноценно работает в редакторе, умеет в репликацию и может использоваться в качестве Elite подобного инстансинга в рамках единого сервера.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (16:10 23-08-2020), всего редактировалось 1 раз |
|
|
|
|
|
Канал Игры Мечты: «UE4» |
|