Как создать базовую игру для Android с Unity —

В предыдущем уроке Appual под названием «Как создать базовую игру на платформе Unity» (и его часть 2) мы перешли на использование Unity и встроенного плагина WebGL для создания простой браузерной игры на основе HTML5 — в этом аналоге В учебнике мы рассмотрим, как создать простую игру для Android с использованием Unity.

Требования:

  • Единство
  • Хороший текстовый редактор, такой как NotePad ++ (необязательно, но рекомендуется)
  • Android SDK

Если у вас его еще нет, начните с загрузки и установки Unity SDK, а также Android SDK. Нам нужен Android SDK, чтобы мы могли проверить APK игры в среде Android.

Запустите Unity и создайте новый проект. Сделайте это 2D-проектом.

Есть несколько панелей, с которыми нужно ознакомиться — панель Hierarchy, которая будет содержать все наши элементы сцены (scene = любой «уровень», над которым вы сейчас работаете). Затем есть вкладка Game, которая используется для игры / тестирования вашей игры в редакторе, а справа у вас есть панель Inspector, где вы можете редактировать различные вещи, такие как освещение, физика и т. Д.

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

Перетащите ваш спрайт в главное окно сцены (самое большое окно) — оно также появится на панели иерархии слева.

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

Так что просто создайте новый квадратный «спрайт» и перетащите его в окно сцены, как вы делали со своим спрайтом.

Теперь нам нужно дать Unity команду дать физику нашему главному персонажу — щелкните по своему главному спрайтовому персонажу (он должен выделиться синим цветом в окне сцены), затем на панели «Инспектор» найдите «GameObjects».

Нажмите «Добавить компонент> Физика 2D> RigidBody2D». Это автоматически добавит физику в ваш спрайт, который в противном случае вам пришлось бы писать самостоятельно в другом SDK.

Мы хотим предотвратить выход из-под контроля персонажа основного спрайта — найдите вкладку «Ограничения» на панели «Инспектор» (основной спрайт по-прежнему выделен в окне «Сцена») и установите флажок «Заморозить вращение Z».

Если вы нажмете кнопку «Играть», ваш главный спрайт-персонаж должен упасть с неба и просто падать бесконечно — мы позаботимся об этом позже, но просто обратите внимание на то, как мы легко смогли применить физику. Применяемая нами физика зависит от формы, к которой они применяются — поэтому, если вы примените ту же физику к сфере, например, она будет вращаться.

Мы также хотим исправить нашу ориентацию, чтобы персонаж не вращался и не вращался вокруг. Найдите «ограничения» в инспекторе с выбранным игроком и поставьте галочку, чтобы заморозить вращение Z. Теперь нажмите play снова, и вы увидите, что ваш игрок теперь падает с неба до его бесконечной гибели.

Чтобы не допустить бесконечного падения нашего главного спрайта, нам нужно добавить коллайдер. По сути, это просто сплошной контур фигуры, который мы добавим к основному символу спрайта. Выделите главного персонажа спрайта, нажмите «Добавить компонент> Физика 2D> BoxCollider2D».

Теперь сделайте то же самое с платформой, которую вы создали ранее. Ваш главный спрайт-персонаж теперь должен «сталкиваться» с платформой и оставаться там.

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

Это особенно важно, если вы создаете 3D-бегун, что-то вроде склона, где вам нужно, чтобы камера постоянно оставалась позади основного игрового объекта (вашего главного персонажа-спрайта).

Теперь перейдите на панель Hierarchy и в списке GameObjects вы хотите перетащить камеру под основным персонажем спрайта (Player GameObject). Это сделает основной символ спрайта «родителем» камеры. Поэтому всякий раз, когда PlayerObject Player перемещается по экрану, камера должна следовать.

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

