Программирование в Unity на примере кота (часть 1: фигачим кота тапком)
Бывают в жизни моменты, когда в голову ударяет какая-то полная хрень, и ты просто не можешь ее не исполнить. Именно по этой причине я сейчас пишу этот пост. Не так давно начал изучать Юнити и C#. До этого немного фигачил на С++ в институте и писал скрипты в паре игр серии TES.
Заметил, что многие мои знакомые не понимают, как устроено программирование. И дело было даже не в незнании языка, а в осознании самой логики процессов. Вот для таких людей я и пишу этот пост. Постараюсь выдать совсем немного информации в максимально простой форме. (Но рад буду и бывалым программистам. Сам не могу считаться профессионалом, поэтому любым поправкам в комментариях буду рад).
Итак. Все, что будет дальше - это лично мое мнение, сложившееся после знакомства с C#, C++, и папирусом (скриптовый язык TES). Главное в программировании не сколько знание самого языка, сколько понимание, как это все устроено. С этого и начнем.
Самую основу основ в С# составляет так называемый класс. Представьте себе два кота.
Вот перед вами, вроде бы, две разные зверюги, каждая из которых никак не связана с другой. Однако их поведение очень похоже. Даже если вы возьмете тысячу котов (хана вашей мебели в таком случае), то вся эта тысяча будет иметь общие повадки.
В этом нам и помогает класс. Когда нам нужно создать тысячу котов, нам не придется описывать каждого кота по отдельности. Мы создадим класс кота, куда и зафигачим его поведение. (В частности реакцию на летящий в него тапок).
Допустим, что мы создали этот прекрасный мурчащий класс кота. Однако, пока что, мы не сказали коту, как он должен себя вести. За его поведение будут отвечать функции.
Функции - это такие куски поведения, которые срабатывают, когда происходит какое-то событие. Допустим мы заходим в комнату и видим там кота, который занимается нехорошими делами. Нам это не нравится и мы швыряем в кота тапком. Так вот "швыряние в кота тапком" можно засчитать за событие. И когда оно происходит, у кота включается функция "сдристнуть куда подальше".
На движке Unity это будет выглядеть примерно так:
=================================================
Void Зафигачивание_тапком ()
{
Сдристнуть_куда_подальше();
}
=================================================
Сегодня я не хочу рассказывать о синтаксисе. Просто уточню, что слово Void в Unity ставится перед определением каждой функции (ну или почти каждой. В этом я пока еще не разобрался до конца).
И вот такой кусок поведения, который я описал выше, мы вставляем в тот самый класс Кота, который создали в самом начале. Теперь вся наша тысяча котов автоматически получила возможность сдристнуть от тапка.
Но к сожалению все не так просто. Любой язык программирования создают люди, и каждое действие, которое может совершить объект, два и каждое событие, которое может произойти, они прописывают вручную.
Само собой, они стараются оптимизировать свой язык, сделав его более универсальным. Например, Выше я написал, что кот реагирует на событие "Зафигачивание_тапком". Однако в кота мы можем зафигачить не только тапком, но и кучей других замечательных тяжелых вещей. Внедрять в язык программирования каждую такую возможность - очень и очень долго. Гораздо проще объединить их в одно событие. Назовем его "зафигачивание_чем_либо".
Теперь кот у нас будет реагировать на зафигачивание по нему любым предметом. Однако в данном посте я рассказывать про зафигачивание именно тапком. Поэтому нам нужно подправить поведение кота.
В функции, которые мы описываем для нашего класса кота можно также добавлять так называемые переменные. Это такие замечательные штуки, которые делают каждую отдельную мурчащую животинку уникальной. Однако об этом как-нибудь потом.
На данном этапе нам надо убедиться, что в кота зафигачили именно тапком. Для этого нам нужно, чтобы в нашу функцию "зафигачить_чем_либо" передавалась информация о том объекте, который мы швыряем в кота. Такая информация записывается в скобочках после определения самой функции. Вот так:
=================================================
Void зафигачивание_чем_либо (Зафигаченый_объект)
{
Сдристнуть_куда_подальше();
}
=================================================
"зафигаченый_объект" в данном случае будет хранить информацию о том объекте, который мы швырнули в кота. Таким образом мы сможем внутри нашего чудесного события проверить, а действительно ли тапком мы киданули в кота. Вдруг это был кусок вкусной колбасы.
для того, чтобы провести проверку, у нас есть так называемый оператор "if" (по русски: "если"). Операторы - это еще одни чудесные ребята, которые позволяют расширить наши с вами возможности. Например, благодаря оператору "if" мы сможем проверить, чем швырнули в кота. На языке логики это будет звучать так:
Если Зафигаченный_объект является тапком, то вызывается событие Сдристнуть_куда_подальше();
А в Юнити будет выглядеть примерно так:
=================================================
Void зафигачивание_чем_либо (Зафигаченый_объект)
{
if (Зафигаченый_объект == тапок)
{
Сдристнуть_куда_подальше();
}
}
=================================================
Вот теперь наш кот будет убегать куда подальше только в том случае, если мы зафигачим в него именно тапком. Однако на пятикилограмовую гирю, например, он все еще не среагирует. Но и это - задача решаемая. Однако о ней как-нибудь в другой раз.
Пока что на этом все. Если остались какие-то вопросы, пишите в комментариях. Если я где-то сильно накосячил, тоже буду рад поправкам в комментариях.
В следующий раз постараюсь рассказать еще о чем-нибудь. Конечно-же на примере кота=)
Две из трех фотографий жадно украдены с просторов гугла. Одна снята мной лично.