html текст
All interests
  • All interests
  • Design
  • Food
  • Gadgets
  • Humor
  • News
  • Photo
  • Travel
  • Video
Click to see the next recommended page
Like it
Don't like
Add to Favorites

Как сделать 2.5D игру с помощью Unity (Часть 1)

2.5D – это в целом 3D игра, но геймплей происходит в 2D плоскости. Как хорошие примеры можно отметить  Super Mario Brothers WiiLittle Big PlanetPaper Monsters. Отличный способ создать 2.5D игру (и 3D тоже) это использовать популярный, простой и доступный инструмент для разработки игр под названием Unity.
Вы узнаете как сделать простую игру с нуля и уясните много нового. В этой игре вам предстоит взять под контроль небольшой (но хорошо вооружённый) самолет, который будет бомбить акул, защищая прекрасных рыб-клоунов. Unity не использует язык Objective-C, так что опыт работы с этим языком вам не потребуется. Однако общее понимание OO (Объектно-ориентировынных) языков станет несомненным плюсом – в идеале это C #, Java или ActionScript. Имейте ввиду, что этот урок для пользователей Mac, пользователи Windows могут столкнуться с некоторыми проблемами.
Прежде всего, необходимо установить редактор Unity. Если у вас все уже установлено, то просто пропустите этот шаг. Скачайте Unity с этой странички. Теперь у вас есть файл с расширением DMG, смонтируйте его и начните установку. После установке у вас появится дирректория ‘/Applications/Unity’ где будут находиться файлы. Запустите Unity и нажмите кнопку ‘Register’ (не переживайте, есть бесплатный период). Выбирите ‘Internet activation’, нажмите ‘Next’ и заполните предложенную форму.
Закройте окно ‘Welcome to Unity’, перейдите в меню File\New Project, выбирите папку где-нибудь у сеья на диске, назовите проект SharkBomber. Убедитесь, что все пакеты выбраны и нажмите кнопку Create Project. Теперь перед вами чистая страница. Достаточно много кнопок, не так ли? Не волнуйтесь, далее мы все подробно рассмотрим.
Давайте произведем некоторую дополнительную настройку, что бы добиться нужной конфигурации. В правом верхнем углу программы найдите менюшку - выбирите “Tall”. Это позволит изменить окно (по умолчанию было “Wide”). Теперь найдите вкладку в верхнем левом углу (чуть ниже панели инструментов) под названием “Game”, перетащите ее в нижнюю часть окна, дождитесь индикации о том, что вкладка привязана и бросьте ее там.
Ок – готово. Проверим. В панели Project откройте папку Scenes, здесь должна быть ваша сцена с именем LevelScenes. Теперь мы готовы запустить игру – нажмите кнопку Play. Пока ничего интересного, но ваша игра работает в панеле Game. Не забудьте остановить игру снова нажав кнопку Play (это важно).
Одна из особенностей Unity состоит в том, что движок можно использовать для создания игр для iPhone, Mac, Wii и других платформ. В этом уроке мы будем создавать игру для iPhone, поэтому необходимо кое что настроить. Из меню перейдите в “File/Build Settings” и кликните “Add current”, чтобы добавить сцену в проект. Вы увидите, что сцена получит индекс “0”. Это значит, что это будет первая сцена когда игра будет запущена. Это как раз то, что нам нужно. Из списка Platform выбирите iOS и нажмите кнопку “Switch platform”. Теперь логотип Unity появится в строке iOS. Пока это все настройки, что нам нужны. Кликните кнопку “Player settings”. Вы заметите, что “Player settings” откроются в Инспекторе. Здесь нам так же нужно внести пару изменений. Убедитесь, что в “Pre platform” выбран iPhone.
У вас может появиться желание взглянуть на код, но это на самом деле шаблон (boilerplate), который загружает “моно фреймворк” (mono framework), включая несколько коротких dll файлов и некоторые другие элементы/ресурсы, так что изучать особо нечего. Убедитесь, что iOS устройство подключено и перейдите в “Unity-iPhone”.
Во-первых, давайте настоим основную камеру сцены. Выберите “Main Camera” в “Hierarchy”, в инспекторе найдите “Projection” и установите на “Orthographic”, “Size” установите на 10, в “Clipping Planes” установите “Near” на 0.5 и “Far” на 22. Теперь около камеры внутри сцены вы увидите поле – это границы вашего мира видимые на экране.
Обратите внимание, мы установили “Projection” на значение “Orthographic” – это значит, что координаты глубины не будут влиять на то как предметы выглядят на экране – это самый подходящий вариант для создания 2D игры. Пока вы не привыкните к Unity давайте работать в таком режиме, затем мы переключимся в 3D проекцию.
Щелкните правой кнопкой мыши в панели “Project” и снова создайте папку (Create/Folder), новую папку назовите “Textures”. Затем скачайте фоновое изображение, которое я приготовил, и сохраните где-нибудь на диске. Перетащите скачанное изображение из Finder’а в только что созданную папку Textures.
Выбирите “Plane” в панели “Hierarchy”, в инспекторе в верхнем текстовом поле где сказано “Plane” введите “Background”. Перетащите текстуру фона из панели Project и бросьте на объект “Background” в “Hierarchy”. Установите позицию плоскости в инспекторе на [4, 0, 20], Rotation (поворот) на [90, 180, 0] и Scale (Масштаб) на [10, 1, 5]. Это, как вы видите, поворачивает и масштабирует плоскость в панели “Scene” перед камерой. Таким образом, камера рассматривает плоскость как фон игры.
Теперь, чтобы видеть, что происходит на сцене нам понадобится свет (прямо как в жизни). Идем в “GameObject\Create other\Directional Light” – это обеспечит сцену некоторым светом. Выбирите Directional Light в панели “Hierarchy” и установите координаты позиции на значение [0, 0, 0].
Далее выбирите объект “Player” в “Hierarchy”, взгляните в инспектор – “Mesh Filter” – фильтр, который устанавливает геометрию вашего объекта (сейчас установлено на значение cube). В строке этого фильтра найдите (справа) маленький круг с точкой в середине и нажмите на него. Появится «попап» окно, где нужно кликнуть на модель самолета и это изменит геометрию объекта на самолет.
Теперь одна немаловажная деталь – самолет выглядит немного неверно. Я не эксперт в 3D, но я нашел как в Unity это можно поправить. Выберите файл “airplane_linen_mesh” в панели “Project”, затем в инспекторе найдите “Normals” и выбирите “Calculate”, затем прокрутите вниз и нажмите кнопку применить.
Как мы отмечали ранее, с помощью Unity можно разрабатывать игры для Wii, iPhone, Mac и т.д. Так как Unity это универсальный инструмент, он нуждается в некоем промежуточном слое, который позволит программировать игру лишь однажды, то есть каждая новая сборка под другую платформу приводит код в нужный вид.
Теперь правый клик в панели “Project”, создайте новую папку и дайте ей имя “Class”. Правый клик на новой папке, перейдите в “Create/C Sharp Script” и переименуйте созданный файл в “PlayerClass”. Снова правый клик в панели “Project” и выберите “Sync MonoDevelop Project”, откроется MonoDevelop IDE – это IDE (Integrated Development Environment) в котором мы будем программировать на C#.
Строка “using” включает в себя библиотеки и фреймворки. UnityEngine – это библиотека, которая дает вам доступ к таким штукам как акселерометр iPhone, ввод с клавиатуры и т.д. Вы определяете ваш новый класс и наследуете его от MonoBehaviour – это дает вас много примочек бесплатно: вы можете переопределить длинный список методов, которые вызываются, когда события обрабатываются.
Теперь ненадолго давайте вернемся в Unity. Мы хотим заставить самолет лететь над морем в правую сторону экрана и снова вылетать слева. Давайте определим с какой позиции самолет будет двигаться с левой стороны. В панели “Scene” в верхнем правом углу вы увидите инструмент для ориентации. Кликните на ручку с буквой X (это своего рода конус, но я назвал его ручкой):
Остановитесь, когда самолет покинет видимую зону и посмотрите на его позицию в инспекторе. Ось X должна быть примерно со значением 17.25 – это правая граница экрана. Вы можете переместить самолет в левую часть сцены и вы увидите, что ее граница около -17.25, поэтому мы будем использовать значения 18 и -18, чтобы самолет летал вокруг. Верните самолет на прежнее место.
//just after class declaration line
public float speed;

