TheodorTalion

TheodorTalion

пикабушник
поставил 401 плюс и 68 минусов
отредактировал 0 постов
проголосовал за 2 редактирования
18К рейтинг 21 подписчик 5340 комментариев 7 постов 0 в "горячем"
61

Валянный Пикачу

Сделал свою первую игрушку из шерсти. В общем, вышло довольно криворуко, но, думаю, стоит поделится с сообществом.

Валянный Пикачу Рукоделие без процесса, Сухое валяние, Пикачу, Покемоны, Длиннопост
Валянный Пикачу Рукоделие без процесса, Сухое валяние, Пикачу, Покемоны, Длиннопост
Валянный Пикачу Рукоделие без процесса, Сухое валяние, Пикачу, Покемоны, Длиннопост
Валянный Пикачу Рукоделие без процесса, Сухое валяние, Пикачу, Покемоны, Длиннопост

Если смотреть на него сверху, то он явно недоволен :D

Валянный Пикачу Рукоделие без процесса, Сухое валяние, Пикачу, Покемоны, Длиннопост
Валянный Пикачу Рукоделие без процесса, Сухое валяние, Пикачу, Покемоны, Длиннопост
Валянный Пикачу Рукоделие без процесса, Сухое валяние, Пикачу, Покемоны, Длиннопост

И несколько забавных фото до набивания глаз и удаление лишних волосков:

Валянный Пикачу Рукоделие без процесса, Сухое валяние, Пикачу, Покемоны, Длиннопост
Валянный Пикачу Рукоделие без процесса, Сухое валяние, Пикачу, Покемоны, Длиннопост
Показать полностью 8
16

Кодовый парусный корабль #2

Всем привет, мой предыдущий по этой теме не был оценен сообществом, потому что он в нем даже не появился. Чтобы понять о чем будет идти речь в этом посте рекомендую сначала ознакомиться с первым: http://pikabu.ru/story/kodovyiy_parusnyiy_korabl_5082490


Сразу ссылка в гит с самыми актуальными файлами для тех, кому не интересны пояснения: https://gitlab.com/open_sourse/pirate (надеюсь, ссылка будет работать)

Итак, в этой части мы объявим несколько простых и понятных методов и научим наш корабль передвигаться и стрелять. Итак, начнем с рассмотрения дополненного класса пушки, который был создан в предыдущем посте:

Кодовый парусный корабль #2 Код, Программирование, Unity, Гифка, Длиннопост

Первое: мы добавили булевую переменную charged, что в переводе означает "заряжено". Тут все просто, если пушка заряжена, то мы можем стрелять, а если нет - нет. Также можно увидеть пример конструкторов, которые я забыл добавить в предыдущем посте. Помимо этого были добавлены некоторые новые переменные в класс Ship, но их можно найти в гит и посмотреть.

Рассмотрим метод Fire, который возвращает класс Bullet (пуля, ядро - рассмотрим ниже). Опишем его простыми словами: если пушка не заряжена, то не возвращать ничего, а если пушка заряжена, то зарядить её и отдать экземпляр класса Bullet, передав в него урон пушки.

Кодовый парусный корабль #2 Код, Программирование, Unity, Гифка, Длиннопост

Вот класс нашего ядра. Тут есть поле урона и скорости (скорость полета пока статична). Ну и конструктор. Ничего интересного, в целом.

Итак, перейдем к нашему основному классу, на который мы потратим большинство содержания поста. К слову, класс называется Ship, однако, как вы уже могли заметить ранее, такой класс уже есть, но это совершенно разные классы, ибо путь к ним выглядит так:
1) App.Items.Ship.Ship
2) UniApp.Items.Ship.Ship

Ниже мы рассмотрим второй вариант (тут сразу добавлен вид скрипта в инспекторе):

Кодовый парусный корабль #2 Код, Программирование, Unity, Гифка, Длиннопост
Кодовый парусный корабль #2 Код, Программирование, Unity, Гифка, Длиннопост

Первое что мы видим, что данный класс имеет в себе поле App.Items.Ship.Ship, т.е. данный корабль должен принимать в себя общий класс корабля.


Дальше мы видим два списка с векторами. По названию можно понять что это позиции пушек. Они нужны для того, чтобы наши ядра вылетали с относительно реальных точек. Если бы корабль был в 3д, то вместо этих позиций находились реальные модели, хотя мы и сейчас могли добавить реальные модели, но в виде рисунков, ноооо...их нет. Почему? Поймете позже, когда увидите наш облавок.


Дальше идут листы с пулями - для чего они нужны увидите позже. Также есть экземпляр пули из которого будут скопированы остальные пули (в инспекторе просто добавлено в это поле префаб пули). И булевая переменная moving, т.е. - движение. Также увидите позже для чего он нужен.


(ВНИМАНИЕ, это абзац, как и все сущности в нем созданы для отладки и потому будут удалены) Итак, первое что мы делаем при старте игры собираем наш корабль из его составных частей. В предыдущем посте, наверное, была написана суть этого действия, но это не точно.


Также мы добавляем 3 пушки на правую сторону корабля и 5 пушек на левую (для показательности).

Итак, перейдем к основному, что мы должны рассмотреть в данном после - методы.

Кодовый парусный корабль #2 Код, Программирование, Unity, Гифка, Длиннопост

Первый метод - Fire. Делает понятную функцию, открывает огонь. К слову, сейчас я назначил клавиши для отладки какие-нибудь, однако позже это будет переработано так, чтобы совершенно не касаться этих методов, если мы захотим изменить управление.

Итак, метод разделен на две части: одна срабатывает если нажата кнопка Е, вторая - если Q. Почему так? Один вариант стреляет с левой...мачты...или как это вообще называется? С левой стороны, короче. А второй с правой, потому что пушки у корабля с разных сторон.

