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

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

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

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

22 ответов

54 просмотра

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

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

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

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

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

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

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

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

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

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

Blackcoat+- Автор вопроса
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
что знач на игровом уровне. в рантайме с симуляцие...

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

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

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

Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Всем привет. Есть кто разбирается в платежках? Что б принимать из других стран и выплачивать рф снг
Musa
6
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
У тебя в конфиге нигде нет deny all; или вообще любого deny?
Alexander Sherbakov
10
Портфолио: Зовут меня Александр, мне 41 год. Город Киров. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github.co...
Magic
11
Приветствую всех, есть вопросик. Передали проект на OctoberCms, без инсталяшки в полуразвернутом виде, нужно было залить бекап бд, после залития бд, оказалось, что части строк...
Лео
14
А как получить доступ к отправленному сообщению в ChosenInlineResult? Раньше кажется можно было, щас убрали?
net
2
Подскажите, пожалуйста, где в backende, или не в нем можно дату поправить? Логирует действия не в том часовом поясе
Лео
7
Есть магистры regex в чате? Задача: нужно написать regex который мэтчит полные (без сокращений по типу ::1/128) ipv6 адреса кроме 2001:0df7:cef7:29f7:52f7:adf7:2cf7:4ff7, при ...
Илья
5
посыпаю голову пеплом =) https://docs.vapor.codes/advanced/files/?h=stream#files
Seryoga
10
Карта сайта