//inside the Update method
if (transform.position.x > 18) {
//get new speed
speed = Random.Range(8f,12f);
transform.position = new Vector3( -18f, transform.position.y, transform.position.z );
}
transform.Translate(0, 0, speed * Time.deltaTime);
Мы не можем просто переместить самолет установив количество вызовов к Update, т.к. никто не знает сколько вызовов будет в секунду. Вместо этого мы определяем скорость в секунду и делим ее на количество времени прошедшего с момента последнего вызова метода Update (Time.deltaTime). Таким образом, объект всегда перемещаяется с одинаковой скоростью независимо от текущей частоты кадров. Вызов “Translate” дает три значения – трансформацию, которую он должен сделать на каждой оси. Вы, вероятно, заметили, что мы перемещаем самолет по оси Z (3-й параметр) – мы должны так сделать, потому что мы поворачиваем самолет на сцене, так что изменение оси Z перемещает его вправо от перспективы игрока
Посмотрите на оператор “if” – мы проверяем, больше ли transform.position.x чем 18 (помните почему?) и если так, мы устанавливаем позицию самолета в те же самые координаты, но “-18” на оси X. Мы используем новый Vector3 (x, y, z), чтобы установить позицию. Мы будем использовать много этих векторов для всего позиционирования. Так же вы заметили, что мы установили случайное значение скорости от 8 до 12 – это должно сделать перемещение самолета более беспорядочным. Теперь мы готовы увидеть перемещение самолета.
Переключитесь обратно в Unity. Берите “PlayerClass” из панели “Project” и тащите в “Player” в панели “Hierarchy”. Таким образом мы прикрепили класс к объекту игры. Посмотрите в инспектор. Вы увидите новую вкладку под названием «Player Class (Script)”, установите там значение 12. Ну что, готовы? Нажимайте кнопку “Run”. Ура! Вы увидите как в обеих панелях “Scene” и “Game” начал лететь самолет залетая в правую сторону, а затем выходя с левой. Так же обратите внимание, что в инспекторе значение X меняется – там показано, где самолет находится в каждый конкретный момент. Кроме того, скорость самолета меняется, всякий раз, когда он делает круг.
Как только закончите наслаждаться полетом не забудьте остановить игру. Теперь, сделаем самолету грозного противника – акулу. Вы уже знакомы с основами, поэтому все пойдет быстрее, так как пока мы не будем делать ничего нового. Нужен перерыв? Мы прошли достаточно много материала. Так что если вы устали, сделайте перерыв. Просто сохраните проект и вернитесь к нему позже. Помните, что при новом открытии Unity открывается пустая сцена. Чтобы загрузить сцену, дважды кликните на “LevelScene” в панели “Project”.
Идем дальше и скачиваем/разархивируем модель акулы. Как и раньше, перемещаем файл “shark.obj” в панель “Project” в папку “Models”, а файл “sharktexture.bmp кладем в “Models/Textures”. В меню выберите “GameObject/Create other/Capsule” и переименуйте объект “Capsule” в “Shark”. В инспекторе в строке “Mesh Filter” нажмите на круг с точкой внутри и в открывшемся окне дважды нажмите на модель акулы. Теперь вы должны увидеть модель акулы в панелях “Scene” и “Game”.
Теперь нам нужно, чтобы акула взаимодействовала с бомбами. Нужно чтобы Collider (коллайдер) акулы более или менее подходил к геометрии акулы. Как видите внутри сцены к акуле прикреплена зеленая капсула (capsule). Это коллайдер акулы. Давайте приведем его в нужный вид. В инспекторе найдите “Capsule Collider” и установите следующие значения: Radius – 1, Height – 5, Direction – “X-Axis”, Center - [0, 0, 0]. Теперь вы видите что capsule collider повернулся и более или менее подходит к телу акулы.
using UnityEngine;
using System.Collections;

public class FishClass : MonoBehaviour {

public float speed = 6f;

// Update is called once per frame
void Update () {
if (transform.position.x < -30 || transform.position.x > 30) {
//turn around
transform.Rotate(new Vector3(0,180,0));
transform.Translate( new Vector3(-10, -transform.position.y + Random.Range(-4,-1),0) );

//get new speed
speed = Random.Range(6f,10f);
}
transform.Translate( new Vector3(-speed*Time.deltaTime,0,0) );
}
}
Вызов к Rotate(new Vector3(x,y,z)) вращает объект вокруг по заданным значениям (value), а transform.Translate(new Vector3(x,y,z)) вы уже хорошо знаете. Очень просто! Переключитесь обратно в Unity и перетащите “FishClass” на объект “Shark” в панели “Hierarchy”. Теперь нажимайте Play. Вы увидите как огромная акула движется взад и вперед ожидая бомбардировки.

public class BombClass : MonoBehaviour {
private float ySpeed = -4f;

// Update is called once per frame
void Update () {
transform.Translate( new Vector3(0f, ySpeed*Time.deltaTime, 0f) );
if (transform.position.y < -11) {
Destroy(this.gameObject);
}
}
}
Класс – у нас создаются бомбы, когда игрок касается экрана, затем она падает вниз и, когда выходит за пределы экрана, самоуничтожается. Давайте попробуем! Вернитесь в Unity и на нажмите Play – теперь, если вы кликните в панели “Game” вы увидите как создастся бомба в том месте, где сейчас находится самолет. Нажмите несколько раз – появится много бомб. Вы должны так же слышать звук, который мы добавили ранее. Но бомбы не падают вниз! Почему? Можете сами выяснить в чем проблема? Ответ после перерыва.

Я надеюсь вы уже догадались, но если нет, вот в чем проблема: вы еще не прицепили BombClass к Bomb Prefab – вот почему бомбы не падают. Перетащите “BombClass” из папки “Class” в панели “Project” на “BombPrefab” в папке “Prefab” в той же панели. Проверьте инспектор, если вы видите сроку Bomb Class Script, то все верно. Теперь нажмите Play еще раз. Так-то лучше!

Читать дальше
Twitter
Одноклассники
Мой Мир

материал с dajver.blogspot.ru

2

      Add

      You can create thematic collections and keep, for instance, all recipes in one place so you will never lose them.

      No images found
      Previous Next 0 / 0
      500
      • Advertisement
      • Animals
      • Architecture
      • Art
      • Auto
      • Aviation
      • Books
      • Cartoons
      • Celebrities
      • Children
      • Culture
      • Design
      • Economics
      • Education
      • Entertainment
      • Fashion
      • Fitness
      • Food
      • Gadgets
      • Games
      • Health
      • History
      • Hobby
      • Humor
      • Interior
      • Moto
      • Movies
      • Music
      • Nature
      • News
      • Photo
      • Pictures
      • Politics
      • Psychology
      • Science
      • Society
      • Sport
      • Technology
      • Travel
      • Video
      • Weapons
      • Web
      • Work
        Submit
        Valid formats are JPG, PNG, GIF.
        Not more than 5 Мb, please.
        30
        surfingbird.ru/site/
        RSS format guidelines
        500
        • Advertisement
        • Animals
        • Architecture
        • Art
        • Auto
        • Aviation
        • Books
        • Cartoons
        • Celebrities
        • Children
        • Culture
        • Design
        • Economics
        • Education
        • Entertainment
        • Fashion
        • Fitness
        • Food
        • Gadgets
        • Games
        • Health
        • History
        • Hobby
        • Humor
        • Interior
        • Moto
        • Movies
        • Music
        • Nature
        • News
        • Photo
        • Pictures
        • Politics
        • Psychology
        • Science
        • Society
        • Sport
        • Technology
        • Travel
        • Video
        • Weapons
        • Web
        • Work

          Submit

          Thank you! Wait for moderation.

          Тебе это не нравится?

          You can block the domain, tag, user or channel, and we'll stop recommend it to you. You can always unblock them in your settings.

          • dajver
          • домен blogspot.ru
          • домен dajver.blogspot.ru

          Get a link

          Спасибо, твоя жалоба принята.

          Log on to Surfingbird

          Recover
          Sign up

          or

          Welcome to Surfingbird.com!

          You'll find thousands of interesting pages, photos, and videos inside.
          Join!

          • Personal
            recommendations

          • Stash
            interesting and useful stuff

          • Anywhere,
            anytime

          Do we already know you? Login or restore the password.

          Close

          Add to collection

             

            Facebook

            Ваш профиль на рассмотрении, обновите страницу через несколько секунд

            Facebook

            К сожалению, вы не попадаете под условия акции