Если нажали E, то для каждого элемента листа с правыми пушками, объявленному выше, мы включаем функцию FirePreprocess. FirePreprocess делает следующее: для пушки запускаем метод Fire (App.Items.Ship.Cannon) и если метод возвращает null (а как мы помним, он возвращает null только когда пушка не заряжена), то ничего не делаем, а если возвращает что-то другое (App.Items.Ship.Bullet), то добавляем его в лист ядер, которые мы принимаем из аргументов функции.

Если переменная в методе начинается с _ (нижнего подчеркивание), то это значит, что данная переменная получается из аргументов функции.


Ну что же идем дальше, надеюсь, уже не забыли о чем мы говорили выше, ибо мне пришлось перечитывать, чтобы продолжить рассказ. Итак, когда мы для каждой пушки запустили метод FIrePreprocess, то дальше запускается метод FireProcess, которые берет нужный список ядер и просто создает новое ядро из префаба, объявленного в полях класса и рассматриваемого выше. Рассмотрим метод по строкам, ибо некоторые действия могут быть непонятны:
57. Создаем из префаба ядро, задав в качестве стартовой позиции позицию пушки, которую мы берем из листа позиций пушек.

58. Задаем новому ядру родительский объект, который является нашим кораблем. (это делается для того, чтобы ядро перешло в локальную систему координат нашего корабля).
59. Получаем компонент Bullet у нового объекта (к слову, это не тот Bullet, который был описан выше. Код этого Bullet будет ниже) и устанавливаем ему направление, которое мы принимаем из аргумента функции (там вправо или влево, в зависимости от того из каких пушек мы стреляем).

60. передаем класс App.Items.Ship.Bullet в UniApp.Items.Ship.Bullet.

61. И теперь самое интересное: мы убираем родителя у нового объекта. Логичный вопрос: а на кой черт мы его до этого назначали, а теперь убираем при чем в том же методе? Суть в том, чтобы сначала перевести объект в локальные координаты родителя и назначить ему вектор движения в зависимости от текущего местоположения корабля, а потом убрать привязку к координатам, чтобы движение корабля не влияло на местоположение ядра и, в целом, стало независимо ни от кого.
64. Очищаем лист, ибо мы уже создали все нужные объекты из него.

Фух, жуть, казалось такие простые методы, но объяснить их не так-то и просто, как кажется.
Ах да, обещанный скрин класса UniApp.Items.Ship.Bullet:

Кодовый парусный корабль #2 Код, Программирование, Unity, Гифка, Длиннопост

Тут есть два поля, которые мы обсудили выше и в функции Update(которая вызывается каждый кадр). Если пуля не назначена в классе, то мы ничего не делаем, а если назначена, то двигаем объект. Зачем нужна проверка на null Bullet-а? Все дело в том, что если класс наследуется от MonoBehaviur, то мы не можем создавать его экземпляры с помощью ключевого слова null, поэтому мы не можем создавать конструктор класса, чтобы гарантировать то, что данное поле будет назначено точно при создании.

Итак, к самому методу. Как вы можете видеть, мы берем направление (только X координату, ибо нам нужно перемещать объект только по X. Там в целом, есть еще свои причины почему сделано так, но не буду распыляться, ибо пост довольно большой выходит. Если интересно отвечу в комментах) умножаем его на скорость и дельта переменную времени, чтобы все было плавно.

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


Итак, вот как выглядит наша стрельба (этот черный кусок обгорелой деревяшки и есть наш корабль, извините, но рисовать не умею и знакомых, которым было бы интересно что-то рисовать для меня, нет):

Кодовый парусный корабль #2 Код, Программирование, Unity, Гифка, Длиннопост
Кодовый парусный корабль #2 Код, Программирование, Unity, Гифка, Длиннопост

К слову, я похоже неправильные пушки назначил, потому что снаряды вылетают с неправильной стороны, но это легко поправить.

Рассмотрим методы движения:

Кодовый парусный корабль #2 Код, Программирование, Unity, Гифка, Длиннопост

Первый метод Move двигает наш корабль ровно прямо на максимальной скорости (позже будет добавлен разгон) и изменяем переменную moving на true. Это сделано для того, чтобы в дальнейшем можно было поворачивать корабль только когда мы двигаемся...ну, мне кажется именно так ходят корабля, т.е. не могут вращаться на месте(если корабль не весловой))


Второй метод Rotation: суть первой строки только что описали, дальше если нажата A, то вращаем корабль по своей оси в одну сторону, а если D, то в другую. И в конце переключаем moving в false. Таким образом у нас в любом случае moving не останется true, ибо данные методы в Update стоят так:

Кодовый парусный корабль #2 Код, Программирование, Unity, Гифка, Длиннопост

Тут Fire где угодно можно поставить, а вот Move и Rotation только в таком порядке, по описанным выше причинам.


Вот, к слову, как выглядит наше передвижение:

Кодовый парусный корабль #2 Код, Программирование, Unity, Гифка, Длиннопост

Ну на этом наши полномочия все. В следующем посте (если этот не соберет гору минусов), мы добавим:

1) Ограничение количества пушек на одной стороне корабля

2) Вылет снарядов с разной скоростью

3) Разгон снарядов при полете

4) Разгон корабля при движении

Ну и может что-то еще

Показать полностью 9
-7

Кодовый парусный корабль

Всем привет, решил добавить в это сообщество то, что здесь так редко бывает, а именно - код. Хотя, любому разработчику понятно, что то обилие кода, которое есть в любом хоть сколько-нибудь завершенном проекте объяснять (да и просто разместить) потянет на мега-супер-длинно-предлиннопост, поэтому рассмотрим небольшой код, который, в целом, будет интересен только начинающим разработчикам (коих тут, думаю, достаточное количество).

Не так давно я начал разрабатывать свою небольшую игру, где игрок выступает пиратским капитаном, а что делает пиратского капитана пиратским капитаном? Свой собственный корабль! Сейчас мы, вместе с вами, создадим наш собственный шаблон для корабля нашего абстрактного пирата.

Начнем с первого класса для нашего корабля, определяющего общие параметры для каждой составной части:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Данный класс включает в себя - цену предмета, его жизненные силы, текущий и максимальный износ. Для написания следующих классов мне потребовались специальные знания, а именно - какие же составные части есть в парусном корабле? С этим вопросом я вышел в интернет:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Как мы можем заметить, основных частей у корабля всего 4 (запоминайте цифры): корпус, рангоут, такелаж и паруса. Также мы можем заметить, что скриншот из википедии единственный содержит красочные картинки во всем посте. Что это значит? Ничего. Начнем с описания такелажа:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Первое, что можно заметить, все составные части наследуются от Item, описанного выше. Значит, они содержат в себе все поля из класса Item, а сам такелаж содержит в себе скорость поворота. Итак, следующий предмет - рангоут:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Рангоут же включает в себя скорость разгона и поворота (позже рассмотрим все параметры более подробно). Следующий класс - паруса:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Они влияют на максимальную скорость корабля и разгон. Следующий класс - тело:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Тело - это основной элемент корабля (к слову, до прочтения вики я знал только то, что у корабля есть тело и паруса). Пропустим рассмотрения класса, ибо самый важный и интересный класс впереди. Дамы и господа, представляю вашему вниманию первую часть класса корабля:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Как вы могли заметить тут расположены все экземпляры классов, которые были предоставлены вашему вниманию выше. Помимо этого, корабль можно создать только имея все его составные части - об этом говорит единственный конструктор класса(от 13-ой до 19-ой строки), принимающий в себя 4-ре аргумента. 4-ре аргумента у конструктора класса и 4 составные части корабля на Википедии - совпадение? Не думаю.
(к слову, я забыл создать конструкторы для каждой составной части, но там конструкторы будут выглядеть по типу: задайте все поля, чтобы создать - если нужно кому-то, то скину пример). Итак, перейдем ко второй части корабля, которая, по моему мнению, будет самой любопытной для начинающих:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Это наши поля класса Ship. Первым полем является имя корабля (я думал его добавить в конструктор, но подумал что имя, все же, лучше задавать отдельно, ведь корабль сначала создают, а потом называют, наверное...может да, а может и нет, но к чему это я? Неважно.)
Как можно увидеть, что все поля возвращают значения, полученные из составных частей корабля, таким образом, напрямую влиять на эти значения нельзя.

Следующие три поля отвечают за способность нашего корабля к передвижению. Например, возьмем поле maxSpeed. Максимальная скорость складывается из - максимальной, которую может развить корпус и максимальной скорости, которую могут развить паруса деленную на количество переменных (т.е. на 2). Правильно это или нет с точки зрения реальности неизвестно, но ведь игры существуют в допущении, поэтому не суть. Например, скорость вращения состоит из 3-х аргументов и поэтому общий результат делиться на 3-и. Думаю, с этим понятно. Перейдем к следующей тройке полей:

Количество хп - это, думаю, понятно. Можно было бы его привести к процентам, но я не стал (пример привода к процентам находится ниже). Также у нас есть два типа защиты. Одна - отнимает количество урона от каждой атаки по кораблю, а вторая - отнимается вместо хп, пока не равна нулю.

Пропустим самое скучное и перейдем к износу. Тут я привел износ к процентам и для этого мне тоже пришлой выйти в интернет (что демонстрирует насколько высокий уровень знания математики нужен для программирования). Мы берем количество процентов (100), умножаем его на текущее состояние всех элементов, деленное на их максимальное состояние.


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

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

На предыдущем скриншоте можно увидеть, что общий урон корабля мы получаем пройдя по всем пушкам, которые есть у нас на борту и собрав с них информацию об их уроне, а тут, собственно, и находится урон. К тому же, я забыл добавить к общей стоимости корабля общую стоимость всех пушек, но принцип, думаю, понятен.

Напоследок привожу общий код класса Ship:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Надеюсь, кому-то этот пост будет интересен и полезен, возможно, в будущем, я напишу следующие части кодового парусного корабля, добавив в него методы получения урона, стрельбы, передвижения и прочего-прочего. Всем спасибо за внимание.

Показать полностью 7
-15

Заложники одной темы : предложение по улучшению сайта

Привет, @admin, предлагаю ввести сайту личные теги для пользователей, чтобы убрать привязанность одного аккаунта к одной теме.

Пример:
Человек создал серию постов, которые освещают какое-то общественное событие, к нему набились десятки тысяч подписчиков, но тема себя исчерпала в связи с завершенностью. После этого, через какое-то время, человек постит какие-то другие посты, связанные с своим хобби (а может у человека несколько хобби) и 99% подписчиков удивлены - откуда у меня в ленте не интересующий меня контент? Подписчикам нужно отписаться, постер видит что люди отписываются, ставят ему минусы, потому что контент не интересен и тд.

Решение:
Ввести спец. топики (либо не индексируемые теги) для каждого пользователя.
Например, постишь с тегом "воры в музее" (предварительно выбрав это как личный тег) и люди подписываются на твои посты с этим тегом. (*1 сноска с пояснением)
Потом постишь с тегом "как я ворую в музее" и люди, подписавшиеся на первый тег не видят эти посты у себя в ленте, т.к. она для них не актуальна.

