Выбираем программу для создания игры. Как создать игру на Андроид с нуля — осваиваем азы гейм девелопмента Конструктор 2d игр кряк

  • Разработка под Android ,
  • Unity
  • Введение

    Прежде всего, хочу сразу отметить, что я не являюсь профессиональным разработчиком. В этой статье я постараюсь изложить свой опыт создания игры «Feel Speed Racing». Данный материал, скорее всего не будет интересен тем, кто уже имеет большой опыт в разработке игр, но начинающим разработчикам, которые хоть немного работали с Unity думаю, будет интересно.

    Дизайн

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

    Разработка

    Игра состоит из 2-х сцен: главное меню и сама игровая сцена:

    Где «menu» это главное меню а «1» это игровая сцена.

    Главное меню


    Для создания столь незамысловатого меню нам потребуется элемент управления GUI, который является стандартным в Unity.

    В качестве фона я использовал спрайт с именем «background» заполненный серым цветом. Вы же можете выбрать что угодно.

    Содержимое скрипта:

    Using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Runtime.Serialization.Formatters.Binary; using System.IO; public class menu: MonoBehaviour { public GUIStyle mystyle; //объявляется для того чтобы изменять начертание GUI компонентов(шрифт, размер и.т.п.) string score; //переменная для хранения пройденной дистанции void Start () { StreamReader scoredata = new StreamReader (Application.persistentDataPath + "/score.gd"); //создание файловой переменной score = scoredata.ReadLine (); //чтение строки scoredata.Close (); //закрытие файловой переменной } void Update () { } void OnGUI(){ GUI.Box (new Rect (Screen.width*0.15f, Screen.height*0.8f, Screen.width*0.7f, Screen.height*0.1f), "MAX DISTANCE:"+score,mystyle); //создаем небольшое окошко для показа пройденного расстояния if (GUI.Button (new Rect (Screen.width*0.15f, Screen.height*0.25f, Screen.width*0.7f, Screen.height*0.1f), "Start game",mystyle)) //создаем кнопку для запуска игровой сцены { Application.LoadLevel(1);//Загрузка игровой сцены } if (GUI.Button (new Rect (Screen.width*0.15f, Screen.height*0.4f, Screen.width*0.7f, Screen.height*0.1f), "Exit",mystyle)) //создаем кнопку для выхода из игры { Application.Quit();//Выход из игры } } }
    В результате должно получиться примерно вот так:

    Шрифт, цвет и размер GUI элементов вы можете изменить с помощью MyStyle.

    Создание игровой сцены

    Основными на этой сцене элементами является дорога, автомобиль и шкала топлива.

    1. Дорога:

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

    Кидаем спрайт с дорогой на игровую сцену и подгоняем по размерам камеры.

    Затем добавляем как дочерние объекты внутрь дороги 4 блока с препятствиями, топливный бак и не забываем добавить к ним Box Collider 2D.Еще надо отметить Is Triger для пересечения с автомобилем.

    Теперь создаем скрипт moveroad.cs и вешаем его на нашу дорогу.

    Добавляем в него следующий код:

    Using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Runtime.Serialization.Formatters.Binary; using System.IO; public class moveroad: MonoBehaviour { public GUIStyle mystyle;//создание стиля int f,fuelst; float score=0,speed=-0.2f,data,fuelpos;// переменные для хранения расстояния, скорости и рекорда public GameObject block;// игровой объект для размещения блока public GameObject block1; public GameObject block2; public GameObject block3; public GameObject fuel; bool turbotriger=false; void Start () { StreamReader scoredata = new StreamReader (Application.persistentDataPath + "/score.gd"); data = float.Parse(scoredata.ReadLine ());//чтение с файла информации о рекорде scoredata.Close (); } void Update () { transform.Translate (new Vector3 (0f,speed,0f));//движение дороги с заданной выше скоростью score = score + (speed*-10);// подсчет расстояния if (transform.position.y < -19f) // если дорога уходит за пределы камеры то она "теле портируется" вверх { transform.position=new Vector3(0f,33.4f,0f);//новая позиция дороги block.transform.position=new Vector3(10.15f,block.transform.position.y,block.transform.position.z); block1.transform.position=new Vector3(8.42f,block1.transform.position.y,block1.transform.position.z); block2.transform.position=new Vector3(6.62f,block2.transform.position.y,block2.transform.position.z); block3.transform.position=new Vector3(4.95f,block3.transform.position.y,block3.transform.position.z); fuel.transform.position=new Vector3(11.86f,fuel.transform.position.y,fuel.transform.position.z); //скрытие за пределы камеры всех препятствий(блоков) f = Random.Range (0, 5);//случайное появление на дороге 1-го из 4-х блоков или канистры с бензином switch (f) { case 0:block.transform.position=new Vector3(2.40f,block.transform.position.y,block.transform.position.z); break; case 1:block1.transform.position=new Vector3(0.90f,block1.transform.position.y,block1.transform.position.z); break; case 2:block2.transform.position=new Vector3(-0.80f,block2.transform.position.y,block2.transform.position.z); break; case 3:block3.transform.position=new Vector3(-2.35f,block3.transform.position.y,block3.transform.position.z); break; case 4: fuelst=Random.Range(0,4); if(fuelst==0){fuelpos=2.40f;} if(fuelst==1){fuelpos=0.90f;} if(fuelst==2){fuelpos=-0.80f;} if(fuelst==3){fuelpos=-2.35f;} fuel.transform.position=new Vector3(fuelpos,fuel.transform.position.y,fuel.transform.position.z); break; } if (score>data)// если текущее пройденное расстояние превышает то что записано в файле рекорда то идет обновление данных { StreamWriter scoredata=new StreamWriter(Application.persistentDataPath + "/score.gd");//создаем файловую переменную для хранения пройденного расстояния scoredata.WriteLine(score);//записываем новое значение в файл scoredata.Close();//закрываем файловую переменную } } } void OnGUI(){ GUI.Box (new Rect (0, 0, Screen.width, Screen.height*0.05f), "Distance(m): " + score,mystyle);//создаем окно для подсчета расстояния } }

    Должно получиться примерно вот так. Если все так оставить то после того как дорога пройдет до конца то будет оставаться пустое пространство и так будет по кругу, дорога будет исчезать.

    Что бы решить эту проблему надо создать дубликат уже готовой дороги и немного изменить скрипт.

    Должно получиться вот так.

    2. Автомобиль:

    Кидаем спрайт автомобиля на сцену и устанавливаем его в любое место на дороге. Затем создаем скрипт carcontroller.cs и вешаем его на автомобиль.

    Содержимое carcontroller.cs:

    Using UnityEngine; using System.Collections; using UnityStandardAssets.CrossPlatformInput; public class carconroller: MonoBehaviour { void Start () { } public void Update () { if (transform.rotation.z !=0) //проверка столкновения коллайдера автомобиля и препятствия, при столкновении происходит загрузка меню { Application.LoadLevel (0); } } } public void OnGUI() { if (GUI.RepeatButton (new Rect (Screen.width*0.1f, Screen.height*0.9f, Screen.width*0.2f, Screen.height*0.08f), "L")) //создаем кнопку для движения влево { if (transform.position.x > -2.4f) { transform.Translate (new Vector3 (-0.05f, 0f, 0f)); } } if (GUI.RepeatButton (new Rect (Screen.width*0.7f, Screen.height*0.9f, Screen.width*0.2f, Screen.height*0.08f), "R")) //создаем кнопку для движения вправо { if (transform.position.x < 2.4f) { transform.Translate (new Vector3 (0.05f, 0f, 0f)); } } } }
    Теперь автомобиль может перемещаться.

    3.Шкала топлива:

    Для создания шкалы потребовалось 2 спрайта одинаковых размеров, но разных цветов (красный, зеленый). И сделать один из них дочерним (зеленый).

    Using UnityEngine; using System.Collections; public class fuelscript: MonoBehaviour { public GameObject fuelall; float mytimer=100f;// задание плавающего числа // Use this for initialization void Start () { } void Update () { mytimer = 100f; mytimer -= Time.deltaTime;//изменения числа с течением времени if (mytimer/mytimer==1f) //проверка на период времени в 1 секунду { fuelall.transform.position=new Vector3(fuelall.transform.position.x-0.0011f,fuelall.transform.position.y,fuelall.transform.position.z); fuelall.transform.localScale = new Vector3(fuelall.transform.localScale.x-0.001f, 1, 1); //выше идет сдвижение влево и уменьшение по ширине зеленой полосы для имитации шкалы } if (fuelall.transform.localScale.x < 0) //если шкала исчезла то загрузка идет загрузка главного меню { Application.LoadLevel(0); } } }

    Дорога у меня это road183 и ее дубликат road183(1). В ее дочерний объект fueltrack нужно добавить скрипт для обнаружения пересечения с автомобилем и восполнения топлива.

    Создаем скрипт triger.cs и вешаем его на fueltrack в обеих дорогах и отмечаем как Is Triger. Код:

    Using UnityEngine; using System.Collections; public class triger: MonoBehaviour { public GameObject fuel;//добавляем сюда greenfuel // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnTriggerEnter2D(Collider2D col) { if (col.gameObject.name == "playercar") //проверка пересечения автомобиля и объекта fuel { fuel.transform.position=new Vector3(0,fuel.transform.position.y,fuel.transform.position.z); fuel.transform.localScale = new Vector3(1, 1, 1); //восстановление у объекта fuel стандартных значений } } }

    Итог

    В момент выпуска игры на Google Play я особо не занимался ее продвижением ну и само собой закачек не набралось.

    В отсутствие профессионального художника, с иконкой пришлось работать самостоятельно:

    Мы перечислили десять программ для создания игр - какая из них лучше всего подойдет для новичков и какой из конструкторов станет оптимальным выбором для профессионалов?

    В роли 2D-конструктора рекомендуем остановиться на Construct 2 . Приложение базируется на качественном движке, не ограничивает вас в полете фантазии, позволяя создавать игры разных жанров и для разных платформ. Единственный нюанс - не забывайте, что для компиляции работ для мобильных устройств нужно будет приобрести лицензию.

    Наиболее многофункциональный и стабильный 3D-конструктор - Unity 3D .

    Начинающим игроделам рекомендуем приложения, «заточенных» под определенный жанр. В них больше готовых шаблонов и поэтому создать проект будет относительно проще. Для них советуем Visionaire Studio . Для опытных пользователей вердикт однозначен - Unity 3D . Программа базируется на современном движке и не имеет ограничений по жанру конечного продукта. Добавьте к этому фирменные технологии по обработке графики и встроенные аналитические инструменты - перед нами отличный конструктор профессионального уровня.



    Этот туториал предназначен в первую очередь для новичков в разработке под андроид, но может быть будет полезен и более опытным разработчикам. Тут рассказано как создать простейшую 2D игру на анроиде без использования каких-либо игровых движков. Для этого я использовал Android Studio, но можно использовать любую другую соответствующее настроенную среду разработки.

    Шаг 1. Придумываем идею игры
    Для примера возьмём довольно простую идею:

    Внизу экрана - космический корабль. Он может двигаться влево и вправо по нажатию соответствующих кнопок. Сверху вертикально вниз движутся астероиды. Они появляются по всей ширине экрана и двигаются с разной скоростью. Корабль должен уворачиваться от метеоритов как можно дольше. Если метеорит попадает в него - игра окончена.


    Шаг 2. Создаём проект
    В Android Studio в верхнем меню выбираем File > New > New Project.

    Тут вводим название приложения, домен и путь. Нажимаем Next.

    Тут можно ввести версию андроид. Также можно выбрать андроид часы и телевизор. Но я не уверен что наше приложение на всём этом будет работать. Так что лучше введите всё как на скриншоте. Нажимаем Next.

    Тут обязательно выбираем Empty Activity. И жмём Next.

    Тут оставляем всё как есть и жмём Finish. Итак проект создан. Переходим ко третьему шагу.

    Шаг 3. Добавляем картинки

    Шаг 5. Редактируем MainActivity класс

    В первую очередь в определение класса добавляем implements View.OnTouchListener. Определение класса теперь будет таким:

    Public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
    Добавим в класс нужные нам статические переменные (переменные класса):

    Public static boolean isLeftPressed = false; // нажата левая кнопка public static boolean isRightPressed = false; // нажата правая кнопка
    В процедуру protected void onCreate(Bundle savedInstanceState) {
    добавляем строки:

    GameView gameView = new GameView(this); // создаём gameView LinearLayout gameLayout = (LinearLayout) findViewById(R.id.gameLayout); // находим gameLayout gameLayout.addView(gameView); // и добавляем в него gameView Button leftButton = (Button) findViewById(R.id.leftButton); // находим кнопки Button rightButton = (Button) findViewById(R.id.rightButton); leftButton.setOnTouchListener(this); // и добавляем этот класс как слушателя (при нажатии сработает onTouch) rightButton.setOnTouchListener(this);
    Классы LinearLayout, Button и т.д. подсвечены красным потому что ещё не добавлены в Import.
    Чтобы добавить в Import и убрать красную подсветку нужно для каждого нажать Alt+Enter.
    GameView будет подсвечено красным потому-что этого класса ещё нет. Мы создадим его позже.

    Теперь добавляем процедуру:

    Public boolean onTouch(View button, MotionEvent motion) { switch(button.getId()) { // определяем какая кнопка case R.id.leftButton: switch (motion.getAction()) { // определяем нажата или отпущена case MotionEvent.ACTION_DOWN: isLeftPressed = true; break; case MotionEvent.ACTION_UP: isLeftPressed = false; break; } break; case R.id.rightButton: switch (motion.getAction()) { // определяем нажата или отпущена case MotionEvent.ACTION_DOWN: isRightPressed = true; break; case MotionEvent.ACTION_UP: isRightPressed = false; break; } break; } return true; }
    Если кто-то запутался? вот так в результате должен выглядеть MainActivity класс:

    Package com.spaceavoider.spaceavoider; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; public class MainActivity extends AppCompatActivity implements View.OnTouchListener { public static boolean isLeftPressed = false; // нажата левая кнопка public static boolean isRightPressed = false; // нажата правая кнопка @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GameView gameView = new GameView(this); // создаём gameView LinearLayout gameLayout = (LinearLayout) findViewById(R.id.gameLayout); // находим gameLayout gameLayout.addView(gameView); // и добавляем в него gameView Button leftButton = (Button) findViewById(R.id.leftButton); // находим кнопки Button rightButton = (Button) findViewById(R.id.rightButton); leftButton.setOnTouchListener(this); // и добавляем этот класс как слушателя (при нажатии сработает onTouch) rightButton.setOnTouchListener(this); } public boolean onTouch(View button, MotionEvent motion) { switch(button.getId()) { // определяем какая кнопка case R.id.leftButton: switch (motion.getAction()) { // определяем нажата или отпущена case MotionEvent.ACTION_DOWN: isLeftPressed = true; break; case MotionEvent.ACTION_UP: isLeftPressed = false; break; } break; case R.id.rightButton: switch (motion.getAction()) { // определяем нажата или отпущена case MotionEvent.ACTION_DOWN: isRightPressed = true; break; case MotionEvent.ACTION_UP: isRightPressed = false; break; } break; } return true; } }
    Итак, класс MainActivity готов! В нём инициирован ещё не созданный класс GameView. И когда нажата левая кнопка - статическая переменная isLeftPressed = true, а когда правая - isRightPressed = true. Это в общем то и всё что он делает.

    Для начала сделаем чтобы на экране отображался космический корабль, и чтобы он двигался по нажатию управляющих кнопок. Астероиды оставим на потом.

    Шаг 6. Создаём класс GameView

    Теперь наконец-то создадим тот самый недостающий класс GameView. Итак приступим. В определение класса добавим extends SurfaceView implements Runnable. Мобильные устройства имею разные разрешения экрана. Это может быть старенький маленький телефон с разрешением 480x800, или большой планшет 1800x2560. Для того чтобы игра выглядела на всех устройствах одинаково я поделил экран на 20 частей по горизонтали и 28 по вертикали. Полученную единицу измерения я назвал юнит. Можно выбрать и другие числа. Главное чтобы отношение между ними примерно сохранялось, иначе изображение будет вытянутым или сжатым.

    Public static int maxX = 20; // размер по горизонтали public static int maxY = 28; // размер по вертикали public static float unitW = 0; // пикселей в юните по горизонтали public static float unitH = 0; // пикселей в юните по вертикали
    unitW и unitW мы вычислим позже. Также нам понадобятся и другие переменные:

    Private boolean firstTime = true; private boolean gameRunning = true; private Ship ship; private Thread gameThread = null; private Paint paint; private Canvas canvas; private SurfaceHolder surfaceHolder;
    Конструктор будет таким:

    Public GameView(Context context) { super(context); //инициализируем обьекты для рисования surfaceHolder = getHolder(); paint = new Paint(); // инициализируем поток gameThread = new Thread(this); gameThread.start(); }
    Метод run() будет содержать бесконечный цикл. В начале цикла выполняется метод update()
    который будет вычислять новые координаты корабля. Потом метод draw() рисует корабль на экране. И в конце метод control() сделает паузу на 17 миллисекунд. Через 17 миллисекунд run() запустится снова. И так до пока переменная gameRunning == true. Вот эти методы:

    @Override public void run() { while (gameRunning) { update(); draw(); control(); } } private void update() { if(!firstTime) { ship.update(); } } private void draw() { if (surfaceHolder.getSurface().isValid()) { //проверяем валидный ли surface if(firstTime){ // инициализация при первом запуске firstTime = false; unitW = surfaceHolder.getSurfaceFrame().width()/maxX; // вычисляем число пикселей в юните unitH = surfaceHolder.getSurfaceFrame().height()/maxY; ship = new Ship(getContext()); // добавляем корабль } canvas = surfaceHolder.lockCanvas(); // закрываем canvas canvas.drawColor(Color.BLACK); // заполняем фон чёрным ship.drow(paint, canvas); // рисуем корабль surfaceHolder.unlockCanvasAndPost(canvas); // открываем canvas } } private void control() { // пауза на 17 миллисекунд try { gameThread.sleep(17); } catch (InterruptedException e) { e.printStackTrace(); } }
    Обратите внимание на инициализацию при первом запуске. Там мы вычисляем количество пикселей в юните и добавляем корабль. Корабль мы ещё не создали. Но прежде мы создадим его родительский класс.

    Шаг 7. Создаём класс SpaceBody

    Он будет родительским для класса Ship (космический корабль) и Asteroid (астероид). В нём будут содержаться все переменные и методы общие для этих двух классов. Добавляем переменные:

    Protected float x; // координаты protected float y; protected float size; // размер protected float speed; // скорость protected int bitmapId; // id картинки protected Bitmap bitmap; // картинка
    и методы

    Void init(Context context) { // сжимаем картинку до нужных размеров Bitmap cBitmap = BitmapFactory.decodeResource(context.getResources(), bitmapId); bitmap = Bitmap.createScaledBitmap(cBitmap, (int)(size * GameView.unitW), (int)(size * GameView.unitH), false); cBitmap.recycle(); } void update(){ // тут будут вычисляться новые координаты } void drow(Paint paint, Canvas canvas){ // рисуем картинку canvas.drawBitmap(bitmap, x*GameView.unitW, y*GameView.unitH, paint); }
    Шаг 8. Создаём класс Ship

    Теперь создадим класс Ship (космический корабль). Он наследует класс SpaceBody поэтому в определение класа добавим extends SpaceBody.

    Напишем конструктор:

    Public Ship(Context context) { bitmapId = R.drawable.ship; // определяем начальные параметры size = 5; x=7; y=GameView.maxY - size - 1; speed = (float) 0.2; init(context); // инициализируем корабль }
    и переопределим метод update()

    @Override public void update() { // перемещаем корабль в зависимости от нажатой кнопки if(MainActivity.isLeftPressed && x >= 0){ x -= speed; } if(MainActivity.isRightPressed && x <= GameView.maxX - 5){ x += speed; } }
    На этом космический корабль готов! Всё компилируем и запускаем. На экране должен появиться космический корабль. При нажатии на кнопки он должен двигаться вправо и влево. Теперь добавляем сыплющиеся сверху астероиды. При столкновении с кораблём игра заканчивается.

    Шаг 9. Создаём класс Asteroid

    Добавим класс Asteroid (астероид). Он тоже наследует класс SpaceBody поэтому в определение класса добавим extends SpaceBody.

    Добавим нужные нам переменные:

    Private int radius = 2; // радиус private float minSpeed = (float) 0.1; // минимальная скорость private float maxSpeed = (float) 0.5; // максимальная скорость
    Астероид должен появляться в случайной точке вверху экрана и лететь вниз с случайной скоростью. Для этого x и speed задаются при помощи генератора случайных чисел в его конструкторе.

    Public Asteroid(Context context) { Random random = new Random(); bitmapId = R.drawable.asteroid; y=0; x = random.nextInt(GameView.maxX) - radius; size = radius*2; speed = minSpeed + (maxSpeed - minSpeed) * random.nextFloat(); init(context); }
    Астероид должен двигаться с определённой скорость вертикально вниз. Поэтому в методе update() прибавляем к координате x скорость.

    @Override public void update() { y += speed; }
    Так же нам нужен будет метод определяющий столкнулся ли астероид с кораблём.

    Public boolean isCollision(float shipX, float shipY, float shipSize) { return !(((x+size) < shipX)||(x > (shipX+shipSize))||((y+size) < shipY)||(y > (shipY+shipSize))); }
    Рассмотрим его поподробнее. Для простоты считаем корабль и астероид квадратами. Тут я пошёл от противного. То есть определяю когда квадраты НЕ пересекаются.

    ((x+size) < shipX) - корабль слева от астероида.
    (x > (shipX+shipSize)) - корабль справа от астероида.
    ((y+size) < shipY) - корабль сверху астероида.
    (y > (shipY+shipSize)) - корабль снизу астероида.

    Между этими четырьмя выражениями стоит || (или). То есть если хоть одно выражение правдиво (а это значит что квадраты НЕ пересекаются) - результирующие тоже правдиво.

    Всё это выражение я инвертирую знаком!. В результате метод возвращает true когда квадраты пересекаются. Что нам и надо.

    Про определение пересечения более сложных фигур можно почитать .

    Шаг 10. Добавляем астероиды в GameView

    В GameView добавляем переменные:

    Private ArrayList asteroids = new ArrayList<>(); // тут будут харанится астероиды private final int ASTEROID_INTERVAL = 50; // время через которое появляются астероиды (в итерациях) private int currentTime = 0;
    также добавляем 2 метода:

    Private void checkCollision(){ // перебираем все астероиды и проверяем не касается ли один из них корабля for (Asteroid asteroid: asteroids) { if(asteroid.isCollision(ship.x, ship.y, ship.size)){ // игрок проиграл gameRunning = false; // останавливаем игру // TODO добавить анимацию взрыва } } } private void checkIfNewAsteroid(){ // каждые 50 итераций добавляем новый астероид if(currentTime >= ASTEROID_INTERVAL){ Asteroid asteroid = new Asteroid(getContext()); asteroids.add(asteroid); currentTime = 0; }else{ currentTime ++; } }
    И в методе run() добавляем вызовы этих методов перед вызовоом control().

    @Override public void run() { while (gameRunning) { update(); draw(); checkCollision(); checkIfNewAsteroid(); control(); } }
    Далее в методе update() добавляем цикл который перебирает все астероиды и вызывает у них метод update().

    Private void update() { if(!firstTime) { ship.update(); for (Asteroid asteroid: asteroids) { asteroid.update(); } } }
    Такой же цикл добавляем и в метод draw().

    Private void draw() { if (surfaceHolder.getSurface().isValid()) { //проверяем валидный ли surface if(firstTime){ // инициализация при первом запуске firstTime = false; unitW = surfaceHolder.getSurfaceFrame().width()/maxX; // вычисляем число пикселей в юните unitH = surfaceHolder.getSurfaceFrame().height()/maxY; ship = new Ship(getContext()); // добавляем корабль } canvas = surfaceHolder.lockCanvas(); // закрываем canvas canvas.drawColor(Color.BLACK); // заполняем фон чёрным ship.drow(paint, canvas); // рисуем корабль for(Asteroid asteroid: asteroids){ // рисуем астероиды asteroid.drow(paint, canvas); } surfaceHolder.unlockCanvasAndPost(canvas); // открываем canvas } }
    Вот и всё! Простейшая 2D игра готова. Компилируем, запускаем и смотрим что получилось!
    Если кто-то запутался или что-то не работает можно скачать исходник .

    Игра, конечно, примитивна. Но её можно усовершенствовать, добавив новые функции. В первую очередь следует реализовать удаление вылетевших за пределы экрана астероидов. Можно сделать чтобы корабль мог стрелять в астероиды, чтобы игра постепенно ускорялась, добавить таймер, таблицу рекордов и прочее. Если это будет вам интересно - напишу продолжение, где всё это опишу.

    На этом всё. Пишите отзывы, вопросы, интересующие вас темы для продолжения.

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

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

    ————————————-

    Defold Game Engine

    В этой статье я хочу познакомить вас с весьма молодым и бесплатным игровым движком для создания игр ААА класса - Defold Game Engine . Этот движок разработали Рагнар Свенссон и Кристиан Мюррэй в 2014 году и уже существует более 20 тыс. пользователей и больше 30 тыс. проектов на этом движке.

    Defold работает на MacOS/OS х, Windows и Linux (32 бит и 64 бит). С его помощью можно создать игру для 6 известных платформ iOS, Android ,HTML5, а также для MacOS/OS х, Windows и Linux.

    Defold - представляет собой полноценный 3D — движок, однако набор инструментов сделан для 2D, так что для создания 3D игр придется делать много тяжелой работы самостоятельно. Улучшение инструментов для создания 3D, разработчики планирую в ближайшем будущем. Все приложения и игровая логика в Defold осуществляется с помощью скриптов на языке lua. Lua - это легкий, динамичный язык, который является быстрым и очень мощным.

    ————————————-

    Amazon Lumberyard

    На игровом движке lumberyard можно создавать высококачественные игры класса ААА для PC, Xbox One и PlayStation 4, в скором будущем анонсирована поддержка устройств iOS и Android, с глубокой интеграцией в Amazon Web Services и привлечением фанатов в сервисе Twitch, так же движок Lumberyard можно будет использовать и в создании мультиплатформенных игр, так как он теперь имеет собственный сетевой движок.

    Lumberyard создан не «с нуля» он основан на коде движка CryEngine, в середине лета 2015 года компания Amazon приобрела широкую лицензию на движок CryEngine, но как утверждают разработчики в систему было заложено множество нововведений и возможностей такие как: инструмент для создания растений, инструмент для создания скелетной анимации, редактор частиц, шейдеры на основе физики, модульные геммы, облегчающие работу с природными эффектами и многое другое.

    ————————————-

    CryEngine 5

    CryEngine - игровой движок, созданный немецкой частной компанией Crytek в 2002 году и первоначально используемый в шутере от первого лица Far Cry . В середине марта компания предоставила миру новый, пятый CryEngine . Движок абсолютно бесплатен и воспользоваться им, может любой желающий, с помощью которогоможно создать игру, различного жанра и различной сложности.

    1. CryEngine Sandbox: редактор игры в реальном времени, предлагающий обратную связь «Что Вы видите, то Вы и ИГРАЕТЕ».
    2. Рендерер: интегрированные открытые (англ. outdoor ) и закрытые (англ. indoor ) локации без швов. Также рендерер поддерживает OpenGL и DirectX 8/9, Xbox с использованием последних аппаратных особенностей, PS2 и GameCube, а также Xbox 360.
    3. Физическая система: поддерживает инверсную кинематику персонажей, транспортные средства, твёрдые тела, жидкость, тряпичные куклы (англ. rag doll ), имитацию ткани и эффекты мягкого тела. Система объединена с игрой и инструментами.
    4. Инверсная кинематика персонажей и смешанная анимация: позволяет модели иметь множественные анимации для лучшей реалистичности.
    5. Система игрового искусственного интеллекта: включает командный интеллект и интеллект, определяемый скриптами. Возможность создания особенных врагов и их поведения, не касаясь кода C++.
    6. Интерактивная динамическая система музыки: музыкальные дорожки отвечают действиям игрока и ситуации и предлагают качество CD-диска с полным 5.1 звуковым окружением.

    ————————————-

    Construct Classic

    Construct Classic - небольшая программа, основной функцией которой является создание игр, 2d-анимационных роликов и мультфильмов. Данный конструктор создан по принципу WYSIWYG. Это значит, что вам не предстоит для создания собственного анимационного ролика подолгу сидеть за учебниками программирования. Все гораздо проще - добавили какой-то объект, включили для него анимацию и он начинает двигаться.

    Приложение Construct Classic является бесплатным. Более того, оно имеет открытый код, поэтому разработчики и специалисты в программировании могут настраивать его именно так, как пожелают нужным.

    Основные возможности Construct Classic:

    • Система редактирования событий и реакции на них посредством drag-n-drop.
    • Возможность использования огромного количества плагинов.
    • Программа создана на python, но дорабатывать ее можно на C++.
    • Есть возможность подключать пиксельные шейдеры на HLSL.
    • К программе можно подключать готовые исходные коды игр и приложений в формате САР.

    Изменения в последней версии

    • Физика: Исправлен баг версии r1, когда физические объекты созданные после старта, могли улететь за экран на высокой скорости.
    • Поведение: Исправлен баг. когда вы не могли спрыгнуть с платформы. Вызван исправлением бага «приземления в воздухе» в версии r1. Оба исправления теперь работают.
    • Установщик: Исправлена проблема с установкой в версии r1.

    ————————————-

    GameMaker: Studio

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

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

    Основные возможности GameMaker: Studio:

    • Кроссоплатформенность. Без особых трудностей можно создавать игры для Windows, Android, Linux.
    • Удобное рабочее окно программы, где нет ничего лишнего.
    • Возможность создания небольших двухмерных игр за считанные часы.
    • Готовые приложения можно интегрировать со Steam.
    • К приложению можно подключать готовые шаблоны, пошагово менять пути, объекты, звуки, фоны, скрипты и делать из этого всего интересные и необычные игры.
    • GameMaker классно подойдет для разработки игр и приложений на мобильных платформах.

    ————————————-

    Game Editor

    Game Editor - бесплатный конструктор для создания несложных двухмерных игр для операционных систем Windows, Mac, Linux, IOS, Android. Создаваемые игры представляет собой набор игровых объектов, каждому из которых задается реакция на определенное событие, что определяет их поведение в игре.

    За внешний вид объектов отвечают встроенные наборы анимаций. Есть возможность использования своих графических и аудио элементов. Помимо стандартных реакций объектов можно использовать и свои, написанные на специальном скриптовом языке Game Editor.

    Основные возможности Game Editor:

    • Простой и легкий для восприятия интерфейс.
    • Готовое приложение можно экспортировать на Windows, Linux, Android, IOS.
    • Созданную игру можно сразу протестировать, в любой момент остановить ее и снова начать редактировать.
    • Возможность использования графических файлов в форматах JPEG, GIF, PNG, BMP, PCX, TGA, XPM, XCF и TIF.
    • Возможность использования аудио файлов в форматах Ogg Vordis, MID, MOD, S3M, IT и ХМ.

    ————————————-

    3D Rad

    3D Rad - бесплатная программа для простого создания (без использования кода) различных ЗD-игр, интерактивных приложений и физических симуляций. Создание приложений в 3D Rad основывается на сочетании в различных комбинациях компонентов (объектов) и настройки взаимодействия между ними. Физика базируется на учете взаимодействия между объектами.

    В 3D Rad есть функция импорта моделей в создаваемый проект, большое количество примеров и образцов трехмерных объектов, а также возможность добавления звуковых эффектов в формате WAV или OGG. Работы сделаны с помощью 3D Rad можно распространять в виде отдельных программ или веб-приложений.

    Основные возможности 3D Rad:

    • Создание качественных ЗD-игр.
    • Реалистичная физика взаимодействия объектов.
    • Возможность импорта моделей.
    • Качественная обработка графики.
    • Возможность применения искусственного интеллекта.
    • Возможность использования мультиплеера.
    • Высококачественные аудиоэффекты и музыка
    • Возможность встраивания игр на веб-страницы.

    ————————————-

    Unreal Development Kit

    Unreal Development Kit (UDK) - мощный бесплатный движок и среда разработки с огромными возможностями по созданию игр для большого количества платформ и операционных систем. Он содержит все инструменты для создания ЗD-игр, продвинутых визуализаций и детальных симуляций.

    В состав Unreal Development Kit входит полностью интегрированная среда редактирования Unreal Editor, а также наборы готовых скриптов, спрайтов, текстур и звуков. Их можно комбинировать между собой, прописывать условия их взаимодействия, создавая при этом новые игры.

    Основные возможности Unreal Development Kit:

    • Возможность создания игр для Windows, Mac OS, Xbox, PlayStation 3, Wii, Android.
    • Простой и удобный высокоуровневый язык программирования UnrealScript.
    • Реалистический свет, тени и эффекты.
    • Продвинутая физика поведения и взаимодействия предметов.
    • Поддержка LAN и прямого подключения к IP.
    • Возможность тестирования создаваемого приложения на любом этапе его проектирования.
    • Многопоточный рендеринг создаваемых игр.
    • Готовые шаблоны игр.

    ————————————-

    NeoAxis 3D Engine

    NeoAxis 3D Engine Non-Commercial SDK - бесплатная версия мощного качественного приложения для создания трехмерных игр. По сути, оно является готовым движком со своими моделями, физикой, графикой и шаблонами. На основе NeoAxis можно делать как различные трехмерные одиночные модели, так и сложную визуализацию программного обеспечения, или даже создавать полнофункциональные 3D игры. Все зависит от таланта и целей разработчика.

    NeoAxis 3D Engine состоит из целого набора необходимых инструментов для реализации любой задумки разработчика. В нем в готовом виде уже есть 24 полноценные карты, некоторые из которых уже являют собой неплохие шутеры, где вам нужно стрелять по пришельцам, бегать по темным коридорам в поисках выхода и воевать с монстрами в деревне.

    Основные возможности NeoAxis 3D Engine:

    • Установленная программа состоит из ряда отдельных приложений - конфигуратора, демонстрационных возможностей программы, редактора карт и редактора основного кода.
    • Приложения, разработанные с помощью среды NeoAxis, могут быть запущены на Windows и Mac OS X
    • Весь спектр возможностей встроенного NVIDIA PhysX. Поддержка регдолл и транспортных средств.
    • Встроенная поддержка синхронизации по LAN и интернет.
    • Приложение поддерживает огромный перечень языков, английский, украинский, русский есть в наличии.
    • Редактор построен очень удобно - все ресурсы программы четко структурированы по отдельным тематическим папкам.
    • Программа состоит из готовых наборов объектов, карт и моделей, поэтому разобраться в ней сможет любой школьник.

    ————————————-

    Game Maker Lite

    Game Maker - один из самых известных конструкторов игр, ориентированный на создание двухмерных игр практически любых жанров и уровня сложности. Программа обладает встроенными редакторами спрайтов, объектов, сценариев и комнат, а также позволяет задавать последовательность действий с привязкой ко времени и маршруту движения.

    Game Maker отличается тем, что для создания игр в нем не нужно знания каких-либо языков программирования, хотя возможности использования скриптов также присутствует.

    Основные возможности Game Maker:

    • Простой и интуитивно понятный интерфейс программы.
    • Встроенные уроки по созданию первых игр.
    • Программирование с помощью drag-n-drop.
    • Бесплатная коллекция бесплатных изображений и звуков для игр.
    • Возможность создания простых ЗD-игр.
    • Встроенный язык программирования Game Maker Language (GML), позволяющий разрабатывать более функциональные и интересные игры.

    Внимание:

    Бесплатная версия Game Maker ограниченна в функциональности, а при запуске созданных в ней игр показывается логотип программы.

    ————————————-

    Unity 3D

    Unity 3D - мощная среда разработки, которая позволяет легко создать игру. Созданные с помощью Unity 3D игры и приложения работают в операционных системах Windows, OS X, Android. iOS, Linux, Blackberry а также на игровых приставках Wii, PlayStation 3 и Xbox 360. Приложения, созданные с помощью Unity, поддерживают DirectX и OpenGL.

    С помощью Unity 3D можно создавать видеоигры любых жанров. Разработчик может легко импортировать текстуры, модели и звуки. Для текстур поддерживаются все популярные форматы изображений. Создание скриптов осуществляется, в основном, с помощью JavaScript, хотя коды можно писать и на С#.

    Основные возможности Unity 3D:

    • Широкие возможности настройки.
    • Доступный и понятный интерфейс.
    • Сценарии на С#. JavaScript и Boo.
    • Полная интеграция игрового движка со средой разработки.
    • Поддержка перетягивания объектов в редакторе.
    • Поддержка импорта большого количества форматов.
    • Встроенная поддержка сети.
    • Поддержка физики ткани (PhysX Cloth).
    • Возможность дополнения функционала.
    • Инструменты для совместной разработки.
    • Blender - бесплатный пакет для создания трехмерной (3D) компьютерной графики, содержащий средства моделирования, анимации, рендеринга, постобработки видео, а также создания игр. Функций Blender вполне достаточно для работы как обычным пользователям, так и профессионалам. В программе есть все основные инструменты, используемые в профессиональных ЗD-редакторах.

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

      Основные возможности Blender:

      • Поддержка разнообразных геометрических примитивов (включая полигональные модели, систему быстрого моделирования в режиме SubSurf, кривые Безье, поверхности NURBS, метасферы, скульптурное моделирование и векторные шрифты).
      • Универсальные встроенные механизмы рендеринга и интеграция с внешним рендерером YafRay.
      • Инструменты анимации, среди которых инверсная кинематика, скелетная анимация и сеточная деформация, анимация по ключевым кадрам, нелинейная анимация, редактирование весовых коэффициентов вершин, ограничители, динамика мягких тел, динамика твердых тел, система волос на основе частиц и система частиц с поддержкой коллизий
      • Python используется как средство создания инструментов и прототипов, системы логики в играх, как средство импорта и экспорта файлов, автоматизации задач.
      • Базовые функции нелинейного редактирования и комбинирования видео.
      • Game Blender - подпроект Blender, предоставляющий интерактивные функции, такие как определение коллизий, движок динамики и программируемая логика.

      ————————————-

      Stencyl

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

      Пользователям, которые работали в Photoshop, понравится графический редактор Scene Designer, предназначенный для рисования игровых миров. Его инструментарий поразительно напоминает меню популярного фоторедактора.

      ————————————-

      CraftStudio

      Добавляйте и изменяйте объекты в 3D пространстве, прописывайте сценарии и правила, рисуйте анимации и эффекты. Авторы CraftStudio продумали всё, чтобы создание игр на PC с нуля в реальном времени было понятным и увлекательным. При этом все инструменты для моделирования и анимаций встроены в программу и понятно обозначены. То же самое можно сказать и о визуальном редакторе сценариев. Что самое интересное — вы не обнаружите проблем с совместимостью форматов или их конвертацией. Для более продвинутых пользователей предусмотрен текстовый редактор Lua Scripting.

    Хотите попробовать создать свою 2D игру? Перед вами лучшие инструменты для работы, даже если вы новичок в этом деле.

    Создавать игры сложно. Чем больше вы знаете об этом процессе, тем сильнее вы будете удивляться тому, что кто-то действительно доводит его до конца. Как говорил один из бывших авторов PC GamerТом Фрэнсис, описывая процесс программирования игры Gunpoint: «За время работы над игрой я пришёл к одному выводу: Моя игра – это настоящее безумие. Это пациент психлечебницы. Она полностью сошла с ума, и нужно быть готовым к тому, что все разумные доводы будут встречены невменяемым кричащим бредом».

    Легко впасть в ступор при одной мысли о масштабе работы, которую придётся проделать, разрабатывая дизайн и программируя свою игру, однако мы обратились к нескольким независимым разработчикам, и все они дали один и тот же совет новичкам: просто сделайте это. Погрузитесь в работу с головой, какой бы страшной она ни казалась. Для того, чтобы помочь вам сделать первый (пугающий, но, в конечном счёте, оправдывающий средства) шаг, мы подготовили список 2D-движков для начинающих игровых разработчиков. Надеемся, что он вкупе с рекомендациями опытных геймдизайнеров будет вам полезен.

    GameMaker Studio 2

    Стоимость лицензии : 100 долларов для ПК-версии; доступен бесплатный пробный период

    Подойдёт для : коротких 2D-платформеров и RPG; кроссплатформенных игр

    Примеры игр : Nidhogg, Hyper Light Drifter, Undertale, Risk of Rain

    Плюсы

    Марк Эссен, автор игр Nidhogg и Nidhogg 2, говорит, что GameMaker отлично подходит для новичков, так как система создания скриптов в нём максимально проста и понятна, к тому же на портале Yoyo Games можно найти собрание руководств и гайдов по данной теме. В интернете также немало дополнений для движка, позволяющих кастомизировать его для создания платформера или RPG с видом сверху.

    Алекс Престон, создавший Hyper Light Drifter, говорит, что коммьюнити движка GameMaker оказывает неоценимую помощь новичкам. Он отмечает, что начинающим разработчикам следует «…наладить связь с сообществом разработчиков и изучить все инструменты движка, чтобы добиться того, чего нужно – а для этого стоит обращаться за советами к бывалым разработчикам».

    Минусы

    Разумеется, у вас вряд ли получится сразу же создать игру, которую можно опубликовать в Steam. «Из-за того, что GameMaker проста в использовании, проекты очень часто получаются несбалансированными», говорит Эссен. «Мне нравится, что на начальных стадиях разработки можно быстро обрисовать скелет своей игры и сосредоточиться на её дизайне, однако в дальнейшем это может выйти боком, особенно если вы не придерживаетесь организационных стандартов!»

    Дункан Драммонд, автор всеми любимой Risk of Rain, тоже подчёркивает, что простота использования GameMaker может стать ночным кошмаром разработчика. «На движке можно быстро создать игру, но если проглядеть на ранних этапах своих ошибки, то позднее это выльется в увеличении затрат на игру», говорит он. Драммонд отмечает, что специфика работы с GameMaker сильно отличается от работы с другими движками, поэтому если в дальнейшем вы планируете перейти на Unity или любой другой движок, то вам, скорее всего, лучше поискать иной вариант.

    «Не забывайте удалять свои старые работы! Чем чаще вы начинаете игру с нуля, тем опытнее по части геймдизайна вы становитесь», - Марк Эссен, Nidhogg

    «Просто начните! Запустите движок, почитайте руководства и приступайте к работе, даже если у вас толком не получается. Чем больше ошибок совершите, тем больше уроков вы вынесете», - Алекс Престон, Hyper Light Drifter

    «Не бойтесь начать! Это интересный и относительно простой способ разработки, и тратит он разве что ваше время», - Дункан Драммонд, Risk of Rain

    Unity

    Стоимость лицензии : Бесплатный стартовый пакет, 35 долларов в месяц за пакет Unity Plus, 125 долларов в месяц за пакет Unity Pro

    Подойдёт для : практически любой инди-игры

    Примеры игр : , Galak-Z, West of Loathing, Cuphead

    Unity – это одна из главных платформ для разработки популярных инди-игр, и хотя она имеет впечатляющие 3D-возможности, на ней было создано немало потрясающих 2D-игр. Unity более сложен в освоении, чем остальные движки из данного списка, однако обширное сообщество разработчиков и огромное количество обучающих гайдов, которые можно найти в сети, помогут вам приступить к работе.

    На официальном сайте Unity можно найти и специальные дополнения, позволяющие кастомизировать движок для разработки 2D-игр. К примеру, бесплатное расширение 2D Platformer или инструменты вроде Corgi Engine и Rex Engine, предлагающие игровую физику, управление и особенности, заточенные специально под платформеры.

    Мы поговорили с Джозефом Хамфри из inkle и Виктором Томпсоном из Asymmetric Publications, которые рассказали о своём опыте работы с Unity.

    Плюсы

    Томпсон, ранее создававший игры классическим способом, быстро стал поклонником Unity – движка, на котором была создана недавно вышедшая под названием West of Loathing. «После 2-3 лет работы с движком больше всего меня радует то, насколько быстро можно совмещать концепты и прототипы», говорит он. «Я использовал множество различных движков – как небольшие для своих собственных проектов, так и крупные для разработки AAA-игр, однако Unity – это пока что лучший из всех движков, что я видел, так как он позволяет мне быть наиболее продуктивным».

    Минусы

    Впрочем, если вы собираетесь использовать одну платформу для всех своих разработок, вы столкнётесь с определёнными ограничениями. Если вы найдёте баг в Unity, вам придётся ждать, пока авторы движка его исправят, и это не всегда быстро. «Несмотря на то, что представители движка заявляют, что исправление багов является их важнейшим приоритетом, разработчики компании inkle по-прежнему считают стабильность дебаггинга одной из главных проблем движка», говорит Хамфри.

    «Прежде всего, постарайтесь создать в голове конечный образ игры и сфокусируйтесь на нём – вашей конечной целью должен быть не опыт, полученный в процессе, а готовый продукт. Конечно, полезно вынести пару уроков из неудач, но, как мне кажется, намного важнее задаться целью, изучить всё, что необходимо для достижения этой цели, и в итоге реализовать задуманное», - Виктор Томпсон, West of Loathing

    Ren’Py

    Стоимость лицензии : Бесплатно

    Подойдёт для : 2D визуальных новелл, симуляторов

    Совместим с : Python

    Примеры игр : Long Live the Queen, Analogue: A Hate Story

    Ren’Py – это простой в освоении движок с открытым исходным кодом. И хотя он требует начальных навыков программирования, на самых ранних этапах вам понадобится лишь умение работать с текстовым редактором и приложениями по редактированию фотографий. Это удобная стартовая площадка для тех, кто в будущем планирует изучить язык программирования Python.

    Плюсы

    «Открытый исходный код Ren’Py и его кроссплатформенность дают множество возможностей для всех пользователей движка», говорит Бенсли. «Я также считаю плюсом тот факт, что движок рассчитан на новичков, но при этом требует вносить правки в программный код игры. Это лучше, чем графический drag-and-drop интерфейс, так как это показывает, что в программировании нет ничего страшного».
    Ren’Py подойдёт вам в том случае, если вас пугает сама перспектива создания игры с нуля:

    «Одно из важнейших препятствий, с которым сталкивается большинство людей, ранее не работавших над созданием игр, заключается в их уверенности в том, что программирование – это нечто “слишком сложное”, а потому это попросту им не по силам. А данный движок позволяет быстро и успешно создать простую игру, что придаёт уверенности начинающим разработчикам, даже если они и не планируют в будущем выпускать одни лишь визуальные новеллы. Как только ты создаёшь нечто, во что могут играть другие, пусть даже простенький проект, ты уже не ставишь под сомнение свои способности».

    Минусы

    Ren’Py немного ограничен по части графических и геймплейных функций. Если вы намерены создавать игры с 3D, Live2D, системой повреждений и другими особенностями, то вам стоит поискать другие варианты.

    ink

    Стоимость лицензии : Бесплатно

    Подойдёт для : текстовых приключенческих игр

    Совестим с : Unity, C#, HTML

    Примеры игр : 80 Days, Sorcery!

    Ink – это хорошее бесплатное дополнение для Unity, если вы хотите разбавить свою игру диалоговыми ветками и расширенным повествованием. Его легко освоить, в нём не используется продвинутый код, и он бесшовно интегрируется с Unity. Как говорит создатель ink Джозеф Хамфри, данный движок является «промежуточным» - после создания скрипта в ink его можно перенести в более крупную игру на движке Unity. Тем не менее редактор Inky Editor позволяет также создавать веб-игры.

    Плюсы

    Создание масштабного сценария со множеством диалоговых веток может быстро превратиться в запутанную кашу, поэтому ink поможет вам не потеряться в процессе. «Авторы игр могут использовать инструменты движка для создания диалогов и текста в формате удобного интерактивного сценария с ключевыми метками», говорит Хамфри. «Затем движок ink, запущенный внутри Unity, сможет читать эти сценарии и выводить текст на экраны уже в самой игре».

    Открытый исходный код играет важную роль в разработке амбициозных проектов. Хамфри отмечает, что «создаваемый на движке ink текст необязательно должен показываться в виде текста. К примеру, в игре Heaven’s Vault движок ink создаёт динамичный сценарий, который интерпретируется самой игрой в виде интерактивной графической новеллы с приключенческими элементами».

    ink также является отличным инструментом для тех, кто больше заинтересован в написании сценариев для игр, а не о чистом программировании. «…Количество сценаристов, использующих ink для написания интерактивных историй, постоянно растёт», добавляет Хамфри. «Where The Water Tastes Like Wine – это один из таких примеров. Её создали авторы игры Gone Home при помощи движка ink. Над игрой работали такие известные сценаристы, как Ли Александр, Эмили Шорт и Кара Эллисон. Поэтому если вам нравится сочинять сценарии и вы интересуетесь разработкой игр, то ink может стать отличной площадкой для начала».

    Минусы

    ink лучше всего использовать для игр, разрабатываемых на движке Unity. Хамфри говорит, что «ink не является альтернативой Unity - это скорее дополнение. Более того, ink – это единственный инструмент для создания интерактивных сценариев, который был намеренно создан в виде промежуточного звена».

    «У меня есть один-единственный совет – просто попытайтесь создать демо-игру. Если же вы хотите заполнить своё портфолио, в котором указаны примеры того, в чём вы хороши, то самое время начать заполнять его. Создавайте эти примеры!»

    В начале 2017 года мы писали о внезапном появлении RPG Maker на площадке Steam и о том, как движок стремительно набирает популярность среди начинающих инди-разработчиков. Но есть и другие инструменты, на которые стоит обратить внимание:

    HaxeFlixel с открытым исходным кодом и кроссплатформенностью.

    Stencyl – инструмент для создания игр без использования программирования.