Найти тему

Написание кода для игры на Android

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

Но для начала нужно настроить физику наших объектов. Это делается через движок. Нужно выбрать объекты, которые будут реагировать на столкновения. Это платформы и наш игровой персонаж. Выбираем платформу и в инспекторе внизу нажимаем кнопку “Add Component”. И выбираем “Box Collider 2D”.

И проделываем это со всеми платформами. Это нужно для того, чтобы задать физику нашему объекту, что при столкновении другие объекты, имеющие свойство “Box Collider” отталкивались от него. Также добавляем “Box Collider 2D” на нашего персонажа. Но для персонажа нужно добавить еще одно свойство “RigitBody 2D”. Это нужно, чтобы на персонажа действовала физика.

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

Откроем его. В созданном скрипте у нас присутствуют два метода Start и Update. Метод Start срабатывает при старте скрипта. Метод Update срабатывает при обновлении несколько раз в секунду.

// Start is called before the first frame update

void Start()

{

}

// Update is called once per frame

void Update()

{

}

Для начала нам нужно разобраться с управлением. Создадим новый метод Controller.

private Rigidbody2D _rb;

void Start()

{

_rb = GetComponent<Rigidbody2D>();

}

// Update is called once per frame

void Update()

{

Controller();

}

public voidController()

{

if (Input.GetKeyDown(KeyCode.D))

{

_rb.AddForce(Vector3.right*250);

}

if (Input.GetKeyDown(KeyCode.W))

{

_rb.AddForce(Vector3.up * 250);

}

if (Input.GetKeyDown(KeyCode.A))

{

_rb.AddForce(Vector3.left * 250);

}

}

}

Вот такой у нас получился код движения. Давайте разберем по порядку. В методе Start мы написали такую строчку: _rb = GetComponent<Rigidbody2D>(), это означет, что мы в скрипте переменной _rbприсваиваем компонент RigitBody из сцены. Далее в методе Update мы вызываем метод Controller каждый кадр. Итак, в методе Controller эта строчка: if (Input.GetKeyDown(KeyCode.D)) означает, что мы проверяем, нажата ли клавиша D, если нажата, то мы прикладываем силу направленную вправо: _rb.AddForce(Vector3.right*250). И так с прыжком и движением влево.(Не забудьте перенести скрипт на вашего персонажа в иерархии)

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

Для начала нужно добавить тег “Ground” для наших платформ.

В итоге код будет выглядеть так:
using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Hero : MonoBehaviour

{

// Start is called before the first frame update

private Rigidbody2D _rb;

private bool_isGrounded;

void Start()

{

_rb = GetComponent<Rigidbody2D>();

}

// Update is called once per frame

void Update()

{

Controller();

}

public void Controller()

{

if (Input.GetKeyDown(KeyCode.D))

{

_rb.AddForce(Vector3.right*250);

}

if (_isGrounded)

{

if (Input.GetKeyDown(KeyCode.W))

{

_rb.AddForce(Vector3.up * 250);

}

}

if (Input.GetKeyDown(KeyCode.A))

{

_rb.AddForce(Vector3.left * 250);

}

}

void OnCollisionEnter(Collision collision)

{

IsGroundedUpate(collision, true);

}

void OnCollisionExit(Collision collision)

{

IsGroundedUpate(collision, false);

}

private voidIsGroundedUpate(Collision collision, bool value)

{

if (collision.gameObject.tag == ("Ground"))

{

_isGrounded = value;

}

}

}

Вот так мы сделали управление нашим персонажем. Спасибо за прочтение!Всего доброго.