Щелкните правой кнопкой мыши папку «Активы» и создайте новую папку — назовите ее «Сценарии». Теперь щелкните правой кнопкой мыши на этой новой папке и нажмите «Создать> C # Script» и назовите его PlayerControls. Этот скрипт будет определять поведение нашего главного персонажа спрайта.

Когда вы дважды щелкнете по этому новому сценарию, он должен открыться в Visual Studio — в качестве альтернативы (и моих личных предпочтений) вы можете отредактировать его в чем-то вроде NotePad ++.

В файле сценария уже должен быть фрагмент кода «котла» — в основном это сценарий, который нужно оставить в покое или просто настроить в соответствии с вашими потребностями, и он сэкономит нам много времени. Итак, мы собираемся добавить новый объект.

Над линией void Start ():

общественности Rigidbody2D rb;

Следующий фрагмент кода, который нам нужно добавить, будет идти в Start () и используется для поиска твердого тела — в основном, мы инструктируем Unity, чтобы найти физику, которую мы прикрепили к GameObjects (нашему главному спрайтовому персонажу), и Start () будет выполняться при создании нового объекта или сценария.

Итак, затем найдите физический объект.

rb = GetComponent<Rigidbody2D> ();

И вы добавите эту строку внутри обновления ()

rb.velocity = новый Vector2 (3, rb.velocity.y);

Функция Update () постоянно обновляется, поэтому любой добавленный там код будет работать непрерывно (если объект не уничтожен). Итак, что мы сделали, это проинструктировали скрипт, что мы хотим, чтобы жесткое тело получило новый вектор, используя ту же скорость на оси Y (rb.velocity.y), но со скоростью 3 на горизонтальной оси. В будущем вы также можете использовать «FixedUpdate ()», который похож, но отличается, потому что там вы можете контролировать количество обновлений / обновлений скрипта.

Сохраните скрипт и вернитесь в Unity, затем щелкните по своему главному спрайту, чтобы выделить его. На панели «Инспектор» выберите «Добавить компонент> Сценарии» и добавьте только что сохраненный сценарий. Теперь, когда вы нажимаете кнопку «Воспроизвести», главный символ спрайта должен непрерывно двигаться к краю платформы.

Создание элементов управления вводом игрока

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

Снова откройте скрипт, и мы собираемся добавить этот дополнительный код:

если (Input.GetMouseButtonDown (0)) {
rb.velocity = новый Vector2 (rb.velocity.x, 5);
}

Вы собираетесь поместить это в метод Update (), и он в основном говорит Unity, что, когда игрок нажимает кнопку мыши (которая будет переводиться как нажатие экрана на Android), главный спрайт-персонаж «прыгнет» » в воздухе. Это потому, что мы добавили скорость на ось Y со значением 5 (конечно, более высокое значение будет означать более высокий скачок).

Если вы не слишком знакомы с кодированием, мы использовали Если заявление, потому что Если это в основном инструкция типа «делай или не делай» — буквально Если это произойдет, выполните эту команду. Так что, если игрок не щелкает мышью (или не нажимает на экран Android), то, очевидно, скрипт не запустится.

Нажмите кнопку «Play» и убедитесь, что она работает правильно, прежде чем продолжить.

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

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

В скрипте добавьте этот бит кода выше метод Update ():

общественности Преобразовать GroundCheck;
общественности Transform startPosition;
общественности поплавок groundCheckRadius;
общественности LayerMask whatIsGround;
частный BOOL на земле;
А затем добавьте эту следующую строку в метод обновления выше если заявление:
onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround);
И затем вы измените следующую строку, чтобы включить « на земле"
если (Input.GetMouseButtonDown (0)  на земле) {
Таким образом, весь наш скрипт должен выглядеть примерно так:
общественности учебный класс PlayerControls : MonoBehaviour
{
общественности Rigidbody2D rb;
общественности Преобразовать GroundCheck;
общественности Transform startPosition;
общественности поплавок groundCheckRadius;
общественности LayerMask whatIsGround;
частный BOOL на земле;
недействительным Начните() {
rb = GetComponent ();
}
недействительным Обновить() {
rb.velocity = новый Vector2 (3, rb.velocity.y);
onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround);
если (Input.GetMouseButtonDown (0)  на земле) {
rb.velocity = новый Vector2 (rb.velocity.x, 5);
}
}
}

