Интересует теория. Может кто посоветует что-то дельное. В общем по сцене

перемещаю Actor's, компоненты акторов, в основном это статик меши. Изменяю их Location, rotation, scale. Удаляю их и сравню новые.

Задача следующая, нужно организовать две кнопки "Вернуть изменения на шаг назад" (хотя бы до 20 шагов) и шаги вперед.

Как лучше это сделать в теории?

22 ответов

85 просмотров

Мб создать массив трансформов , в него записывать изменения и по ним скакать?

Сергей Telegram
Мб создать массив трансформов , в него записывать ...

Других вариантов нет в природе. По-любому надо сохранять

Ты undo/redo что ли решил изобрести? xD

Blackcoat+- Автор вопроса

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

Blackcoat+- Автор вопроса

Есть пример как это грамотно сделать?

Blackcoat+
Есть пример как это грамотно сделать?

Конечно, нажать Ctrl + Z 20 раз. Я просто вопрос твой не очень понял. Ты действительно просто хочешь вернуться в истории изменений на n шагов назад?

Blackcoat+
Да, все верно

У тебя плюсовый проект?

Blackcoat+- Автор вопроса
Blackcoat+- Автор вопроса
Артём
Оптимизация минус?

Там проект в одну сцену

Blackcoat+
Там проект в одну сцену

В любом случае грамотно будет заносить в массив только то, что действительно необходимо

Blackcoat+
Блупринты

Скорее всего на блюпринтах так сделать не получится. Может быть в 5-ке, конечно, в какой-то подсистеме есть какие-то блюпринтовые функции для отмены действий на N шагов назад, но надо искать (хотя подозреваю, что их всё же нет). В коде такое сделать несложно. Тут есть пара вариантов: 1. Ты просто пользуешься Undo History и руками отменяешь действия 2. Создаёшь EditorUtilityWidget, в котором в ручном режиме вызываешь методы BeginTransaction и EndTransaction. Это не поможет тебе вернуться на какое-то определённое количество шагов назад, но зато позволит откатиться в строго определённое состояние. Ну т.е. задумывал ты масштабное редактирование объектов, вызываешь BeginTransaction, закончил редактирование - вызываешь EndTranscation. Если что-то не получилось - в буффере отмены у тебя будет твоё действие, оно разом отменит изменения

Вообще у меня был вариант подвязаться на какие-нибудь редакторские делегаты, типа перемещения, помещения на сцену и т.д. Но во-первых, оно всё-равно как-то в голове не укладывается зачем это мудрить, если можно Ctrl + Z нажать. А во-вторых, вообще сходу не ясно что там вынесено в блюпринты, а проверять всё времени не хватит. Ну и интуиция мне подсказывает, что чуваку реально какой-то снапшот во времени был важнее вот этого вот всего и просто транзакции идеально подойдут. Но может я и ошибаюсь :)

А кроме шуток, кстати, вполне себе идея - если тебя интересуют только определённые свойства определённых акторов, то вполне можно сделать как ты сказал, этакий свой кастомный буфер истории. Только всё-равно не ясно нафиг оно вообще понадобилось, пока это делаешь, уже 10 раз бы кубики руками расставил 😆

Blackcoat+- Автор вопроса

На счет глобального изменения и записи положения всех акторов разом на сцене задумывался. Но и отказался от этой затеи. В моем случае в проекте реализован режим редактора, где игрок сам может на подготовленную сцену расставить заготовки акторов (стены, мебель и прочее). То есть игрок сам контролирует расположения объектов на сцене. А значит на каждое изменение повешу событие записи в класс событий (буть это transform, или удаление/создание актора). На блупринтах думаю это можно сделать. Но тут загвоздка. Если все изменения записывать в массив transform, то привязать его к определенному актору проблема. Если через массив акторов это так понимаю нужно заспаунить 20 акторов (при условии n=20 шагов) и при каждом событии вносить в них изменения. В принципе реализуемо. Еще вариант создать структуру и записывать все события в нее..

Blackcoat+- Автор вопроса
Blackcoat+
На счет глобального изменения и записи положения в...

Через структуру все гуд работает 👍 Еще вопрос из теории, как организовать свойство похожее на Surface Snapping при перемещении актора по сцене? В общем при перемещении меша мышью он беспрепядственно проваливается сквозь остальные меши. Можно как нибудь это исправить?

Blackcoat+
Через структуру все гуд работает 👍 Еще вопрос из ...

еще можешь просто заранее подумать про единые размеры, которые кратны размерности в анриле, и ставить все по сетке просто

Blackcoat+- Автор вопроса
Pavel
включить surface snapping попробовать)

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

Blackcoat+
Подскажите как его включить на игровом уровне? Во...

что знач на игровом уровне. в рантайме с симуляцией физики?

Blackcoat+- Автор вопроса
Pavel
что знач на игровом уровне. в рантайме с симуляцие...

Без физики, физика не нужна в моем случае. Вот допустим есть комната и мне нужно спаунить объект и допустим прилепить его на стену, на потолок

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

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

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта