Как написать скрипт, чтобы объект в unity3d спавнился в случайном месте, и появляется новый объект через 1-3 секунды?
У меня есть игра, по типу пак-мана (pac-man), но в пак-мане точки находятся постоянно в одной точке. А мне нужно, чтобы 1 точка появилась в случайной координате, а другая точка появляется через 1-3 секунды (время тоже рандомно).
Минимальная координата (-11.99, 1.5, -11.99)
Максимальная координата (11.99, 1.5, 11.99)
Спасибо заранее, думал будет код написать будет легко, но для 15-летнего это оказалось тяжело XD
- Вопрос задан более двух лет назад
- 206 просмотров
Программист/Моделлер. Разработка игры в одиночку на Unity
В плане соло-игростроя программисту, как по мне, намного проще. Грубо говоря, берешь модели с ассетов и прописываешь логику игры. Как же в этом плане обстоят дела у моделлеров? Если можно полностью создать мир в 3D, но с невозможностью написать свой код. Может стоит опираться на готовые скрипты в сети или брать их в тех же ассетах (тогда насколько далеко можно таким образом уехать?) Или как долго нужно изучать C# конкретно под Юнити, чтобы с технической точки зрения была возможность создать 3D игру с локальным мультиплеером и некоторыми фичами типа крафтинга и примитивной физики аля Minecraft, полгода-год? Спасибо.
#1
1:19, 9 окт 2015
> Может стоит опираться на готовые скрипты в сети или брать их в тех же ассетах (тогда насколько далеко можно таким образом уехать?)
Результат стоит ожидать примерно как от обезьяны с гранатой.
> Или как долго нужно изучать C# конкретно под Юнити
Конкретно под юнити — там нет ничего сложного. А вот если с программированием/шарпом не знаком — то это долго.
> полгода-год?
в худшем случае — до бесконечности.
#2
11:32, 10 окт 2015
Открываешь браузер. Ищешь уроки по C# (я лично учился по mycsharp.ru — основы можно довольно быстро постигнуть). Идешь на unity3d.com. Проходишь туториалы по базовым функциям. Идешь на ЮТуб, ищешь туториалы по Юнити. «Как сделать 3Д игру», «Как сделать локальный мультиплеер», «Как сделать крафтинг», «Как сделать Майнкрафт на Юнити». Делаешь.
#3
13:41, 10 окт 2015
fent
Аналогично, изучаю на mycsharp.
«основы можно довольно быстро постигнуть» , «Проходишь туториалы по базовым функциям» Получается ты ответил на мой вопрос, и не обязательно глубоко знать яп/unity для реализации нужных мне вещей?
#4
22:02, 10 окт 2015
OLEGTWFTW
Вопрос лишь в том,насколько убогий код получится в итоге.Если делать все из основ,то вопросов нет,но при использовании даже нескольких более сложных элементов шанс нарваться на грабли возрастает по экспоненте,при этом шанс,что сам сможешь найти и разобраться с косяком,прямо пропорционален твоему пониманию кода.Все остальное,по сути,зависит от того,что тебе надо получить.Как по мне,делать что-то серьезное без опыта лучше не пытаться,опыт то получишь и так и так,но времени убьешь куда больше,да и не факт,что со всем разберешься.Лучше постепенно и медленно,но все понимая,да и так материал усвоится лучше.
#5
1:54, 11 окт 2015
OLEGTWFTW
> Может стоит опираться на готовые скрипты в сети или брать их в тех же ассетах
> (тогда насколько далеко можно таким образом уехать?) Или как долго нужно
> изучать C# конкретно под Юнити, чтобы с технической точки зрения была
> возможность создать 3D игру с локальным мультиплеером и некоторыми фичами типа
> крафтинга и примитивной физики аля Minecraft, полгода-год? Спасибо.
ну я могу только про свой опыт рассказать.
Я не программист. Какие-то языки программирования до этого уже изучал, поэтому основы C# освоил за один вечер, необходимый минимум, чтобы понимать код.
Потом искал готовые решения, уроки, примеры и прочее. Дорабатывал под себя. Сделал несколько простых скриптов. Сетевой код взял готовый. Его тоже немного «улучшил». Начал делать боевку(довольно сложную боевку), но меня хватило на пару вечеров и я забил.
ВЫВОД: Проблема не в сложности программирования. Важнее усидчивость. Если каждый вечер в течении полугода я что-то делал, то игра была бы уже готова.
#6
10:58, 11 окт 2015
Ryhor1
Спасибо что поделился своим опытом
#7
15:44, 11 окт 2015
как программист могу сказать что сделать клёвую игру с интересным и затягивающим геймплеем даже сетевую можно очень легко и быстро используя только основы программирования, описываемые в туториалах
но стоит лишь накидать немного дополнительных и иногда даже лишних фичей и сложность разработки возрастает в геометрической прогрессии
могу только посоветовать плотно заняться геймдизайном а потом браться за изучение шарпа, это сэкономит много времени и увеличит шансы на успех
вон plague inc — игра в два экрана и не очень сложной арифметикой — хит
если сделать сам геймплей простым и интересным, то помимо простой арифметики придется для 3д игры изучить по шарпу и юнити лишь немного векторную алгебру и кватернионы, работу с которыми юнити очень сильно упрощает
т.е. в туториалах есть всё что нужно для простой логики не требующей оптимизации по производительности (сложных структур данных, небезопасного кода и борьбы со сборщиком мусора)
как вариант — можно попросить какого-нибудь программиста создать архитектуру для проекта, это недолго, но значительно упростит задачу, т.к. удобная архитектура значительно улучшает понимание работы кода
#8
16:32, 11 окт 2015
Chupakaber
Спасибо. Тогда с какой стороны следует подбираться к шарпу под игрострой в Юнити? Изучать все подряд или есть вещи, которые можно опустить и время на их изучение будет использовано неэффективно. Есть какие-то нюансы?
#9
22:43, 11 окт 2015
Конечно шарп для юнити нужно начинать изучать исключительно в рамках поставляемой юнити библиотеки, она частично заменяет библиотеку .net и покрывает почти все нужды для небольшой игры
Начинать лучше с немобильного приложения, например для ПК или браузера, так проще отлаживать. Ну и первым, чему стоит научиться это отладке, выводить в консоль все данные при разработке, которые не понятны, чтобы разбираться, где что находится и как что работает.
Лучше всего попробовать сделать пробную аркадку или платформер с управлением с клавиатуры. Тут и пользовательский ввод и работа с камерой скорее всего будет. И объектами управлять можно научиться.
Потом взять и улучшить её до более сложной аркады или платформера. А после браться за сеть. Тут выбор может быть от готового механизма сетевого встроенного в юнити, До собственного на сокетах. После изучения того что я выше написал — появятся конструктивные вопросы и по этому пункту.
Ну а про готовые скрипты — за них стоит браться не раньше чем будет общее представление о программировании под юнити и небольшой тестовый проектик за плечами. Иначе это только помешает и запутает. Ну а вообще готовых полезных скриптов под юнити кроме того что встроено в сам движок тоже достаточно много, это даже больше покрывает нужды моделеров, чем модельные ассеты для нужд программистов.
#10
23:12, 11 окт 2015
Chupakaber
Спасибо огромное. Для полного счастья бы еще пару ссылок прикрепить на те же библиотеки юнити.
#11
23:38, 11 окт 2015
Библиотека встроена в юнити, какие части её подключать в скриптах, если это необходимо, описано в документации словом used в верху страницы с кодом
Вводные статьи к разделам документации там вроде доступные для восприятия
Так что можно смело пройтись по документации с первых статей. Ну а потом можно и туториалы там же посмотреть
#12
5:57, 25 окт 2015
Начал учиться писать С# для юнити. Изначально я моделер/художник.
Читаю документацию, иногда гуглю туториал. Задачи ставлю себе довольно легкие: хочу сделать змейки, пакманы, марио, все это до того как делать Метроидвании итд.
Конечно сложнее чем если бы знал код и не умел рисовать, но так как я сейчас вдали от дома, и только со старым макбуком на котором Фотошоп не пашет, но Юнити работает хорошо. Всем советую.
#13
22:05, 27 окт 2015
zenarion
что за макбук?
Компьютерная графика → Pac-Man 2D на Unity 3D
Эта статья будет переводом статьи по туториалу с сайта noobtuts (оригинал https://noobtuts.com/unity/2d-pacman-game), но на более новой версии Unity.
![]()
Играй в Лампочки!
Сможешь заполнить все пустые ячейки светом?
Оригинальная игра Pac-Man была выпущена в октябре 1980 года и вскоре стала самой известной аркадной игрой всех времен. Игра стала настолько популярной, что даже Unity включила крошечную ее часть в свой игровой движок:

Вот предварительный просмотр финальной игры:

Данное руководство было сделано на версии Unity 2018.3.11f1. Более новые версии также должны работать нормально, более старые версии могут работать или не работать.
Настройка проекта
Запускаем Unity и создаем новый проект. Задаем название проекта, выбираем 2D и создаем проект.

В Иерархии выбираем Main Camera и меняем Background на черный. Также настроем Size и Position, как показано на скрине:

Лабиринт

Создадим типичный лабиринт Pac-Man. Для начала, необходимо создать в папке Assets папку Sprites, далее щелкаем правой кнопкой мыши на картинку выше, выбираем «Сохранить картинку как. » и сохраняем ее в папке Sprites.
После сохранения в папке мы можем выбрать его в области Project.

Далее необходимо изменить параметры импорта в Inspector.

Значение «Pixel Per Unit», равное 8, означает, что 8 х 8 пикселей поместятся в одну единицу в игровом мире. Мы будем использовать это значение для всех наших текстур. Мы выбрали значение 8, потому что расстояние между двумя Pac-точками (едой) всегда равно 8 px, и мы хотим, чтобы это расстояние составляло 1 единицу в нашей игре. Мы выбрали Bottom-Left для Pivot, потому что это облегчит выравнивание.
После настройки в инспекторе необходимо применить изменения нажав на «Apply«.
Теперь мы можем перетащить лабиринт на сцену (убедитесь чтоб вкладка была на Scene, а не на Game) или можно перетащить его в Иерархию. В Inspector меняем Position лабиринта на (0,0), чтобы в дальнейшем было проще.

Физика лабиринта
Сейчас лабиринт — это всего лишь картинка. Она не имеет физики, объекты не столкнутся со стенками, и Pac-Man сможет пройти прямо сквозь стены. Чтобы изменить это необходимо добавить коллайдер для каждой стены в лабиринте: Add Component -> Physics 2D -> Box Collider 2D в Инспекторе.
Если мы посмотрим на сцену, то увидим, что Unity обернула коллайдер вокруг всего лабиринта, что не совсем то, что нам нужно. Нам нужно иметь коллайдер вокруг каждой стены лабиринта. Дляя этого в инспекторе нажимаем на кнопку «Edit Collider» и изменять коллайдер в сцене, используя зеленые точки. Или же в ручную в инспекторе менять Offset и Size:

Необходимо повторить этот процесс для каждой стенки в лабиринте. Все, что нам нужно сделать, это выбрать Add Component -> Physics 2D -> Box Collider 2D , нажать кнопку Edit Collider или в менять Offset и Size, и затем изменять его в сцене.
Очень важно, чтобы каждый коллайдер был абсолютно точным. Необходимо чтобы Offset и Size коллайдера были равны 1,25 или 1,5 или 1,75 или 2,00 , а не 1,24687 или 1,25788 . Вот несколько примеров:
Если же Pac-Man будет застревать в лабиринте или испытывать затруднения при движении, то это потому, что Коллайдеры лабиринта не совсем точны.
Конечный результат лабиринта:

Коллайдер будет очень много, настройка займет время.
Добавление Pac-Man
Нам понадобится одна анимация для каждого направления движения:
— вправо
— влево
— вверх
— вниз
Это все будет в одной картинке:

Щелкаем правой кнопкой мыши на картинку выше, выбираем «Сохранить картинку как. » и сохраняем ее в папке Sprites.
Используем следующие параметры импорта в инспекторе:

После настройки в инспекторе необходимо применить изменения нажав на «Apply«. Значение Multiple в Sprite Mode, означает что в нашем изображении более одного пакмена. Для того, чтобы разделить пакманов, необходимо открыть «Sprite Editor«:

Теперь мы можем разделить наших пакменов, нажав на Slice (у некоторых оно может обозначаться Sl) и выбрать тип Grid By Cell Size, задав Pixel Size (16,16):

Нажимаем Slice чтобы изменения применились, и далее «Apply» чтобы сохранить изменения.
В результате теперь есть 12 срезов под пакмана, проверить можно в области Project:

Создание анимации Pac-Man
Теперь, когда у нас есть фрагменты анимации, мы можем создать наши 4 анимации из этого. Напомним, что анимации нам понадобятся:
Right (срез 0, 1 и 2)
Left (срез 3, 4 и 5)
Up (срезы 6, 7 и 8)
Down (срез 9, 10 и 11)
Начнем с анимации Right. Выбираем первые три среза, и перетаскиваем их на сцену.

Когда мы перетаскиваем несколько фрагментов на сцену, Unity создает из них анимацию, и поэтому автоматически спрашивает нас, где сохранить анимацию. Сохраняем анимацию как right.anim в новой папке PacmanAnim. Unity просто добавила игровой объект pacman_0 на сцену и два файла в область Project:

Первый файл — это конечный автомат анимации, который определяет скорость анимации и еще что-то. Второй — это сама анимация.
Мы повторим этот процесс для остальной части анимации (срезы 3, 4, 5 слева; срезы 6, 7, 8 вверх и срезы 9, 10, 11 вниз). Сохраняем в ту же папке что и right.anim.
Как будет выглядеть иерархия после этих действий:

Уберем ненужное. Unity создала один GameObject для каждой анимации, но нам нужен только первый. Выбираем остальные 3, а затем щелкните правой кнопкой мыши и удалите их:

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

Создание переходов анимации
Сейчас у нас есть 4 файла анимации, но Unity пока не знает, когда и какую анимацию воспроизводить. Для этого понадобится конечный автомат анимации, который имеет 4 состояния:
right
left
up
down
Также нужны переходы, чтобы Unity знала, когда переключаться из одного состояния анимации в другое. Он будет использовать Transitions (переходы), чтобы знать, когда переключаться в другое состояние. Unity делает все это автоматически, все, что нам нужно сделать, это уведомить его о направлении движения Pac-Man из скрипта позже.
Дважды щелкаем на pacman_0 в области Project:

Открывается Animator где показан один переход:

Перетаскиваем наши остальные состояния (left, up, down) из Project на Animator:

Необходимо следить за направлением движения Pac-Man. Направление движения имеет тип Vector2, на следующем рисунке показаны некоторые возможные направления движения:

У Pac-Man будет только 4 направления движения (вверх, вниз, влево, вправо) . Это означает, что нам нужны только следующие 4 перехода в нашей машине состояний анимации:
Если DirY> 0, переходите наверх (например, DirY = 1, DirY = 2, DirY = 3 и т. Д.)
Если DirX> 0, тогда идите направо (например, DirX = 1, DirX = 2, DirX = 3 и т. Д.)
Если позиция Pac-Mac будет меняться по одной из координат, будет включаться соответствующаяя анимация.
Создадим DirX и DirY. Для этого переходим во вкладку Parameters, нажимаем на «+» справа и затем добавим один параметр типа Float с именем DirX и другой параметр типа Float с именем DirY:

Переходы используются для переключался на разные состояния анимации на основе параметров. Например, мы могли бы добавить переход от left на right с условием, что DirX> 0 . Однако рекомендуется чтобы была небольшая погрешность, поскольку сравнение с плавающей запятой не всегда идеально, поэтому вместо этого будем использовать DirX> 0,1 .
Для перехода из любого состояния (right, left, up, down) в другое будем использовать Any State. Щалекаем ПКМ на Any State и выбираем «Make Transition«, после этого перетаскиваем белую стрелку в нужное состояние:

Теперь нажимаем на белую стрелку и смотрим на Inspector, где мы можем изменить Условие (Conditions) перехода. Нажимаем на «+» и установим DirX> 0.1 и отключим Can Transition To Self (это позволяет избежать странных ситуаций, когда анимация будет перезапускаться все время, удерживая нажатой клавишу перемещения):

В результате, когда Pac-Man идет вправо (DirX> 0,1), аниматор переключается в состояние right и воспроизводит анимацию.
Теперь необходимо добавить еще три переходя для каждого состояния (и у всех отключить Can Transition To Self):
из Any State (любого состояния), в состояние left с условием DirX
из Any State (любого состояния), в состояние up c условем DirY> 0,1
из Any State (любого состояния), в состояние down c условем DirY
Вот как сейчас выглядит Animator :

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

Если нажать на Play, то можно увидеть анимацию right.
Для красоты, переименуем pacman_0 на pacman выбрав его в Иерархии, и изменив название в Inspector, так же изменим его позицию на (14,14):

Физика Pac-Man
Сейчас Pac-Man — это всего лишь картинка, не более того. Он не является частью мира физики, вещи не будут сталкиваться с ним, и он не может двигаться или что-то еще. Нам нужно будет добавить коллайдер (Collider), чтобы сделать его частью мира физики, а это значит, что Pac-Man будет сталкиваться с объектами, а не проходить сквозь них.
Pac-Man также должен двигаться. RigidBody заботится о таких вещах, как гравитация, скорость и другие силы, которые заставляют вещи двигаться. Как правило, все объекты в мире физики, которое должны двигаться, нуждаются в Rigidbody.
Давайте выберем pacman в Иерархии , выберите Add Component -> Phusics 2D -> Circle Collider 2D, а также Add Component -> Phusics 2D -> Rigidbody 2D . И используем настройки, как показано на следующем рисунке:

Pac-Man теперь является частью мира физики. Он столкнется с другими вещами, и другие вещи столкнутся с ним. Это также приведет к вызову функции OnCollisionEnter2D в любом скрипте, подключенном к Pac-Man.
Скрипт движения
Самый простой способ заставить Pac-Man двигаться — создать скрипт, который просто проверяет нажатия клавиш со стрелками, а затем перемещает Pac-Man вверх / вниз / влево / вправо, когда это необходимо. Работать это будет так: когда игрок нажимает одну из клавиш со стрелками, Pac-Man будет двигаться ровно на 1 единицу в нужном направлении. Pac-Dots (еда) также будет располагаться на расстоянии 1 единица между ними.
Выбираем pacman в иерархии, и нажимаем Add Component->New Script, назовем его PacmanMove и нажимаем “Create and Add”.
Скрипт появится в области Project в папке Assets, можем создать папку Scripts в Assets и перенести наш скрипт в эту папку.

Дважды кликаем по скрипту PacmanMove, чтобы он открылся.

Функция Start автоматически вызывается Unity при запуске игры. Функция Update вызывается автоматически снова и снова, примерно 60 раз в секунду (это зависит от текущей частоты кадров, она может быть ниже, если на экране много объектов).
Существует еще один тип функции обновления — FixedUpdate. Он также вызывается снова и снова, но через фиксированный интервал времени. Лучше использовать FixedUpdate при работе с физикой:

Нам понадобится public переменная скорости, чтобы в дальнейшем мы могли изменять ее в Inspector:

Нам также понадобится способ выяснить, может ли Pac-Man двигаться в определенном направлении или есть же. Так, например, если бы мы хотели выяснить, есть ли стена сверху Pac-Man’а, мы могли бы просто провести линию на одну единицу выше Pac-Man и посмотреть, ударит ли она что-нибудь.
Вот эта функция:

Нам также понадобится функция, которая заставит Pac-Man переместиться на 1 единицу в нужном направлении. Необходимо чтобы он пошел туда плавно, поэтому сохраним точку назначения перемещения в переменной, а затем используем FixedUpdate для постепенного перехода к этой точке:

Мы использовали GetComponent для доступа к компоненту Rigidbody Pac-Man. Затем мы используем его для перемещения.
Также необходимо следить за нажатиями клавиш со стрелками, когда мы не движемся.
Примечание: мы не двигаемся, если текущая позиция равна месту назначения.
Вот наша функция FixedUpdate с проверками ввода:

Если мы сохраним Script и нажмем Play, то теперь сможем перемещать Pac-Man с помощью клавиш со стрелками.
Установка параметров анимации
Прямо сейчас мы можем прекрасно перемещать Pac-Man по лабиринту, но аниматор пока не воспроизводит все анимации. Изменим наш код, чтобы вычислить текущее направление движения, а затем установить параметры аниматора:

Мы рассчитали текущее движение направление по основным векторам. Все, что нам нужно было — вычесть текущую позицию от направления.
Если мы сохраним скрипт и нажмем кнопку « Play», то увидим правильную анимацию.
Теперь нам необходимо чтобы Pac-Man всегда рисовался поверх карты и Pac-Dots (еды). Для этого выбираем panman в иерархии и выставляем Order in Layer на 1:

Pac-Dots
Маленькие точки, которые может съесть Pac-Man, называются Pac-Dots. В нашем случае это будет изображение размером 2×2 px:

Щелкаем правой кнопкой мыши на картинку выше, выбираем «Сохранить картинку как. » и сохраняем ее в папке Sprites.
Используем следующие параметры импорта, и не забываем применить:

После этого мы можем перетащить его в сцену. Нам надо получать уведомления, когда Pac-Man идет по Pac-Dot. Все, что нам нужно сделать, это выбрать Add Component -> Physics 2D -> Box Collider 2D в Inspector, а затем выбрать Is Trigger :

Unity будет автоматически вызывать функцию OnTriggerEnter2D всякий раз, когда Pac-Man пересечет Pac-Dot.
Добавим скрипт нашему pacdot. Для этого выбираем его в иерархии, Add Component -> New Script , назовем его Pacdot, переместим его в нашу папку Scripts и затем откроем:

Нам не понадобится функция Start или Update , поэтому удалим их. Вместо этого мы будем использовать ранее упомянутую функцию OnTriggerEnter2D:

В функции мы будем проверять, был ли объект, который прошел через Pac-Dot, и если так, то мы уничтожим Pac-Dot:

Сохраняем наш скрипт, и в иерархии дублируем Pac-Dot. Важно чтобы координаты были округленными, такими как (1,2), а не (1.003,2.05).
Результат после дублирования и размещения всех Pac-Dot результат будет таким:

Перенесем все pacdot в maze в иерархии и в последствии свернуть maze:

The Ghosts
В оригинальной игре Pac-Man были враги Ghosts (призраки). Добавим их и в нашу игру.
Загружаем Sprite красного призрака, известного как Blinky:

Щелкаем правой кнопкой мыши на картинку выше, выбираем «Сохранить картинку как. » и сохраняем ее в папке Sprites.
Далее выбираем его в области Project, и меняем настройки импорта в Inspector:

Создаем анимацию. В Inspector необходимо чтобы Sprite Mode был Multiple, так как в нашей картинке есть разные вариации одного изображения. Нажимаем на Sprite Editor в инспекторе, и меняем Slice как на картинке:

После этого мы можем закрыть Sprite Editor и нажать «Apply». Теперь пришло время создавать анимацию, перетаскивая фрагменты в сцену, как мы делали с Pac-Man.
Сначала мы перетащим фрагменты 0 и 1 в сцену и сохраним анимацию как right.anim в новой папке BlinkyAnim.
Мы повторим этот процесс для:
2 и 3 как влево
4 и 5 как вверх
6 и 7 как вниз
Теперь можно очистить Иерархию, удалив blinky_2, blinky_4, blinky_6:

Также можно удалить blinky_2, blinky_4, blinky_6 из папки BlinkyAnim в области Project.
Создание анимации
Дважды щелкаем на файл blinky_0, чтобы открылся Animator:

Необходимо создать такой же автомат анимации, который мы использовали для Pac-Man раньше. Все, что нам нужно сделать, это перетащить анимацию, создать параметры (DirX, DirY) и затем установить переходы:
Any State для перехода right с условием DirX> 0,1
Any State для перехода left с условием DirX
Any State для перехода up с условием DirY> 0,1
Any State для перехода down с условием DirY
Конечный автомат анимации будет таким:

Для красоты переименуем blinky_0 на blinky в иерархии.
Также меняем положение в Инспекторе, чтобы Блинки находился в середине лабиринта:

Физика для призраков
Блинки тоже должен стать частью мира физики. Выбираем Add Component -> Physics 2D -> Circle Collider 2D в Инспекторе и назначим следующие свойства:

Включение Is Trigger нужно потому что Blinky — это призрак, и призраки могут ходить сквозь объекты.
Блинки также должен перемещаться по лабиринту, а это значит, что нам нужно добавить к нему Rigidbody. Выбираем Add Component -> Physics 2D -> Rigidbody 2D:

Точно так же, как Pac-Man, необходимо чтобы Blinky был нарисован на переднем плане, перед Pac-Dots. Все, что нужно сделать, это установить значение Order in Layer в 1:

Движение призраков
Создадим сценарий движения по точкам, который заставит Блинки идти по определенному пути. То, что звучит почти слишком просто, на самом деле является довольно приличным решением нашей проблемы с ИИ. Чем длиннее и сложнее путь, тем сложнее игроку избежать Блинки.
Выбираем Add Component -> New Script, назовем его GhostMove и переместим в папку Scripts. Дважды щелкаем по нему, чтобы он открылся.
Нам не понадобится функция Start и Update, вместо этого мы будем использовать функцию FixedUpdate.
Надо добавить общедоступный массив Transform, чтобы позже мы могли установить путевые точки в Инспекторе, переменную которая отслеживает точку пути, к которой в данный момент идет Blinky и переменную скорости:

Используем функцию FixedUpdate, чтобы приблизиться к текущей путевой точке, или выбрать следующую, как только мы ее достигнем:

Функция Vector2.MoveTowards нужна чтобы вычислить точку, которая ближе к путевой точке. После этого устанавливаем позицию призрака с помощью solidbody2D.MovePosition . Если путевая точка достигнута, то мы увеличиваем переменную cur на единицу. Также надо сбросить переменную cur на 0, если она превышает длину массива.
В этом методе устанавливаем параметры анимации:

Есть еще одна вещь, которую нужно добавить в скрипт. Призраки должны уничтожить Pac-Man при столкновении с ним:

Добавление путевых точек
Чтобы добавить точку, выбираем Game Object-> Create Empty из верхнего меню. Переименуем его в Blinky_Waypoint0, а затем назначим ему Gizmo (Gizmo — это просто визуальный помощник, мы его не видим, когда играем в игру), чтобы нам было легче видеть его в сцене:

Разместим его в (15, 20). Теперь можно продублировать путевую точку, переименовать ее в Blinky_Waypoint1 и расположить ее в (10, 20). Следующую Blinky_Waypoint2 в (10, 14), Blinky_Waypoint3 в (19, 14) и наконец Blinky_Waypoint4 в (19, 20). Вот что должно получиться:

И поскольку скрипт движения автоматически продолжит движение к первой путевой точке после достижения последней, у нас будет идеальный цикл.
Выбираем blinky в Иерархии, а затем перетаскиваем одну путевую точку за другой в слот Waypoints нашего скрипта GhostMove:

Если мы нажмем Play, то увидим, как Blinky движется по путевым точкам. Конечно, текущие путевые точки довольно просты. Поэтому создайте более сложный маршрут для призрака.
Пинки, Инки и Клайд
Чтобы добавить остальных призраков, повторите один и тот же рабочий процесс для Пинки, Инки и Клайда, но меняя путевые точки и скорость движения.
Существует множество функций, которые можно добавить чтобы игра была более полной:
3. Продвинутый ИИ
5. Больше уровней
P.S. В одном из скринов скрыта ссылка на Git репозиторий данной игры, с готовым кодом и префабами.
Как сделать пакмана на юнити 3д

Роман Сакутин | Научу делать игры
66.8K subscribers
970 photos
120 videos
Основатель студии Агава и школы ЯЮниор. Настоящий разработчик с опытом 10+ лет который открыл свою студию.
About
Blog
Apps
Platform
Роман Сакутин | Научу делать игры
66.8K subscribers

Фишка при работе с UI в Unity. Как сделать адаптивные картинки?
Интересная фишка которая позволит вам делать адаптивные интерфейсы в Unity.
Курс по Unity для начинающих с 90% скидкой — https://www.udemy.com/unity-step1-base/?couponCode=YOUTUBE
Промокод ко всем моим курсам -YouTube
Каталог — https://www.udemy.com/user/roman…

ПОДАРОК ПОКУПАТЕЛЯМ КНИГИ / КНИГА ПОЧТИ ДОПИСАНА / МОЯ ИГРА В ТОПЕ / НЕМНОГО ФУТБОЛЬНОГО ФРИСТАЙЛА
Рассказал про подарок который приготовил всем покупателям книги и также о том, как прошли две недели. Поделился новьём из моей книги и немного покрутил мяч. .

Расскажу про интересные мероприятия для всех, кто живет в Москве. С ребятами, которые всё это организуют я общаюсь довольно давно, поэтому рекомендую обратить внимание!
1. 26 сентября в 19:00 в Высшей школе бизнес-информатики НИУ ВШЭ в Москве будет лекционный вечер по игровой индустрии. Будут две лекции: «Маркетинг игр с минимальным бюджетом» и «Сюжеты и деньги: место сценариста в игровой индустрии».
2. 3 октября в 19:00 там же в ВШБИ расскажут о программах профессиональной переподготовки «Менеджмент игровых проектов», который запускается в ноябре 2018 года, и «Маркетинг компьютерных и мобильных игр», который стартует в феврале 2019.
Онлайн-круглый стол «Игровая индустрия – итоги 2021 года» 24.12
24 декабря 2021 года (пятница) в Центре развития компетенций в бизнес-информатике Высшей школы бизнеса НИУ ВШЭ состоится онлайн-круглый стол «Игровая индустрия — итоги 2021 года» в рамках учебной программы «Менеджмент игровых проектов».

В эту субботу в 21:00 (МСК) стрим на котором поиграем в игру Code Hunt (тест по программированию смешанный с игрой)
Боевой Робот на JavaScript в FightCode. Большой Прямой Эфир по Программированию
Мои курсы на Udemy — https://www.udemy.com/user/roman-sakutin/
курс по Unity для начинающих с 90% скидкой — https://www.udemy.com/unity-step1-base/?couponCode=YOUTUBE
ПРОМО КОД КО ВСЕМ КУРСАМ — YOUTUBE
https://t.me/csharp_faggots_fan_club — Конфа в телеграмме…

Вышел новый курс по ООП.
Он является первой ступень. в пошаговой системе продвинутого C#.
Сейчас действует 90% скидка!

Отношения в ООП: Агрегация, композиция, ассоциации и генерализация | Продвинутый CSharp
Рассказал про отношения между объектами. Это отрывок курса.
Курс по ООП в C# (продвинутый уровень) с 90% скидкой — https://www.udemy.com/csharp-advanced-step1-oop/?couponCode=YOUTUBE
Промокод ко всем моим курсам -YouTube
Каталог — https://www.udemy.com/user/roman…

Шаблоны проектирования при программирование на C# встречаются повсеместно, и многих разработчиков объединяет страх перед ними, или не полное понимание заложенных в них концепций.
Я приглашаю вас на двухдневный онлайн мастер-класс, на котором мы рассмотрим 15 основных паттернов:
Поведения:
-Стратегия
-Шаблонный метод
-Посредник
-Итератор
-Наблюдатель
-Посетитель
Порождающие:
-Синглтон
-Абстрактная фабрика
-Фабричный метод
-Строитель
В общей сложности мы проведём с вами 4 часа занятий на которых вы вплотную познакомитесь с паттернами, и сможете пообщаться в прямом эфире и получить ответы на свои вопросы.
Это не обычные лекционные вечера, а именно живая работа с аудиторией. Группа занимающихся — компактная, по этому все будем в тесном контакте. Помимо самого материала, вы получите домашнюю работа по каждому из паттернов и контроль решения от спикера.
Время проведения с 21:00 — 23:00 по МСК, 2-го и 4-го октября.
Вы можете записаться написав мне в личку — @rsakutin
Попасть на занятия вы можете по двум тарифам:
Обычный включает весь основной материал + домашнюю работу. Стоит — 2000 рублей.
Вип включает весь основной материал + домашнюю работу + 2 индивидуальных занятия. Стоит — 4900 рублей.
Всю подробную информацию вы можете получить у меня.
Написать @rsakutin
P.S:
На этот мастер-класс действует акция, все участники бесплатно получаются курс по основам ООП в C#.

3 примера паттернов GoF в GameDev (Unity)
Всем привет! Меня зовут Роман Сакутин и сейчас я хочу привести 3 примера использования паттернов GoF при разработке компьютерных игр с Unity и C#. Дальше вы увидите примеры связанные со следующими шаблонами: — Visitor (Визитёр) — Observer (Наблюдатель) —…

Типизация в программировании. Почему JavaScript сосёт у C#?
Открывок из моего курса по ООП. Рассказал про типизацию в языках программирования и объяснил почему мне больше нравится C# и в каких аспектах JS у него сосёт.

Хотите стать профессиональным Unity разработчиком?
После освоения основ Unity, вы сталкиваетесь с тем, что уровень вашего кода не соответствует корпоративным стандартам. В нём много ошибок и каждое изменение приводит к неработоспособности уже созданных сцен и компонентов. И к сожалению, авторы с YouTube, пишут не многим лучше, и у вас нет материала который бы поднял вас на уровень выше.
Хотите ли вы стать лучше и начать разрабатывать проекты высокого качества? Готовы ли в кардинальным изменениям в вашем понимание программирования в Unity?
Если да, то этот мастер-класс для вас!
Я предлагаю вам пройти 2 онлайн-занятия и познакомится с лучшими практиками проектирования игр в Unity, и столкнутся с этим всем на реальных задачах. Занятия будут проходить 9-го и 11-го октября.
Записываясь на курс, вы получаете:
2 вебинара с основным материалом
8 практических задач для самостоятельной работы
Гарантию возврата средств
Личного ментора на всё время курса
Доступ в беседу участников
Записи всех занятий
Курс по ООП в подарок
✏️ВАШ РЕЗУЛЬТАТ:
В конце этих занятий, вы будете уверенно использовать Scriptable Object, основные паттерны игрового проектирования и научитесь работать с внедрением зависимостей и юнит тестированием.
Занятия веду я, опытный разработчик и преподаватель — Роман Сакутин. А также я занимаюсь менторством и ответом на ваши вопросы 24\7.
КАК ПРОХОДИТ МЕНТОРСТВО:
На протяжение всего курса вы можете пообщаться лично по Skype с преподавателем для решений ваших вопросов или для постановки индивидуальной задачи. В цену входит не более 4 часов общения.
КАК ЗАПИСАТЬСЯ:
Записаться на этот курс вы можете по 2-ум тарифам:
6500 рублей, в этот тариф входят все занятия, записи и менторство.
3990 рублей, в этот тариф входят занятия + записи и ответы на вопросы в общем чате.
Скидка в 50% для первых 5 участников!
Даты онлайн занятий: 9-го и 11-го октября с 21:00 до 23:00 по МСК.
Для записи достаточно написать мне в личку. И мы сможем решить вопрос оплаты. Также я могу вам рассказать более подробно об программе курса.
@rsakutin Записаться

Абстракция в ООП. Четыре столпа объектно ориентированного программирования в C#. Продвинутый C#
Сейчас мы поговорим об Абстракции.
Абстрагирование — это отделение существенного от несущественного. В контексте программирования, абстракция проявляется в двух видах.ет чётких границ, и определение может варьироваться.
Курс по ООП в C# (продвинутый уровень)…

Хотите с полного нуля создать свою первую игру за неделю и получить отзывы от игроков?
Предлагаю вам принят участие в трёхдневном онлайн марафоне «С нуля до первого релиза», во время которой вы создадите свою первую игру и опубликуете её в сторах а также найдёте себе первых игроков.
Будь вам 14 или 45, вы всегда сможете начать заниматься столь творческим делом и воплощать свои идеи. За три дня вы научитесь:
Профессионально описывать свою идею;
Работать с Unity;
Использовать фишки для максимально быстрого создания прототипа;
Набирать команду и в дальнейшем ей управлять.
Публиковать игру и заниматься базовым маркетингом.
Помимо этого вы познакомитесь с множеством людей в нашем общем чате для дальнейшей совместной работы.
Для кого подойдёт это мероприятие:
Для полных новичков которые хотят познакомится с полным циклом разработки игры.
Для начинающих программистов которые не могут создать свой продукт.
Художникам которые хотят оживить свои идеи и не знают как сконтактироваться с тех. специалистами.
Начинающим геймдизайнерам для знакомства с основными инструментами.
Вся программа марафона сконцентрирована на том, чтобы побудить вас к делу и также дать вам всё необходимое для быстрого старта. По этому результат недели обучения — сделанная своя игра всеми правдами и не правдами.
Записаться прямо сейчас вы можете за 800р, каждый день цена растёт на 250р. За эти деньги вы получите:
3 онлайн занятия по 3 часа 16-го, 18-го и 19-го октября с 20:00 до 23:00 по МСК.
Доступ в общий чат.
Записи занятий.
Записаться @rsakutin
У каждого занятия есть основная тема.
Первое занятие — формулирование идеи, принципы геймдизайна и работы над проектом. Разбор главных ошибок новичков. Обзор инструментов и шаблонов.
Второе занятие — разработка продукта. Основы Unity, быстрая разработка прототипа. База программирования и как делать игры не умею писать код.
Третье занятие — релиз и паблишинг. На какие платформы стоит обратить внимание. Сбор аналитики и работа с игроками.
Записаться @rsakutin
P.S: Количество мест ограничено 50 людьми. 10 сразу же резервируется за постоянными учениками с потока Unity All In. Так что решайте быстрей 😉