![]() |
Tile Map Editor
Вот наконец и готова первая версия моего редактора тайлового уровня на юнити:)
![]() http://dl.dropbox.com/u/55489242/Til..._editor_v1.rar Т.к. я нацеливался на создание маленьких тайловых уровней для каких-то логических игр, то каждый блок уровня это отдельный объект. Теоретически статический батчинг должен был их объединять, однако в окне статистики, хз почему, просто огромное количество драв калов. Ну и т.к. опыта у меня еще нет, то наверняка там есть еще куча ошибок. Буду рад вашим советам. Управление: левая кнопка мыши - добавить тайл шифт - выделить блок шифт + левая кнопка мыши - удалить блок. 3д курсор всегда соприкасается с каким-то блоком, поэтому создать блок в пространстве нельзя. Не знаю так оставить или можно что-то придумать. |
Ответ: Tile Map Editor
Советы на вскидку (спать охото):
1. Чтобы работал статический батчинг надо помечать объекты статическими. Это сработает только когда объекты расставлены в редакторе, а не созданы динамически. 2. В твоем случае можно сделать комбайн мешам уровня. 3. т.к. объект низкополигональные у тебя много динамически сбатчилось, это нормально. |
Ответ: Tile Map Editor
1. Делаю isStatic = true. Может статический батчинг не работает потому что все объекты клоны?
2. Вручную объединять все в один меш не хочу т.к. много мороки и это работа unity. 3. Хотя и сбатчилось много, но и дравкалов много очень. Все же не понимаю откуда столько. И почему динамический батчинг, а не статический(: |
Ответ: Tile Map Editor
Цитата:
|
Ответ: Tile Map Editor
Я когда писал вот эту заготовку редактора - http://shgames.ru/unity/bombers_ed.html
динамически клеил меши по материалам брав кусок 10х10 клеток. Редактор сейчас работает криво, вероятно из-за того что был сделан на Unity 2.6, а плеер сейчас 3.5... управление мышью глючит ( |
Ответ: Tile Map Editor
так я их расставляю в редакторе. только своим способом, а не стандартным. Т.е. перед запуском игры уже все расставлено. Может объекты можно как-то по другому создавать?
|
Ответ: Tile Map Editor
У них у всех статик стоит? Или только у корневого элемента Map?
|
Ответ: Tile Map Editor
У всех конечно.
Кстати, изменение трансформации корневого Map начало занимать несколько секунд) Еще пару вопросов. 1. Как правильно сделать, что бы при клацании мыши в сцене не происходило переключение на другой объект? Сделал так, но по-моему это не лучший выход. Код:
if( Event.current.type == EventType.Used ) { 2. Событие MouseDrag должно возникать только когда я перемещаю мышь с зажатой кнопкой? Оно у меня иногда вызывалось и просто при движении мыши. А события типа KeyDown\KeyUp вообще только пару раз появились. Не знаю это баги юнити или я чего-то не понимаю. |
Ответ: Tile Map Editor
Вопрос где ты их ловишь? в OnSceneGUI? Если да, то я ловил их в блоках Handles.BeginGUI() и Handles.EndGUI().
|
Ответ: Tile Map Editor
Как блоки Handles.BeginGUI() и Handles.EndGUI() могут исправить проблемы с событиями? Ведь Event.current инициализируется еще до вызова OnSceneGUI. И здесь http://unity3d.com/support/documenta....BeginGUI.html написано, что это только для рисования 2д элементов.
Нарисовал другую карту http://upwap.ru/2034691 теперь дравкалов нормально, но батчинг все равно динамический. Статический так и не заработал. Кстати, EditorUtility.SetSelectedWireframeHidden после запуска сцены теряет свое состояние( Хз баг или не баг. |
Ответ: Tile Map Editor
Ну а почему ты думаешь, что батчинг не статический? Там где-то в сцене статический батчинг создает объект, на котором висит собранный в один объект меш с одинаковыми материалами.
|
Ответ: Tile Map Editor
Вообще я думал, что в окне статик показывается только динамический батчинг. Тем более количество сбатчиных объектов зависит от количества видимых, как будь то оно на лету батчится.
Объектов никаких не создается. Или он скрыты. А никак нельзя узнать откуда берется такое большое количество драв калов у меня в первой карте? |
Ответ: Tile Map Editor
Вложений: 1
работает у тебя статик батчинг, только не так как ты хочешь
|
Ответ: Tile Map Editor
Да я хочу, что бы драв калов было меньше. А как этот меш можно увидить?
Можно сделать, что бы коллайдеры и тп рисовалось в Gizmos только, если выбран сам объект, а не его родитель? А то, если каждый объект рисует свой коллайдер, то каша страшная получается. Если это делать через HideFlags.HideInHierarchy, то этот объект мышкой не выберешь. А мне надо как-то сделать возможность выбора конкретного объекта на случай, если надо будет его настроить. |
Ответ: Tile Map Editor
Цитата:
Если ничего разрушаться не собирается в этом уровне, то удалить все колайдеры, сделать комбайн мешам, потом добавить меш колайдеры тем мешам которые останутся. |
Ответ: Tile Map Editor
Не, объединять не хочу т.к. предполагаю, что объекты будут не только кубики, и не только меши. Да и может еще и будут разрушения) Пока только учусь и делаю движок для тайловых игр.
Вот какой ужас получается, если все коллайдеры рисуются http://upwap.ru/2037295 Так и не нашел способ управлять отрисовкой в этот Gizmos(: |
Ответ: Tile Map Editor
Видел я. Я показывал редактор, там все мешами 10х10 клеток (можно больше, но не захотел), причем нет невидимых граней (нет перегрузки по полигонам) и подразумевается разрушение (регенерация меша в рантайме).
Сейчас у тебя в уровне более тысячи колайдеров, это по твоему нормально? |
Ответ: Tile Map Editor
А что тут не нормального? Даже на мобилке не плохо работало.
Вообще максимальный размер уровня я предполагаю 30x30. И пока не знаю с коллайдерами можно будет сделать так как я хочу. А хочу я, чтобы игрок мог ходить только от середины до середины тайла. Я такое раньше делал давая тайлам теги куб или горка. Может и сейчас придется так сделать. Как с коллайдерами это сделать я пока не представляю. Вот только, если уберу коллайдеры, то как в редакторе определять на каком объекте мышь? |
Ответ: Tile Map Editor
Ну у меня плоский мир планировался, поэтому ни одного колайдера:
http://shgames.ru/unity/bombers_gameplay.html Управление: стрелки и D |
Ответ: Tile Map Editor
Мда, надо все же отказываться от коллайдеров. Тогда в редакторе остается проверять пересечение луча с Bounds тайла. Благо у bounds есть метод IntersectRay.
Вот только не уверен для системы частиц bounds создается? И перебирать все объекты придется вручную или можно как-то автоматизировать процесс? |
Ответ: Tile Map Editor
Мой редактор не оперирует объектами, он оперирует массивом. Геометрия создается при старте уровня и не содержит лишних граней.
Самый простой способ сделать 3d редактор - редактировать по слоям. Пересечение луча с плоскостью найти не сложно. Я даже не знаю что посоветовать... мне на ум бы пришло переписать редактор с нуля, но может тебя устроит результат комбайна и применения мешколлайдера к результату? |
Ответ: Tile Map Editor
да я понял как твой редактор работает. И все же мне не очень хочется делать подобное. В моем редакторе, кстате, есть пересечение луча и плоскости.
В смысле переписать редакторе с нуля? Редакторе юнити или мой? Мне сейчас надо узнать на какой тайл в редакторе наведена мышь. Вот думаю перебирать все тайлы через transform.GetChild или можно сделать, что бы тайлы в редакторе сами реагировали на луч т.е. сделать типа свой коллайдер сделать. Но наверна более надежно будет вручную перебрать тайлы. На системе частиц просто огромный Bounds, да и IntersectRay работает как-то фигово. Придется писать свою функцию проверки пересечения луча с боксом. В юнити как я понимаю таких функций нету. |
Ответ: Tile Map Editor
Сделал вторую версию. Теперь на тайлах нету коллайдеров, а каждый объект представляется как пустышка, горка или куб. В редакторе только куб.
Демо http://dl.dropbox.com/u/55489242/Til...WebPlayer.html Проект http://dl.dropbox.com/u/55489242/Til...r.unitypackage Скрин редактора http://dl.dropbox.com/u/55489242/Til.../v2/Editor.png Скрин игры http://dl.dropbox.com/u/55489242/Til...or/v2/Game.png Можно как-то сделать, что бы мой 3д курсор рисовался с учетом буфера глубины, а не поверх всего? Еще наверно хорошо бы сделать, что бы кроме куба рисовался и объект, который собираемся ставить на сцену. А такой цикл foreach(Transform trans in transform) намного медленнее, чем перебор объектов из List? А с 3.5 в веб плеере меню с ПКМ никак не убрать? |
Ответ: Tile Map Editor
|
Ответ: Tile Map Editor
GL только в Pro доступен(
Через Graphics.DrawMeshNow не отрисуешь систему частиц или SkennedMesh, так что остается второе. То что цикл по чальдам работает так же быстро как и по обычному списку конечно круто, но у меня там еще для каждого объекта делается GetComponent. Это говорят сильно может затормазить игру(: Лучше буду хранить в List, вот только никак нельзя узнать, что объекту добавился/удалился потомок? На случай, если добавится\удалится объект в игру. А через GL все равно рисуется все поверх. И цвет всегда белый. |
Ответ: Tile Map Editor
Попробовал я разделить скрипт редактора на скрипты Map и TileSet.
И Editor скрипты сделал для карты и тайлсета. И вот вопрос как из одного Editor скрипта добраться до другого? Надо получить выбранный тайл получить) |
Ответ: Tile Map Editor
Статическая переменная
|
Ответ: Tile Map Editor
Это не ооп:(
|
Ответ: Tile Map Editor
Тогда синглтон ;)
|
Ответ: Tile Map Editor
синглтон это хранить и передавать значение через какой-то левый класс?
Наверно лучше буду хранить это в TileSet : MonoBehaviour. Почему, если я создаю поле public TileSet tileset = new TileSet();, то в инспекторе мне предлагается задать этому полю значение как буд-то эта ссылка равна null? Кстати, в версии 3.5 между тайлами мелькают полосы. Почему-то тайлы не плотно прилегают. А, синглтон это сохранить ссылку на текущий объект в статическое поле. По-моему здесь это не уместно. |
Ответ: Tile Map Editor
Цитата:
Цитата:
|
Ответ: Tile Map Editor
Да мне TileSet и не надо было использовать как компонент.
Просто если не наследовать его от MonoBehaviour, то в инспекторе не отображается. А я хотел что бы в инспекторе отображался объект TileSet и его поля. По-моему в JS так делали. Или я что-то не так помню. |
Ответ: Tile Map Editor
|
Ответ: Tile Map Editor
Цитата:
Почему событие MouseDrag не вызывается при нажатой левой кнопки мыши? И как самому отследить это? Узнать зажата ли кнопка мыши в данный момент нельзя и Event.current.button равно 0, если лкм зажата или не зажата никакая( |
Ответ: Tile Map Editor
Это действует на классы.
http://unity3d.com/support/documenta...useButton.html показывает, зажата ли кнопка. На счет GUI - надо обрабатывать эвент http://unity3d.com/support/documenta...MouseDrag.html для расчета смещения, и эвенты http://unity3d.com/support/documenta...MouseDown.html http://unity3d.com/support/documenta...e.MouseUp.html для определения какая кнопка нажата http://unity3d.com/support/documenta...MouseDrag.html работает только на объектах с колайдерами в режиме Play. |
Ответ: Tile Map Editor
Цитата:
Цитата:
Вообщем я так понимаю надо с помощью MouseDown/MouseUp и bool mousePressed отслеживать нажата клавиша или нет. Как-то тупо это делать вручную( Надо было это прописать HandleUtility.AddDefaultControl(GUIUtility.GetCont rolID(FocusType.Passive)); |
Ответ: Tile Map Editor
Сделал следующую версию)
Демо http://dl.dropbox.com/u/55489242/Til...WebPlayer.html Проект http://dl.dropbox.com/u/55489242/Til...r.unitypackage Видео http://www.youtube.com/watch?v=lmV4W...ature=youtu.be С редактором уже наверно все закончено. В игру добавил объекты которые можно двигать, объекты которые сами двигаются и тригеры. Но все это работает фиговато т.к. двигающиеся платформа двигается не видя препятствий перед собой, а игрой стоящий на такой платформе прикрепляется так, что тоже пройдет сквозь все. Хотя это и не очень важно для многих подобных игр. И на одну клетку могут зайти несколько объектов, а это уже хуже. Так что надо как-то полностью по другому делать игровую часть. |
Часовой пояс GMT +4, время: 01:57. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot