breadp4ck / rybov Goto Github PK
View Code? Open in Web Editor NEWGame about fish
Game about fish
Слева сверху находится таймер, а прямо под ним количество очков.
Справа сверху находятся иконки с выловленной рыбой (в соответствии с видом рыбы #24). Если рыба воруется, то она отодвигается чуть вниз лапой. Если рыба перестаёт вороваться, лапа исчезает и рыба задвигается назад в рыбный ряд (лапа появляется/исчезает через прозрачность). Исчезнувшая рыба отодвигается вниз и уходит в прозрачность, и рыбный ряд сдвигается.
Справа сверху находятся сверху вниз:
Картинка немного устарела, потому что я упрастил интерфейс.
У разных игроков разные форматы экрана (16:9, 16:10, 4:3 etc). Нужно сделать так, чтобы камера захватывала игровое поле полностью, то есть ширина и высота камеры не должны быть меньше игрового поля.
Дополнительное состояние для котов, в которое они переходят, когда на игровом поле нет рыбы.
Нужно нарисовать анимацию и написать логику.
Шейдер водной ряби для #8.
Увеличивать спрайт рыбы во время драг-н-дропа. Уменьшить спрайт назад при отпускании рыбы. Анимация должна происходить плавно.
Так она будет лучше визуально выделяться для игрока.
И убрать интерполяцию во время драг-н-дропа.
Кот это самый динамичный игровой объект.
Состояния:
Каждое состояние сопровождается соответствующей анимацией:
Ходьба зациклена.
У шлёпанья и взятия рыбы анимация начала и конца.
У оглушения три анимации: получение сильного удара (вход в состояние), собственно оглушение (цикл) и возвращение в норму (выход из оглушения).
Если будет реализовано воровство рыбы из рук игрока в #22, то добавить анимацию прыжка.
Нарисовать головные уборы в соответствии с диздоком. Необязательно рисовать сразу всё -- лучше отслеживать #23, чтобы не делать лишнюю работу. Возможно, не все виды котов будут добавлены в игру.
Головные уборы:
Разрешение: 256x256
Игрок получает очки за:
За подсчёт очков отвечает глобальное игровое состояние (#15).
Рыба прыгает сразу после драг-н-дропа, но она этого делать не должна.
Если рыба касается озера, то она должна считаться утраченной -- исчезать и удаляться из пула рыб. Пускай там будем какая-нибудь анимация уменьшения, появляться всплеск (система частиц + звук).
Игра должна отслеживать своё игровое состояние. Предполагается, что это будет происходить в отдельном синглтоне, который будет заниматься подгрузкой уровней (#25), подсчётом очков (#30) и управлением временем игры (т.н. таймер).
Стадии игры:
Очки игрок получает за:
Честно говоря, я не знаю, как лучше спавнить котов -- случайно или заранее предопределено. Я скорее склоняюсь ко второму варианту.
Т.е. мы должны заранее описывать где и когда какой кот заспавнится (или когда, но не где). Т.е. это список ресурсов SpawnTime, который включает себя список котов и места спавна (либо галочки "случайная позиция").
Стоит помнить, что Парашютист может приземлиться в любом месте и уйти по земле, а Водолаз может вылезать из воды и залезать назад в воду.
В какой-то момент времени за крючок может зацепиться рыба (#27). У игрока есть небольшой промежуток времени, чтобы взять удочку.
После того как игрок взял удочку, рыба начинает движение из центра в каком-то из направлений, периодически меняя как направление, так и скорость движения (случайно; зависит от типа рыбы).
Во время рыбалки рыба представляется как небольшие волны на воде (игрок не видит рыбу).
Наружу в зависимости от вида рыбы (#24) торчит несколько параметров:
Степень выловленности рыбы это float от 0 до 1, где 0 -- рыба сорвалась, и 1 -- рыба поймана. Начальное значение выловленности рыбы -- значение выловленности как только игрок взял удочку. Например, 0.2.
Изменение степени выловленности, помимо коэффициентов, зависит от позиции рыбы и позиции удочки, и высчитывается по математической формуле, которую я пока не придумал.
После того как рыба выловлена, она вылетает из пруда и падает в случайное место заранее указанной области, которая задаётся в редакторе (случайное место в круге).
Во время мини-игры с выловом рыбы игрок должен крутить колёсико вниз, чтобы значительно ускорить вылов рыбы (такой множитель для скорости вылавливания).
Этот множитель должен быть вынесен в Unity как параметр, который можно редактировать.
Сформировать визуальный стиль локации на основе референсов и согласовать его с командой.
Добавить в игру музыкальное сопровождение.
На выбор несколько опций:
По нажатию на Esc во время игрового процесса игра должна останавливаться и вызываться специальное меню паузы.
Под остановкой игры понимается полное прекращение симуляции игровой системы, в том числе течение времени, передвижение котов, вылов рыбы и т.д.
При повторном нажатии на Esc игровой процесс должен возобновляться. Функция, отвечающая за остановку и возобновление процесса должна быть вынесена в отдельное место, потому что к ней также должен иметь доступ интерфейс (кнопки Resume и, может быть, Pause).
Нужен префаб с озером, в котором есть шейдерные волны.
Originally posted by @Breadp4ck in #33
Нам нужен способ настроить проект на Unity вместе с git LFS. У GitHub есть для этого соответствующая интеграция.
Помимо этого я буду вести документацию, чтобы все могли понять, что мы делаем. Я считаю, что .md
файлов будет достаточно. Написание документации я буду осуществлять в Obsidian.
Куст и камень. Эти пропсы будут использоваться как обстаклы. Каждая коллизия будет находиться в нижней части пропса.
Разрешение: 512x512 или 1024x1024 (в зависимости от размера).
Нам нужно оформить страницу нашей игры на itch.io.
Я займусь непосредственно оформлением, расставлю скриншоты и напишу текст. Текст должен содержать краткое описание игры, информацию об управлении, сторонних ассетах и авторах.
Также нужно загрузить билды (#21).
@NastyaYakobyuk нужно нарисовать (или типа) два рисунка:
Список полезных вещей:
BG затемняется. Посередине находится панель с интерфейсом.
На панели располагаются сверху вниз:
Обычная такая дочка с минимальным количеством деталей. Без лески. 5 состояний в зависимости от степени натяжения (без сгиба -> очень сильный сгиб под 90 градусов).
Отдельно стоит нарисовать поплавок (разрешение 128x128).
Разрешение: 512x512
Будем переходить между сценами в Unity.
SceneManager.LoadSceneAsync($"{Constants.SceneNamePattern}{GameLevelContext.CurrentLevel}")
Асинхронно, но херово (чуть-чуть).
На счет получения имени сцены надо еще подумать
Составить список звуков и найти/создать необходимые ассеты.
Разместить по центру экрана панель, на которой сверху вниз расположились:
<иконка>.............<кол-во_рыб> x <очков_за_рыбу> <всего_очков_за_рыбу>
.<иконка>.............<всего_очков>
.fish + actions = total
).Граница это место, где коты деспавнятся и рыба становится утерянной. Если у кота есть рыба -- он двигается к ближайшей границе.
Деспавн котов может происходить не сразу, а через какое-то время, пока коты не скроятся с экрана (через прозрачность, например). Коты вне локации считаются неуязвимыми.
Коты должны обходить препятствия (пропсы-обстаклы). Коты передвигаются по мешу навигации. Меш навигации запекается один раз в редакторе, причём для каждого уровня он свой.
Водолазы способны возвразаться нахад в воду, если у них есть рыба.
Область вне игрового поля обставлена большим количеством пропсов без коллизий. Своеобразный лес -- область вне досягаемости игрока.
Интерфейс делится на несколько разделу:
Всегда слева снизу видна информация о билде (для солидности) и список авторов и их ролей.
необязательно Всегда слева сверху видно, что игра сделана в рамках джема Fish Fest (можно включить вот это изображение).
Вертикальный список справа по центру экрана:
### Выбор уровней
Вертикальный список справа по центру экрана:
- Название игры лейблом.
- Грид со списком уровней. Каждый уровень это квадратик с цифрой, по нажатию на который можно начать проходить игровой уровень.
~- Кнопка возвращения к главному экрану. ~
Коты разделяются по поведению и головным убором в соответствии с документом.
Виды котов:
За подробностями по реализации обращаться к @Breadp4ck.
Добавить музыку в игровой процесс в соответствии с #17 (comment).
Для меню можно использовать что больше нравится. Можно даже весь OST поставить на репите (SneakyCat.mp3
).
Собрать релизные билды игры под Windows и Linux. Тщательно их протестировать (всем вместе). Добавить как релиз на Github и закинуть их на страницу с игрой #9.
Пруд представляет собой не слишком приплюснутый эллипс, в котором можно вылавливать рыбу.
Пруд должен быть анимирован. В качестве анимации я бы предложил покачивания травы и рябь воды.
Однако рябь можно реализовать процедурно с помощью шейдеров и добиться таким образом более интересного эффекта. Для более простой реализации шейдеров нужно убрать все волны со спраайтов озера и сделать маску для воды, чтобы рисовать рябь только там, где есть вода.
Референс: #28
Разрешение: 2048x2048
Для основного интерфейса возьмём эти ассеты: https://prinbles.itch.io/robin
Нам оттуда нужны панели, кнопки, слайдеры (которые для настройки звука).
Нужно скачать ассеты и встроить их в интерфейс.
Нужен индикатор натяжения удочки, который будет показывать, правильно ли игрок держит удочку.
Он находится рядом с удочкой. Сверху или снизу -- где лучше видно.
Индикатор представляет собой вытянутый по горизонтали прямоугольник -- зелёный по центру и красный по бокам, -- с треугольничком (или поплавок #5 или типа того), который движется по этому индикатору и обозначает соответствующую степень натяжения.
Добавить в диздок более подробное описание игрового цикла.
Подробнее описать игровой процесс по мере формирования механик
Игрок может бить некоторые объекты. Каждый объект обрабатывает полученный удар по-разному.
Удар обладает силой от 0.0 до 1.0 (сделать через clamp). Сила удара увеличивается со временем, когда игрок зажимает кнопку удара (ЛКМ). Удар происходит по отпускании кнопки удара. Ударяются все объекты в небольшой области вокруг указателя мыши.
Бесшовные текстуры травы или земли 2048x2048. Будут использоваться в качестве бэкграунда.
Спавнеры рыб, которые навешивают на удочку конкретную рыбу в конкретном порядке.
Время клёва рыбы должно определяться временем, прошедшим с последнего вылова или клёва (если сорвалась), либо в конкретное игровое время -- я пока не знаю, что будет лучше. С одной стороны, первый способ будет честнее для набора очков, с другой -- его будет сложнее дизайнить, потому что игроки будут ловить рыбу с разной скоростью и игровые события в виде котов могут наложиться слишком больно для игрока. Надо подумать
Камера как в RTS:
Камера не должна выходить за границы игрового поля.
У камеры должны быть параметры:
Нужно нарисовать руку. Рука это аватар игрока.
Игрок может взаимодействовать с интерфейсом -- когда он наводится на кнопку, он как бы указывает на неё пальцем. И если нажать на ЛКМ, палец как бы нажмёт на кнопку (мб можно просто чуть повернуть руку).
Также нужна подготовка к щелбану, собственно щелбан и держание объекта (наша рука будет держать удочку и рыбу).
Ориентироваться на Рыбный Дозор.
Разрешение: 256x256.
Drag-n-drop рыбы. Взятая рыба переходит в соответствующее состояние.
Взять -- нажать ПКМ (ЛКМ не должен быть нажат). Отпустить -- отжать ПКМ или нажать на ЛКМ.
ЛКМ это удар, более приоритетное действие.
Возможно, управление стоит поменять. Но пока придерживаемся такого плана.
Если рыбу отпустить над обстаклом, она должна упасть на навмеш (Unity почему-то делает это автоматически).
4 вида рыбы разного тира.
Рыба должна быть либо вымышленная, либо озерная. Для вдохновения: https://stardewvalleywiki.com/Fish
Состояния:
Анимации:
Также у рыбы должна быть иконка маленького размера (сжатый основной рисунок).
Индикатор силы удара это вытянутый по горизонтали прямоугольник с градиентной текстурой (салатовый -> жёлтый -> красный). Шкала отражает силу удара в соответствии с #10.
Эта шкала рисуется поверх красивой текстуры.
Шкала перемещается относительно курсора мыши (всегда рядом с ним, чуть ниже него).
Шкала и спрайт шкалы появляются только когда накапливается сила удара.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.