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

Раньше я использовал SpriteKit от Apple, но решил, что C # и Unity - лучший вариант, если мы хотим создавать для нескольких платформ. В настоящее время мы начинаем с мобильных устройств и в будущем расширимся до консолей и ПК.

Во всяком случае, о том, чему я научился в процессе разработки игр. Я хотел бы заранее извиниться за обилие различных фрагментов кода и за то, к чему они относятся: автомобили, фигуры и т. Д. В следующий раз я остановлюсь на одной теме, чтобы было немного понятнее. Спасибо за чтение!

— — —

Недавно я просмотрел уроки Промежуточного скриптинга, которые можно найти здесь: https://learn.unity.com/project/intermediate-gameplay-scripting?courseId=5d532306edbc2a1334dd9aa8

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

При этом, даже если вы ни разу в жизни не написали ни строчки кода, Unity очень хорошо закладывает основы написания сценариев. Я рекомендую вам пройти их курс Создание сценариев для начинающих здесь и поискать в Google Документацию по C #, поскольку C # - это язык программирования, который вы используете для написания сценариев C #.

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

public int Level {получить; набор; }

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

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

Например, предположим, что вы хотите дать GameObject возможность добавлять строки, а также целые числа. В вашем классе создание двух методов с именами addString и addInteger может запутать и запутать в будущем. Итак, вы создали один метод с именем add. Затем перегрузите его, создав другой метод с именем add, но с другой подписью.

Https://learn.unity.com/tutorial/method-overloading#5c8922beedbc2a113b6bc2de

Наследование. Наследование - это концепция объектно-ориентированного программирования, которая позволяет дочернему классу наследовать функции родительского класса. Следовательно, все, что является общедоступным в родительском классе, будет доступно в дочернем классе. Это помогает организовать ваш код и придать GameObjects в Unity своего рода иерархию в коде. Взято прямо из Википедии -

«В объектно-ориентированном программировании наследование - это механизм базирования объекта или класса на другом объекте или классе с сохранением аналогичной реализации. Также определяется как создание новых классов из существующих и формирование из них иерархии классов ».

Возьмем, к примеру, класс Транспортное средство. Он имеет несколько общедоступных переменных и инициализируется четырьмя колесами. Допустим, мы хотим создать электромобиль. Мы могли бы создать другой класс с аналогичными переменными и назвать его ElectricVehicle, или мы можем создать новый класс и использовать наследование для наследования функциональности класса Транспортное средство. .

Как видно ниже, класс ElectricVehicle имеет доступ к родительским переменным - марке, модели, цвету и т. Д.

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

Вот конструктор newColor из родительского класса:

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

Полиморфизм и переопределение. Опять же, еще одна концепция объектно-ориентированного программирования и, по сути, основа ООП. Полиморфизм - это греческое слово, которое означает многогранный. Имея это в виду, полиморфизм - это способность рассматривать объекты времени выполнения как их базовый или родительский объект. Также существует аспект, называемый виртуальными методами, который родительский класс может объявлять, а дочерние классы могут переопределять. Это дает дочернему классу возможность предоставить собственное определение и реализацию этих виртуальных методов.

В качестве примера возьмем класс с именем Shape.

У нас есть метод Draw, который выводит простую инструкцию. Обратите внимание, что перед типом возвращаемого значения стоит ключевое слово virtual. Это важно, поскольку дает нам возможность переопределить метод в дочерних классах.

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

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

Полиморфизм также дает возможность использовать дочерний класс в качестве родительского. Прямо из Документов Microsoft:

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

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

Скрытие участников. Эта концепция позволяет классу, унаследованному от другого класса, скрывать реализацию своих членов родительскими классами. Это приводит к тому, что дочерний класс реализует свою собственную версию любого скрытого члена. В качестве примера возьмем метод Yell на фотографиях ниже. Класс Humanoid - это базовый класс, от которого наследуется Enemy.

В Enemy вы скроете метод Yell, написав new перед public void Yell (). Это скрывает реализацию Yell родительского класса и будет выполнять только «новый» метод в Enemy.

Переопределение или скрытие

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

Это даже не объясняет, что вы можете делать с C # и Unity. Я не углублялся в такие понятия, как делегаты, сопрограммы, кватернионы, атрибуты или события. Конечно, я все еще изучаю эти вещи, и мне придется вернуться к документации, чтобы вспомнить, чего они могут достичь. Вы можете узнать все это и многое другое, просмотрев курс Unity Промежуточные сценарии на их веб-сайте.