Пояснение:
*1: Подписываемся имеется ввиду не на тег, а на пользователя, перейдя к нему в профиль и после нажатия кнопки "подписаться" выбрать нужный личный тег пользователя под которым он уже запостил какие-то посты (либо дать возможность создавать теги заранее, даже пока постов не было).

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

К тому же, можно ввести возможность объединять теги, чтобы сообщить сразу всем подписчикам какую-то информацию. Например, умер человек, серьезно заболел или еще что-то.

Как разрулить ситуацию с текущими постами без таких тегов и подписками:
Пусть изначально у каждого человека будет топик "Общий" (название такого можно не показывать) и пусть считается, что все люди, подписавшиеся на человека подписались на этот топик (дать ему просто id = 0) и сам постер может изменить название топика под id = 0, т.к. в настоящее время многие все же стараются постить одинаковые темы, а для новых тем создают новые аккаунты.


Возможно, только у меня возникала ситуация, когда мне приходилось отписываться от человека, когда я однажды получил не актуальный для меня контент, хотя этот человек в дальнейшем постил актуальный для меня контент.

-22

Кодовый парусный корабль #4

Думаю, это завершающий пост про создание корабля, ибо в голову не лезет что еще можно добавить к кораблю. На этом буду считать модуль корабля практически полностью завершенным (будут, конечно, добавления в виде изменения спрайтов кораблей, некоторые мелкие правки, но они несущественны). Также я немного расскажу о планах разработки. Информация будет в конце поста.

Предыдущий пост: http://pikabu.ru/story/kodovyiy_parusnyiy_korabl_3_5094712
Гит для тех, кому лень читать: https://gitlab.com/open_sourse/pirate

Начнем с списка изменений, которые я огласил в предыдущем посту. Это изменение скорость вращения в зависимости от скорости движения. В целом, тут все понятно, ибо это просто обычная формула, но раз я огласил это изменение ранее, то пусть тут будет.

Кодовый парусный корабль #4 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

Рассмотрим дополненный спрайт пули. Теперь он умеет взаимодействовать с объектам. Особенность в том, что данный способ взаимодействия отличается от тех способов, которые обычно приводятся в уроках. Зачастую в уроках делают проверку на тэг объекта, либо имя и тд.(но это жесть, ибо если будут добавлять новые объекты, то нужно будет прописывать взаимодействие), а тут мы проверяем есть ли у объекта компонент UniApp.General.Effects - это общий компонент для всех объектов, которые в принципе могут взаимодействовать с другими объектами. Т.е. у корабля есть такой компонент, у препятствия...ну, короче, у всех типов объектов на карте с которым можно будет взаимодействовать.

Кодовый парусный корабль #4 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

Вот сам вид эффекта. Тут есть делегат и экземпляр делегата. Сейчас он принимает аргумент пули, однако, в дальнейшем он будет принимать какой-то общий класс для всех классов, которые могут нанести урон.

Кодовый парусный корабль #4 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

А вот этот класс уже относиться непосредственно только к кораблю. Первым делом тут экземпляр делегата из класса Effects, описанный выше, привязывается к методу текущего класса Damage(), который в свою очередь просто принимает урон и рассчитывает не умер ли корабль.

Для дальнейшего рассмотрения обсудим абстрактные размышления о том как умирает корабль, ему наноситься урон и тд.
У каждого объекта класса есть HP, Wearout, armorValue и ArmorCount (вот снизу переработанный класс item, чтобы было более понятно).

Кодовый парусный корабль #4 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

Когда кораблю наносят урон, то отдельные части корабля получают урон HP и Wearout (это износ). Зачастую Wearout у корабля гораздо больше, чем HP, потому что HP можно восстановить до посещение порта, а Wearout - нет. И когда у корабля заканчивается хп в бою, то по Wearout отдельной части корабля наноситься двойной урон.

Однако, если у всех частей хп полностью заканчивается хп (а износ еще остается), то корабль считается уничтоженным. Также, если у корабля осталось хп, но кончилось Wearout, то он тоже считается уничтоженным (хотя тут это не видно, потому что я забыл это добавить).


Таким образом весь класс ShipEffect занимается принятием в себя урона, первую часть можно увидеть до обсуждения, а вторая вот:

Кодовый парусный корабль #4 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

Также есть особенности отдельных элементов, например, если у парусов износ равен нулю, то поднять их больше нельзя (т.е. корабль перестанет плавать, как плавал ранее, но его можно будет двигать особенностями персонажа, о них чуть позже расскажу, хотя они и не имеют прямого отношения к кораблю). Вот класс парусов с проверкой на слом:

Кодовый парусный корабль #4 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

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


Так вот, расскажу немного об основной задумке, которую я во многом реализую за следующие 2 недели:
т.е. игра-то по сути не про корабли будет, потому что игры про баталии кораблей - это унылость, по моему мнению. Корабли - это просто основное средство передвижения в игре и игровой процесс в принципе не будет поощрять уничтожения кораблей противника, потому что гораздо выгоднее взять корабль на абордаж, проведя сражение на корабле (это отдельный модуль), чтобы набрать побольше лута и захватить рабов. Однако, будут отдельные корабли, которые особо не приносят лута (сопровождение жирных кораблей) - их как раз можно расстреливать без особых потерь.


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

Кодовый парусный корабль #4 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

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

Скорее всего, я буду сообщать о успехах разработки примерно раз в 4-7 дней, но уже без кода, ибо код, думаю, не особо интересен людям (потому что ничего гениального не делает).


Всем спасибо за внимание!

Показать полностью 4
-23

Кодовый парусный корабль #3

