Привет. Подскажите плиз, как можно сохранить состояние объектов на сцене? Представим

условно, что есть игра AngryBirds и мне нужно сохранить положение разрушаемых\двигаемых объектов на сцене (стены, перекладины и т.д.).

Как я делаю сейчас в момент запуска шарика (именно в момент) я прохожусь по гейм объектам и сохраняю их локальную позицию и ротейшен:

var objects = FindObjectsOfType<PersistedObject>();

foreach (var obj in objects) {
objectsForSave.Add(new PersistedObjectPlacement(obj.transform.localPosition, obj.transform.localRotation.eulerAngles));
}

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

хорошо было бы сохранять когда игра закрывается, но когда срабатывает OnDestroy компонента сохранения, то объекты уже уничтожены и сохранять там нечего.

7 ответов

10 просмотров

А зачем вообще сохранять объекты?

Max-Max Автор вопроса
Вячеслав Колесов
А зачем вообще сохранять объекты?

затем, что игрок может выйти посреди уровня, и когда снова зайдет, то нужно чтобы было такое же состояние уровня как на момент выхода

Max Max
затем, что игрок может выйти посреди уровня, и ког...

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

Max-Max Автор вопроса
Вячеслав Колесов
Если уровни небольшие, то игрок вполне может пройт...

я просто привел в пример энгрибердс (ибо в него все играли и представляют, что там и как), но там по сути игрок может десятками минут воздействовать на объекты на сцене и потом выйти. а можно как-то отследить, что объекты уже обездвижены? типа посмотреть в их RigitBody и посмотреть на velocity или еще на что-то?

Max Max
я просто привел в пример энгрибердс (ибо в него вс...

Именно, Rigidbody и его Velocity. Или смещение координат по времени например каждую секунду oldobject.transform == newobject.transform

Похожие вопросы

Обсуждают сегодня

Всем привет. Подскажите, почему не меняется значение поля при переключении сайта?
Alexander Peterikov
11
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Приветствую друзья, подскажите сколько в среднем стоит на данный момент создать тг бота который будет как магазин? Показывать ассортименты доставлять заказы и тд? Все по станд...
Eugene
3
А вот из практических задач на работе, кто работает расскажите относительно задач на работе, как вообще выживаете. Если есть желание, интересно тоже что и как сейчас с этим . ...
...
2
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Привет. На сайте с видео установлена защита, не позволяющая скачивать видео, делать скриншоты и скринкасты, но это работает только с пк и устройств эпл. С андроида работают ск...
Lencore
1
Добрый день, не подскажите, если в OC-V3 поменять страндартную директорию /storage/ на /storage2/ - не будет сильно много проблем ?
Max Dubovsky
32
Добрый день! Кто-нибудь знает как подключить твиг в контроллеры плагина?
Николай Афанасенко
5
@dblackCat Привет. Это же твой плагин? https://octobercms.com/plugin/catdesign-productbundle
Alexey Yakimov
5
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Карта сайта