Aevien, оптимизировать можно и потом.. 8 гб оперативки на это всё хватит)
Всё равно спасибо Вам, теперь я узнал что существует какой то Dictionary. Пойду читать про него
Добавлено (04.12.2013, 18:44) --------------------------------------------- Aevien, Вы предлагаете создать словарь, занести в него действия (неважно что) и затем добавить в массив Undo ?
А вот знаете.. Не один из вас двоих не прав.. Может я где то накосячил, но я попробовал 2 варианта: 1) Отсылать от пули луч 2) Проверять OnCollisionEnter И знаете что самое интересное ? Не один из них не работает качественно. Луч вызывается каждый кадр. Колижн энтр не знаю когда, но наверно тоже каждый кадр. Пуля летит настолько быстро что во время перехода на следующий кадр пуля уже пролетает через объект и изза её скорости она даже игнорирует другие объекты. В rigidbody есть параметр какой то, где есть 3 варианта. И какой то из них предназначен для объектов которые движутся очень быстро, в доках юнити было написано что это хорошо подходит для пуль. Однако даже это меня не спасает. Так что хотелось бы продолжить эту тему)
Не совсем понятен вопрос, это и есть способ, записывать все действия и объекты и все, в чем суть вопроса?
Суть вопроса? Как сделать Undo и Redo. Это и есть вопрос.
ЦитатаKamiRonin ()
но я бы на твоем месте сделал отдельный класс, назвал бы как нибудь СashWork. прописал бы ему статические методы по регистрации действий, по редо и андо в нем. там была бы ТОЛЬКО ОДНА переменная которая хранит цепочку последних действий (в заранее заданном количестве), и переменная, которая указывает на текущую позицию в нем. если у тебя создается 100 элементов в качестве ОДНОГО действия - то это сложнее, но лучше сделать так - все действия должны записываться в виде отдельной структуры с вложенным массивом (на случай 100 элементов напр.). структура "СashWorkElement" должна содержать все важные тебе параметры: ссылку на прототип созданного объекта*, позицию объекта, поворот, цвет, размер и тп. Чтобы потом можно было бы восстановить. * ссылка должна быть на прототип только чтобы сделать возможность отмены УДАЛЕНИЯ объекта без больших накладок с хранением их в невидимой форме после удаления. поэтому все объекты должны быть префабнутыми или примитивами. в классе был бы автоматический метод удаления "хвоста" - т.е. старых позиций, когда становится невозможно отменить действие. ну как то так.
Дело в том что некоторое мне ещё не понятно, некоторое я ещё не знаю. С классами я мало работал. Я умею создавать классы и часто использую их для массивов, что бы было несколько параметров разных. Но понятия не имею что такое структуры , ovveride, abstract (читайте ниже). Может кто объяснит человеческим языком? Почитал я на msdn, на dotnetpearls.com.. Непонял.. Раньше когда я о классах почти ничего не знал и нужно было хранить несколько значений то я просто делал несколько массивов и при прокрутке всего массива через for я проверял item по индексу в каждом массиве)
ЦитатаKira ()
пример на шарпе
Читал это уже вчера. И не раз . Вчера полностью прочитал, и сегодня. Впринципе понятно но всё таки и не понятно.. Как я написал выше я не знаю что такое abstract и как это использовать понятия не имею.
Поэтому как сделать хотя бы Undo у меня нормальной идеи нету. Да, на хабре есть уже код готовый, но я предпочитаю делать свой код и не использовать чужое. Так я обучаюсь. Но как сделать ундо не знаю. KamiRonin вроде писал что все объекты должны быть префабами. Отвечаю, да, это префабы. Объекты поделены на ID и каждый объект имеет название 0,1,2 (Clone) и т.д.
Жду ваших ответов и мнений по этой теме!
Добавлено (04.12.2013, 18:08) --------------------------------------------- Хотя в целом статья "пример на шарпе" понятная, но только я не понимаю что такое Document document в методах и зачем
Код
public abstract class HistoryItem { public abstract void Undo(Document document); public abstract void Redo(Document document); }
?
Сообщение отредактировал robertono - Среда, 04 Декабря 2013, 18:08
Всем привет! В данный момент я делаю редактор в котором можно что то построить что то из различных объектов. Сделано уже много и сейчас мне потребовалось сделать Undo Redo. У меня были небольшие догадки по этому поводу, но к окончательному решению как это сделать я всё же не пришел. Постоянно "строитель" инстансит и удаляет блоки, копирует большими группами и вставляет, импортирует огромные здания, изменяет размеры, вращает, один объект и сразу много. Всё это как то нужно сделать с Undo и Redo. Если бы в .net можно было сделать массив в массиве то это было бы очень просто Например массив, который типа класса в котором другой массив.. Так бы мы легко создали группы которые занесли в массив.. Но давайте не будем говорить о нереальном, а лучше поговорим о том как всё же это лучше сделать. То что это нужно делать с массивом это понятно. Но как сделать так что допустим занесём туда 100 объектов (например было вставлено 100 объектов) и если нажмем undo то именно 100 и удалится (и ещё занесется в массив Redo что бы можно было опять объекты заспавнить).
Очень жду помощи всех, хотелось бы эту проблему уладить как можно скорее. Если не знаете как это сделать, просто давайте свои маленькие догадки, может у меня появится своя идея.
Мои радости закончились на следующий день использования. Огромные ошибки рендера элементов гуи редактора. В новом MonoDevelop Ctrl + S не работает, приходится сохранять всё открытое через Ctrl Shift S. Баги баги баги... Уже жалею что проект обновил до 4.3 . У меня есть конечно бекап, всегда когда обновляю редактор делаю бекап проекта, но уже лень как то и откатывать редактор..
Очень порадовало обновление переменных в редакторе. Их отображение. Теперь настройка позиции, ввод текста у скрипта. Т.е. то что в инспекторе. Теперь фон у текста нормальный есть, а то раньше его небыло.
Очень понравился новый монодевелоп! Супер вещь! А то раньше сидел на том старом втором монодевелопе, а теперь наконец то 4 встроен в юнити. На нём писать намного удобнее мне так кажется.
nwsx, я почти не работал с углами , и узнаванием углов склона.. Где может туториал или почитать что то есть? А то не хочется как то просить что бы за меня писали код.. В любом случае, кто может, может расскажет в теории как делается , а я уже там дальше как писать сам додумаю. Заранее спасибо
KamiRonin, вау, спасибо большое за первую ссылку, много интересного
Добавлено (18.11.2013, 14:12) --------------------------------------------- Прошу помощи в редактировании RigidbodyFPSWalker. RigidbodyFPSWalker При его использовании можно забраться на очень резкий склон. Как это исправить? Что бы нормально, когда идешь на резкую гору ты не мог на неё забраться.