Первым делом хочу выразить благодарность всем пользователям, которые давали мне годные советы, что помогло улучшить...эмм...архитектуру этого модуля, его внутренние связи и тд.

Предыдущий пост: http://pikabu.ru/story/kodovyiy_parusnyiy_korabl_2_5089935
Если нет желания читать, самые актуальные файлы тут: https://gitlab.com/open_sourse/pirate

Начну с краткого пояснения:
1) Я решил отойти от модели проектирования, когда сначала писался класс на чистом языке и тд. (совет @DDeni). Изначально мне казалось что более удобно хранить информацию в виде чистых классов, потому что так просто организовать магазин, но потом подумал еще раз и понял, что мне так или иначе нужно будет хранить спрайты, иконки и прочее для организации магазина.

2) Я убрал лишние методы Instantiate() в пользу использования пула объектов (совет @HartMagic), однако, сам пул объектов не добавляю в список файлов, ибо он достаточно топорный (один класс, 2 метода, 2 переменные на все возможные объекты) и не имеет прямого отношения к теме постов (конечно, без него не получиться запустить проект просто скопировав его, но, думаю, этим никто не занимается, но при желание можно заменить метод Pop на Instantiate(), а Push на Destroy()). Сначала я думал над тем, чтобы купить уже готовый пул, но посмотрев количество файлов и скриптов в продающихся пакетах передумал.

3) Переделана модель стрельбы и пушек (совет @fon.prima). Данный раздел также затрагивает и пункт 1.


Ладно, предисловие закончилось. Начнем с рассмотрения основного класса корабля:

Кодовый парусный корабль #3 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

Изменений визуально немного. Добавлены два скрипта - shipControll, содержащий методы управления кораблем и ShipInfo, содержащий просто данные о корабле, которые ранее были вынесены в класс App.Items.Ship.Ship, ныне канувший в лета. Также лист для пуль теперь один, причины изменения в подходе к стрельбе - о ней позже.

Сразу обращу ваше внимание: все объекты, которые могут умереть (в принципе), включают в себя атрибут, который добавляет класс Shape (элемент для объектного пула). Он нужен для возврата объекта в пул и выглядит так:

Кодовый парусный корабль #3 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

Итак, рассмотрим класс управления кораблем:

Кодовый парусный корабль #3 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

Метод Move: управляет кораблем. По кнопкам W и S паруса поднимаются и опускаются (если подняты, то набор скорости идет, если нет - то убывание скорости). Также я добавил проверку на то, что если скорость больше 10 (цифра от балды), то только тогда корабль может делать повороты, ибо по логике корабль не умеет поворачивать с минимальной скоростью. Таким образом, я убрал зависимость порядка исполнения Move и Rotation, которая была в предыдущем посте.

В самом низу метода тройной тернарный оператор ограничивает максимальную и минимальную скорость корабля.

Метод Fire: тут мы по кнопке для каждой пушке в одном из листов запускаем метод Fire. Более подробно будет рассмотрено в классе Cannon.

Метод Rotation: без изменений (убрал только изменения булевой переменной moving, но об этом сказано выше).

Вот так теперь выглядит наш корабль с пушками (белые зефирки - это пушки).

Кодовый парусный корабль #3 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

А вот так выглядит движение:

Кодовый парусный корабль #3 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

Итак, перейдем к классу пушки, который, вероятно, самый занятный из всего поста:

Кодовый парусный корабль #3 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

Это первая часть класса, весь не влез.

Переменная power отвечает за силу пушки и начальный импульс снаряда.

Метод Loaded: ранее этот метод был в похожем классе, но другом. Изменения: метод стал возвращать bool ииии...все! В остальном все так же. 26 строка - берем снаряд из пула, так что не смущайтесь её внешнего вида.

Метод Fire: если пушка не заряжена, то ничего не делает. Иначе, запускает метод FireProcess и корутину перезарядки. Вот насчет правильности выбора корутины я не уверен, ибо, возможно, есть менее затратные по ресурсам методы, но в голову ничего не пришло подходящего. Если есть идея - сообщайте в комментарии, буду благодарен.

Метод FireProcess: задает полученному снаряду начальную точку, наполняет полями и дает импульс для полета. Также тут мы записываем в переменную lastFire время выстрела (нужно для перезарядки с помощью следующего метода). По поводу пули и её импульса поговорим чуть позже.

Кодовый парусный корабль #3 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

Метод Recharging: словами делает следующее: если текущее время больше времени последнего выстрела и скорость огня, то перезарядить. К слову, по профайлеру, вызов этой корутины занимает относительно много ресурсов всего 1 раз - в момент вызова.

Рассмотрим результат стрельбы из разнообразных пушек:

Кодовый парусный корабль #3 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

Вот так мы стреляем из одинаковых пушек (снаряды летят вместе, может стоит сделать небольшой заброс, чтобы снаряды вылетали с задержкой для красоты, но это скорее всего будет решено небольшим рандомным изменением силы пушек при их установке на корабль)

Кодовый парусный корабль #3 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

А вот так мы стреляем из пушек с разной силой (тут находятся позиции пуль за равное поле после выстрела). Цифрами показана сила пушки (чем меньше сила, тем более медленно летит снаряд и в целом преодолевает меньшую дистанцию)

Кодовый парусный корабль #3 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

А вот так стрельба выглядит в динамике.

Итак, перейдем к классу снаряда:

Кодовый парусный корабль #3 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

Класс снаряда: Мы сюда внесли понятие импульса, времени "пробуждения", что по сути время появления и времени жизни.

На каждый кадр пуля пересчитывает свою позицию. Отмечу, что был изменен способ изменения позиции с transform.Translate(), потому что этот метод тут не походит, так как он может изменять позицию объекта по Y, что для нашего 2д пространства недопустимо.