Чтобы объяснить, что мы сделали, мы создали новую «трансформацию», которая означает положение в пространстве игрового мира. Мы установили его радиус и поручаем Unity проверить, перекрывается ли радиус с нашим «наземным» слоем — и поэтому, если наш радиус синхронизирован с «земным», наш персонаж должен быть в состоянии прыгать, и если мы Вы уже в воздухе от прыжка, мы не сможем снова прыгнуть. В принципе, onGround будет правдой если преобразование с именем groundCheck перекрывается с земным слоем. Надеюсь, это имеет смысл.

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

Теперь щелкните правой кнопкой мыши на Иерархии и создайте новый пустой объект, и перетащите его так, чтобы он находился под спрайтом главного персонажа в главном окне сцены — поместите этот пустой объект там, где мы хотим, чтобы этаж был обнаружен. Переименуйте объект в «Check Ground», а затем перетащите его под игровой объект игрока, как мы делали это ранее с камерой (чтобы создать отношения родитель-потомок между объектами). Теперь пустой объект будет следовать за спрайтом главного героя, как и камера, и будет постоянно проверять расстояние до пола.

Теперь выберите спрайт главного персонажа и перейдите на панель «Инспектор» — перетащите объект Check Ground в пространство, называемое groundCheck. Положение «transform» должно быть равно положению этого нового объекта, а там, где написано «Radius», сделать его равным 0,1.

Нам нужно определить слой земли. Просто выберите местность и в Инспекторе найдите кнопку «Слой: По умолчанию» (это выпадающий список) и выберите «Добавить слой».

Теперь выберите «Ground» в качестве слоя для нашей платформы и повторите это для любых других платформ в окне игры. Там, где написано «Что такое земля» на нашем спрайтовом объекте главного персонажа, также выберите слой земли.

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

Игра окончена при столкновении и меню игры

Итак, чтобы подвести итоги, мы хотим сделать следующее: A: сделать так, чтобы столкновение с препятствиями привело к окончанию игры, и B: создать экран меню «игра окончена» с помощью кнопки «повторить игру».

Что вы в основном хотите сделать, это:

  1. Добавить игрок возразить и назначить жесткое тело и коллайдер по вашему выбору.
  2. Добавить враг возразить и назначить жесткое тело и коллайдер по вашему выбору. (и необязательно, добавьте Тег «Враг» к этому)
  3. Создать новый C # скрипт и добавить его в качестве компонента игрок (или используйте любой скрипт, прикрепленный к плееру, нет необходимости создавать новый, если он у вас уже есть)
  4. Добавьте это в ваш скрипт:
аннулированию OnCollisionEnter (Столкновение Coll) {
Debug.log ( "Столкновение"); // Проверяем, регистрирует ли он даже столкновение, если оно работает, вы можете удалить эту строку
if (coll.gameobject.tag == "Enemy") {// видит, имеет ли объект, с которым столкнулся ваш игрок, тег "Enemy", его можно заменить на if (coll.gameobject.name == ... но использование тега - это простой способ сделать это.
// Добавить свой код здесь, например:
Application.LoadLevel ( "GameOver");
Debug.log ( "Рабочий"); // если работает, вы можете удалить эту строку.
}

Поиграйте с этим примером скрипта — с пробой и ошибкой вы получите именно то, что нам нужно.

Теперь, чтобы точно узнать, как создать «уровень» GameOver с помощью кнопки Play, см. Последний раздел руководства Appual «Как создать базовую платформу Unity Platform Pt. 2” .

Ссылка на основную публикацию
Adblock
detector