Перенос с другого сайта.
Попробую просто сделать клон игры Dig-N-Rig.
Чтобы было хоть что-то законченное в моём портфолио.
---
Прошёл игру Dig-N-Rig за полтора часа. Чтобы вспомнить то, что я буду копировать.
Я только думаю, делать копию или добавить реальную физику. Мне нравятся игры с физикой.
И я впервые буду пробовать делать 2D игры.
---
Создал базовое управление персонажем.
И движение руки за курсором.
Полную копию игры делать не буду. Оставлю только идею.
Всё равно это всё ради обучения.
---
Добавил базовую генерацию земли. Позже нужно будет добавить выпадение каких-нибудь ресурсов.
И нужно ограничить прыжки, чтобы в воздухе нельзя было прыгать.
Ещё убрать проблему с коллизией. Сейчас можно цепляется за стены и проходить в промежутки меньше игрока. И нужно добавить движение по неровным поверхностям, иначе он застревает на небольших выступах.
Ещё я не могу справится со светом, не получается сделать ровный свет, он обязательно ярче в центре или в каком-нибудь другом месте.
А самое приятное, не нужно думать о фпс. У игры один слой. Тут минимум рендера. По крайнем мере на этой стадии разработке
И объединение мешей тоже можно будет применить.
Надо будет попробовать сделать элементы ещё меньше...
---
Добавил "ресурсы" в игру.
И добавил их на задний фон, также как в оригинале. Чтобы под ногами не мешались.
Но под большой толщей этих ресурсов, нижние стали проникать в других и трястись от этого.
Можно будет попробовать изменять вес объектов, в зависимости от глубины.
чтобы нижние были тяжелее и вытесняли верхние.
Не помогло. Какие-то проблемы с коллизией, по этой же причине игрок может цепляется за стены проваливаясь в них.
Нужно будет попробовать убрать шары и поставить объект с гранями.
Добавил объект сложной формы, стало ещё хуже...
Очень захотелось отключить физику в игре...
Очень это странно выглядит.
Или плюнуть на внешний вид, это происходит только при большом количестве объектов.
Как я выяснил, это особенности движка Unity.
Чтобы определить столкновение, объекты должны войти друг в друга немного и вернуться обратно. Но при большом количестве, эти небольшие движения складываются в эти судороги.
Исправил управление игрока
m_Rigidbody.velocity = new Vector3(-speed, m_Rigidbody.velocity.y, m_Rigidbody.velocity.z);
А то было движение через изменения координат.
Сейчас он не проваливается в другие объекты. Но продолжает прилипать к стенам. Если идти в их направлении
Решил убрать гравитацию у ресурсов и двигать через скрипт rb.velocity = Vector3.down;
Но они продолжили трястись. Видимо физику движка не победить...
Из-за эти постоянных движений, падает ФПС при большом количестве ресурсов.
У меня большое желание сделать как можно больше объектов, Но видимо этого сделать не удастся.
Буду думать игру без физики.
И игроком не всегда удобно управлять. Может сделаю летающего дрона. Чтобы он мог зависать в воздухе.
---
Скачал проект из обучающего видео.
Там объединение меша сделано вручную. И довольно просто. Но весь код мне не понятен.
И знаний английского не достаточно чтобы понять что он говорит, но попробую при втором просмотре включить автоматический перевод субтитров.
Сейчас буду сидеть разбираться в коде.
Потом переделаю генерацию в первой игре.
Чужой код сложно изучать.
К примеру в главном скрипте я удалил 100 лишних строк. Пустые строчки и не нужный закомментированный код.
Скомпилировал игру. Оперативной памяти тратится мало. Фпс больше 100 на начальной карте.
Есть проблемы с генерацией, при удалении блоков. Он там что то мудрил со склеиваниями чанков.
Но код пока понять не получается.
Пытаюсь удалять лишнее, но там связанные скрипты. Отдельные элементы не получается запустить.
Нужно будет в чужой код добавить систему логов. Чтобы примерно понимать цепочку действий.
Поработаю тестировщиком.
Примерно понял причину ошибке в генерации. При удалении блока изменится данные в одном чанке.
А соседний чанки не видит изменений и не обновляется. Значит нужно искать чанки в радиусе от блока и обновлять их.
Сейчас попробую сгенерировать меши вручную. Пока учусь просто сгенерировать один куб.
Добавил вспомогательные точки. Чтобы понимать откуда и куда строить грани треугольников.
---
Я создал куб.
Достижение. )
Почти 100 строчек кода, чтобы свет правильно ложился на куб.
Но сейчас нужно переделать этот код, чтобы можно было не генерировать скрытые стороны куба
https://gist.github.com/Musin-Mihail/fca7e8e3e38dc...
Использовал это видео, чтобы решить проблемы со светом и тенями.
Немого переделал. Сначала создаю все точки куба.
А потом по условия создаю нужные грани.
Добавил скрытие невидимых сторон.
Сейчас 40фпс, 8000 кубов. Опять всё упирается в видеокарту.
Сейчас буду пробовать объединять их в один меш. с помощью своего кода. Если придумаю как это сделать.
Пока использовал встроенный комбинатор мешей.
125 тысяч кубов, фпс больше 300. оперативная память 1600.
Начало генерации: 11:54:31
Конец генерации: 11:54:33
Начало объединения: 11:54:39
Конец объединения: 11:54:40
Сейчас снова повторять цепочку тестов, чтобы понять с какой частотой может комбинировать меши.
Конечно не 125 тысяч кубов. Тут больше секунды. Это много.
Прикольно, что можно выводить миллисекунды.
Это 1000 кубов.
Начало генерации: 12:0:33:328
Конец генерации: 12:0:33:363
Начало объединения: 12:0:36:443
Конец объединения: 12:0:36:455
Только ещё нужно понять, сколько мне нужно.
Запихал объединение 1000 блоков в Update.
фпс больше 100.
Нужно эту тестовую сцену добавить в основную и протестировать с дронами.
Хотя достаточно просто этот созданный куб и один скрипт.
---
Поработал с первой игрой. Хотел записать ещё видео. Но заметил одну ошибку.
Объединение мешей сейчас идёт быстрее чем было. Настолько быстро, что мне нужно ограничить частоту обновления.
Каждый уничтоженный блок, даёт команду на обновление меша ближайших блоков, а они делают запрос на объединение меша своего чанка.
Это максимум 5 объединений на одно уничтожение.
Но зато это выглядит хорошо.
125000 блоков, это 1600 мегабайт памяти.
Но к концу уничтожения это больше 4000 мегабайт.
Проблемы с оперативной памятью никуда волшебным образом не делись.
Сейчас моя земля выглядит также как в майнкрафте.
Я ради интереса запустил игру Teardown. Там начальная локация использует 1000 мегабайт памяти. И не увеличивается.
Нужно изучить вексельную систему. Вроде выглядит также а работает по другому.
Хотя по сути воксель, это куб...
---
Надоело мне воевать с игровым движком...
Бьюсь головой об стену. Стена крепче.
Это дело не приносит мне удовольствие. Негативных эмоций больше.
---
Игра 2 v0.0.3
Изменил управление. Сейчас игрок летает. Позже добавлю перенос ресурсов и запас энергии.
Добавил генерацию одного ресурса. Нужно сделать, чтобы игрок не видел этих изменений. Но видел конечный результат.
---
Добавил полную генерацию ресурсов в начале.
И по сути моя система, это воксельная система.
Крупные объекты делятся на более мелкие при необходимости.
Выглядит это достаточно квадратно. Но это только начало, может дальше будет лучше. А может и не будет. )
Только подумал, что у меня начальная карта состоит и множества крупных кубов.
А я же могу поставить один огромный...
Хотя у меня сейчас при первоначальной генерации определяется, где будут ресурсы. И сразу генерируются.
И сейчас у меня мир состоит из трёхмерных объектов. Нужно переделать. Чтобы была только лицевая сторона.
А то сейчас рендерятся 5 лишних сторон.
Ещё появилась идея сделать все ресурсы невидимыми. Чтобы игрок копал в слепую. А позже можно будет построить радар.
Тогда первоначальную генерацию можно будет отключить. И генерировать в процессе.
Это если фпс будет падать.
Я продолжаю издеваться над движком, требуя от него невозможного и злясь, когда он не делает то, что я хочу...
Сейчас уменьшил размер куба ещё в 2 раза и провёл тест.
Если не считать судорог у ресурсов, то в целом всё хорошо. фпс больше 60.
Даже в какой-то степени похоже на оригинал.
Потом всё заменю на спрайты. Чтобы уменьшить нагрузку на видеокарту.
Ещё одна проблема движка. Маленькие объекты на большой скорости проходят сквозь другие объекты...
Ресурсы падая с большой высоты уходят под землю.
Можно убрать ускорение для объекта или попробовать уменьшить массу.
Изменение массы не помогло. Пришлось добавить трение объекта. Чтобы скорость при падении постоянно не увеличивалась.
---
Добавил генерацию второго ресурса. И сделал, чтобы в одном ресурсе были вкрапления более редкого.
Потом генерация будет зависеть от глубины.
Приходится долго крутить настройки рандома, чтобы получился нужный вариант
Можно использовать шум PerlinNoise. Но мне кажется так будет сложнее настроить много ресурсов.
И сейчас это полный рандом, а PerlinNoise фиксированный и симметричный. Нужно будет играться с координатами.
Но месторождения будут более плотные. Хотя не понятно что лучше.
Может попробую потом.
Хотя пробую представить код и логику. и не получается.
К примеру в майнкрафте нет пересекающихся месторождений. Скорей всего из-за PerlinNoise.
По крайней мере я не помню, чтобы в одном месте было несколько ресурсов которые пересекаются.
Все руды находятся плотно к друг другу.
Чем больше будет ресурсов, тем больше на карте будет маленьких объектов при начальной генерации.
Всё же сделаю потом карту невидимой. Чтобы генерировать её постепенно.
А игрок видел только ближайшие блоки.
---
Нашёл ещё куда выкладывать игры.
https://musinmihail.itch.io/game2zip
Позже попробую скомпилировать веб версию, чтобы можно было запустить с браузера.
---
Игра 2 v0.0.4
Добавил прототип лазера для добычи ресурсов.
И добавил минимальный геймплей. Чем больше добыто ресурсов, тем мощнее лазер.
Заменил землю на спрайты, ещё нужно ресурсы заменить.
Попробовал скомпилировать веб версию игры. Не открывается. Запускал в двух браузерах. Буду разбирается.
Попробовал добавить на сайт.
При загрузке ошибка.
There was a problem loading your project:
Archive contains filename with non UTF-8 Encoded characters
Что-то с компиляцией. На сцене у меня тоже квадраты за место букв.
Хотя в Exe норма.
Нашёл в готовых файлах русское слово тест. Сейчас буду искать в проекте откуда он его берёт.
У меня конечно есть проекты где я люблю использовать слово Тест. Но в этом проекте уже всё переименовано на английский...
У меня папка для компиляции называется Тест.
Сейчас попробую в другую.
Попробовал пока вручную изменить название файлов и код в htmp.
Сайт переварил. Даже загрузка появилась. Но игра не загружается до конца.
Пусть грузится.
Перекомпилировал в другую папку. Без изменений.
Нашёл в названии скрипта Chance. Первая буква была русская почему-то...
Случайно заметил в логах с ошибкой, когда редактировал код. Там был серый квадрат за место буквы
В итоге ничего не поменялось...
Печально. С компьютера вообще не грузится.
На сайте примерно 90 процентов
---
Я сообразил в браузере открыть консоль. Чтобы увидеть почему не грузится игра.
И он выдал несколько ошибок, благодаря которым я мог поискать ответы в интернете.
Первое что я выяснил, игру можно запустить только с сервера.
И после нескольких попыток, мне удалось загрузить игру.
Нужно было отключить сжатие в настройках программы.
И саму страницу с игрой тоже пришлось пару раз перезагрузить.
Первая загрузка проходит долго.
Ещё исчез интерфейс, но есть вероятность, что он за экраном.
https://musinmihail.itch.io/game2-webgl
---
Увеличил расширение, интерфейс появился.
И в браузере фпс падает быстрее при большом количестве объектов.
Хотя, может мне кажется.
---
Поизучал игры на сайте https://itch.io/
Там много игр которые я знаю и которые проходил для игрового канала.
Можно будет подписаться на их новости и играть в свежие версии.
Заметил, что у них есть gif картинки и решил себе сделать.
Там максимум 3 магабайта на картинку. Тоже для меня новый опыт.
https://musinmihail.itch.io/game2-webgl
---
Ничему меня жизнь не учит.
Я опять сделал бота в своей игре... )