Также тут мы добавляем к текущей скорости импульс, умноженный на дельту времени, что является способом ускорения снаряда.

Остаток класса проверяет не закончилось ли время жизни пули и если закончилось, то возвращает её в пул.


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

Кодовый парусный корабль #3 Код, Программирование, Unity, Gamedev, Разработка игр, Гифка, Длиннопост

На этом все. В следующем посту мы добавим такие механики:
1) получение урона кораблем;
2) нанесение урона снарядами;
3) возможность уничтожения корабля;

4) зависимость скорости поворота корабля от текущей скорости движенияю
(в целом, я не могу полноценно сейчас придумать что еще добавить в след. пост, ибо этих позиций может быть мало.)

Всем спасибо за внимание!

Показать полностью 11
-32

Отчет о разработке #1

Всем привет! Прошла неделя и я, как и обещал, покажу результат моей работы за это время. К слову, не знаю, как правильно назвать пост, потому что названия игры нет, да и игры нет, но пусть будет как есть.

Объявляю конкурс на самое лучше название для подобных постов. Просто пишите в комментарии ваши предложения. Лучшее название будет красоваться в дальнейших постах, а победитель получит великолепное, новенькое ничего.

В целом, за всю неделю я сделал следующее:

-------------------------------------------------------1. Персонаж--------------------------------------------------------
Набросал общий вид персонажа, включающий в себя все характеристики, которых всего 13 (это только общедоступные, т.е. те, которые будет видеть игрок); Вот список характеристик и то, на что они влияют:
- сила - урон от ударов, дальность физических толчков, незначительно влияет на защиту персонажа;

- ловкость - шанс критического урона, восстановление выносливости, незначительно влияет на защиту;

- виталити - кол-во хп;

- выносливость - кол-во выносливость, которая тратиться на использование физ. умений;

- скорость - очередность хода в бою (мб будет сильно влиять на очередность, типа быстрый персонаж успеет два раза нанести атаку, а медленный всего один раз);

- маг. сила - урон от заклинаний, дальность маг. толчков\притяжений, незначительно влияет на маг. защиту;

- маг. выносливость - кол-во мп;

- кол-во ходов - количество очков, которое может быть потрачено на действия в одном ходу;

- красноречие - для не боевых событий и влияет на стоимость предметов при торговле;

- физ-армор (временный), физ-армор (постоянный) ну и такие же маг арморы. Временный - значит что армор заменяет хп, а постоянный, что от каждой атаки отнимает значение.

Изначально у каждого персонажа (не собранного) есть почти во всех характеристиках по 10 очков, но для того, чтобы персонаж считался завершенным ему нужно добавить расу и генеалогию (происхождение). Это одни из ключевых данных, которые могут добавить редкие характеристики (типа армора, который нельзя прокачивать просто так, а только шмотом, либо стоимость прокачки отдельных навыков, например, у магических рас стоимость прокачки маг. навыков снижена, а физ. навыков увеличена).

------------------------------------------------------2. Способности-----------------------------------------------------

Добавил несколько способностей разных типов, чтобы представлять какие у меня будут типы ударов, движений и тд. Я лучше просто опишу способности, которые я реализовал сейчас. Думаю, на опыте поймете что к чему.
-----------Общие:
- Движение вперед-назад;

-----------Физические:

- Атака - простой удар перед собой;

- Разбег (Charge) - быстрое передвижение на n кол-во клеток и, если на пути есть враг, то атака его;

- Физ. толчок - если перед вами стоит враг, то оттолкнуть его на n клеток назад;

- Стан - не дает произвести следующее действие противнику (только одно);

-----------Магические:
- Огненный шар - простое направленное заклинание;

- Маг. толчок - толчок врага на отдалении;

- Вызов преграды - создание преграды перед персонажем, через которую нельзя пройти;


Я просто сделал по одному примерному типу действий, которые потом будут несколько мутировать, изменяя свои характеристики и тд., но в целом будут выполнять такие же функции.


К слову, с магией у меня возникали концептуальные вопросы. Изначально я думал колдовать магию по 3-м линиям и двигать её не мгновенно (как сейчас), а чтобы она летела с определенной скоростью (n кол-во клеток каждое действие), но про линии передумал, ибо это лишнее усложнение, скорее всего, а про определенную скорость не уверен. Как вы считаете, стоит двигать заклинания мгновенно, как сейчас или лучше с определенной скоростью на ход, как описано выше? (также, скорее всего, будет добавлена дальность на которой заклы летят)

-----------------------------------------------------------3. Битва---------------------------------------------------------

Изначально я слабо представлял как вообще будет выглядеть битва, но вышло так, что...эм...жанр сражения получился...эм...пошаговый файтинг штолэ? (Там дальше видос будет примером).

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

Вот, в общем, видос примером (качество донное, ибо хз как его правильно записывать, но в целом должно быть все понятно) (скорость анимации не отработана и тд., но а что еще можно от текущего этапа ожидать) :

Ну, в целом, это все что я сделал за неделю. Вроде бы не так и много на словах, но на деле добрую 1000 строк я написал (хотя проблема была прежде всего в том, что я не представлял себе что я вообще хочу видеть). Однако, после рефакторинга останется строк 300-500, скорее всего.

Следующий пост будет через 4-7 дней и будут сделаны следующие действия:
1-2. Рефакторинг способностей и битвы до финального (пока что) состояния;

3. Создание меню наград (и мб еще что-то по мелочи);
4-5. Добавление модуля предметов персонажей, создание первых экземпляров предметов;

6-7. Модуль магазина и торговли.

Пишу это прежде всего для себя, потому что вы, читающие этот пост, мои невольные проверяющие и я стараюсь уложиться в срок, потому что верю, что вы ждете моего отчета! Работа в команде всегда быстрее идет, потому что есть некоторая степень ответственности каждого участника команды перед другими участниками, а в данном случае, так как я работаю один, то вы являетесь заменой команды.

Всем спасибо за внимание!

Показать полностью 1

О домах из клееного бруса: честно, без прикрас, из личного опыта

О домах из клееного бруса: честно, без прикрас, из личного опыта Длиннопост

О клееном брусе для строительства домов ходят легенды. Кто-то считает, что дом из такого дерева «не дышит», кто-то — что прочнее материала не сыскать. Ниже история записана со слов Михаила, который построил себе дом из клееного бруса через компанию АПС ДСК. Он делится инсайтами про стройку и дает советы, как не пролететь на дорогом, но любимом многими стеновом материале.


Из чего делать стены для жилья — это практически религия. Кого-то здесь убеждать и спорить — обогревать космос. Я в строительном бизнесе уже 14 лет. И три года назад, изучив все про клееный брус, заказал себе дом именно из него. Вот вам краткая анатомия этого материала и мой опыт работы с ним, а дальше решайте сами, надо оно вам или нет.

Забудьте про «сэкономить»


Хороший брус действительно стоит денег. С самого начала примите это. Цены начинаются от 25 000 рублей за кубометр. У «Слонов» (АПС ДСК) брус мне обошелся в 28 000 рублей. Еще и 4 месяца пришлось ждать в очереди, чтобы взять именно с их завода.


Квадратный метр двухэтажного дома в Подмосковье (под ключ, с сантехникой, заходи – и живи), если заказывать его в строительной конторе, обойдется в среднем в 45-60 000 рублей за квадратный метр. У меня вышло с отделкой ровно 50 000 рублей. Тепловой контур (фундамент, стены, крыша, окна) 27 500 р. за кв. м. Если вам где-то предлагают сильно дешевле — не ведитесь. Наверняка есть подводные камни.


Весь дом мне встал в 8 000 000 рублей. Это заезжай и живи.


Накопите деньги на предоплату. Сумма нужна немаленькая, потому что придется выкупить брус, который нарежут на весь ваш дом. Хранить его долго нельзя, надо сразу строить. Причем долго — это больше недели. Брус должен быть защищен от влаги и вредителей, но при этом к нему нельзя перекрывать доступ воздуха. В общем, сложно.

О домах из клееного бруса: честно, без прикрас, из личного опыта Длиннопост

Совет №1. Выберите подходящий проект или хотя бы фото из интернета с желаемым домом и отдайте его вместе с размерами на просчет в две-три компании. Сравните их предложения по простому чек-листу.


1. Тип фундамента, почему такой выбран. Какая отделка цоколя. Какой пол. Если он на лагах — какой они толщины и с каким шагом. Если тонкие и мало — пол будет как батут.

2. Сколько всего бруса. Если в разных конторах цифра разная, вопрос: а за счет чего сокращают или увеличивают количество высоты потолков, материала внутренних стен?

3. Утепление кровли. Какая пароизоляция и ветрозащита. На качестве пленки экономить нельзя. И упаси вас господь от неумелых строителей, которые мало того, что плохо ее проклеивают, так еще и кладут не той стороной.

4. Стеклопакеты — сколько камер, из чего рамка. У пластиковых меньше теплопроводность. Применяются ли скользящие крепления оконных и дверных коробок.

5. Шлифовка стен, тонировка, антисептик, огнезащита.

6. Инженерка. Первым делом — какое отопление.


Вот минимум позиций, по которым нужно сравнивать предложения строительных компаний. Посмотрите цены и параметры, погуглите нюансы и посоветуйтесь со знающими людьми, если есть возможность.

О домах из клееного бруса: честно, без прикрас, из личного опыта Длиннопост

Какие риски у работы с клееным брусом


Раньше пролететь с клееным брусом можно было легко. Человеку строили дом, внешне он был как пряник, а через год все расклеивалось и шло винтом. В последнее же время качество бруса выровнялось, хотя за Уралом брак еще встречается. Совсем уж плохой материал продают неадекватно дешево. Скупой платит дважды, а в случае с домом это большие деньги, ошибаться нельзя.


Качество клееного бруса по виду определить сложно. Цепочка производства у него длинная, на каждой стадии можно нахимичить. Могли на внутренние ламели пустить доску какую попало: трухлявую, с дефектом, даже ель под видом сосны. Могли доски взять слишком разной влажности или просто сырые. Чем сырее, тем сильнее ваш дом потрескается от усушки. Молчу уже про схему, когда грузят материал так, что сверху и по бокам брус, как себе бы брали, а внутри паллеты — самая что ни на есть труха.


Некоторые продают под видом добротных пород сущую ерунду. Ангарская и архангельская сосны ценятся в строительстве, потому что структура у них лучше. Деревья растут севернее, и дома из них прочнее получаются. Но ангарской сосны столько не рубили, сколько из нее строили. Часто суют что-нибудь поюжнее и пожиже, а цену ломят.


Совет №2. Берите клееный брус с предприятий, у которых есть история и репутация. Узнайте про производство — где, что, как, откуда лес, какой клей.
О домах из клееного бруса: честно, без прикрас, из личного опыта Длиннопост

О нюансах теплоизоляции


Поставщики вам расскажут, что теплозащита у дерева поперек волокон даже лучше, чем у газобетона. Но сруб есть сруб, он будет студить по углам. А если поведет геометрию — так и между брусьями. Но если брус хороший и все по технологии — будьте спокойны. Двухсотого (толщиной 200 мм) вам хватит, чтобы зимовать с комфортом.


Совет №3. Особенно тем, кто не в теме и хочет отдать все «на откуп профессионалам». Не хотите сюрпризов — придется вникнуть, хотя бы базово. Иначе или смета раздуется ближе к стройке, или вылезут ошибки — замучаетесь переделывать..

Со «Слонами» мне особо вникать в план стройки не пришлось. Менеджеры сразу расписали все плюсы и возможные риски, проконсультировали в нескольких смежных вопросах. Как по мне, это правильно.


Обязательно поинтересуйтесь, как обстоят дела с организацией стройплощадки: есть ли биотуалеты, бытовка и так далее. А то после новоселья еще несколько месяцев будете мусор разгребать.

О домах из клееного бруса: честно, без прикрас, из личного опыта Длиннопост

О сложностях с геометрией


Каким бы качественным ни был брус, это все же дерево. Оно сохнет, мокнет, сужается и расширяется. А значит «гуляет». Причем влажность меняется неравномерно. Внутри, на солнце и зимой — меньше, снаружи, в тени и летом — больше. Деформаций не избежать, вопрос лишь в качестве бруса и пряморукости тех, кто собирал коробку. В первую зиму, помолясь, начинайте топить. Сруб будет потрескивать, это нормально.


Венцы — конструкции из одного ряда брусьев, уложенных перпендикулярно друг другу — по всей высоте сруба пронизаны металлическими стержнями на 40 мм, по две на стену. Когда сруб собран, гайки на них протягивают специальными домкратами и приотпускают — чтобы дать небольшую свободу для колебаний. Соответственно, ничего не должно сковывать этих колебаний — ни оконные или дверные коробки, ни отсутствие специальных зазоров — даже лестницу рекомендуется крепить независимо или устанавливать ее уже на этапе финишной отделки. А иначе могут быть трещины в стенах — я видел такие с ладонь толщиной.


Тех, с кем я строил, на всякий случай перепроверил, съездил на их объекты, навел справки по клиентам, узнал, что к качеству сборки нареканий нет. Соберетесь строить — советую сделать то же самое.


Еще несколько важных моментов
1. На брусе могут появляться маленькие трещинки — это нормально. Все равно усадка будет 1-2%.
2. Зимой дом из бруса придется топить чаще, по сравнению с домом из того же утепленного газобетона.
3. Со временем наружный лак отобьется дождем и выгорит на солнце. Покрывать заново нужно будет через 6-8 лет.
О домах из клееного бруса: честно, без прикрас, из личного опыта Длиннопост

Какие плюсы у клееного бруса


Стройка дома из клееного бруса вам сейчас кажется той еще проблемой, но я объясню, почему все же выбрал его. Главное, понятно: дерево — это жизнь, в таком доме есть душа. Тут и спится, и дышится по-другому. Попробуйте как-нибудь, поживите — в каменный мешок обратно не захочется.


Главная фишка — дом собирается быстро, буквально за пару месяцев, как из лего. Заехал и живи. Плюсом экономия времени и денег на отделке. Мокрые процессы заканчиваются на стадии фундамента, никакой грязи на площадке. «Слоны» собрали мне коробку за месяц — все быстро, аккуратно. Дальше дело за малым оставалось.


Клееный брус — вариант не для всех, но кто подошел осознанно, не пожалеет. Главное — не берите лишь бы дешевле и не стройте с кем попало. Как учил меня один состоятельный дружище: можно завести собаку не такую породистую, взять отель звездой ниже, вместо ресторана сходить в столовку. Но когда строишь свое жилье, мелочиться нельзя — из кожи вылезь, но сделай нормально.


И последний совет. Контролируйте стройку на каждом этапе. Хоть у ребят и стояли веб-камеры на объекте, я старался приезжать на площадку минимум раз в неделю. Так спокойнее. Сами не шарите — приглашайте независимых спецов. Но помните, стройки совсем без проблем не бывает. Главное, как ваш застройщик на них реагирует и решает.
О домах из клееного бруса: честно, без прикрас, из личного опыта Длиннопост

Когда строили мой дом, не угадали с погодой. Свежая биозащита пошла потеками. Но технадзор подрядчика отработал, вовремя засекли проблему и все поправили. В остальном все прошло гладко. Я со своим опытом не лезть не мог, но ребята прислушивались. А если не согласны были, аргументировали, чем их решение лучше для проекта.


Дом закончили за 5 месяцев. Еще примерно столько же ушло на обустройство и отделку. За все время я ни разу не пожалел о решении строить из клееного бруса.

О домах из клееного бруса: честно, без прикрас, из личного опыта Длиннопост

Три причины строить дом через АПС ДСК


Во-первых, после того, как внес предоплату — смета не растет, даже если дорожают стройматериалы. Например, контракт заключили зимой, в смете «зимние» цены, а закупка начинается уже по «летним». Бетон может быть вдвое дороже, но клиента это не коснется.


Во-вторых, у компании свое производство клееного бруса и работают они уже 12 лет. Весь процесс от доски на входе до дома на выходе они контролируют сами. Используют финский клей Kiilto и постоянно у финнов учатся.


В-третьих, в течение всей стройки на объекте работает внутренний технадзор. В чек-листе у проверяющего 96 параметров, и все они отражаются на зарплате исполнителей. Плюс к этому — на стройплощадке порядок. Все строго по технике безопасности и оборудовано.

О домах из клееного бруса: честно, без прикрас, из личного опыта Длиннопост
Подробнее о строительстве деревянных домов из клееного бруса по доступным ценам читайте на сайте, а также в инстаграм-аккаунте главного «Слона». В копилке компании двухэтажные дома и жилье в стиле hi-tech или классическом стиле.
Показать полностью 8
Отличная работа, все прочитано!