Разработка виртуальных джойстиков управления передвижением объектов и камерой для мобильного приложения на ОС Android

Автор: Вахрушев В.И., Виноградова А.С., Самойлова С.С.

Журнал: Экономика и социум @ekonomika-socium

Рубрика: Основной раздел

Статья в выпуске: 1-1 (32), 2017 года.

Бесплатный доступ

И КАМЕРОЙ ДЛЯ МОБИЛЬНОГО ПРИЛОЖЕНИЯ НА ОС ANDROID В данной работе рассматривается процесс разработки джойстиков управления передвижением объектов и камерой для мобильного приложения на ОС Android.

Джойстик

Короткий адрес: https://sciup.org/140121610

IDR: 140121610

Текст научной статьи Разработка виртуальных джойстиков управления передвижением объектов и камерой для мобильного приложения на ОС Android

Первым делом следует добавить на сцену объект Plane и растянуть его размеры как X=5, Y=1, Z=5. Данный компонент будет играть роль пола. После того как пол успешно поставлен, необходимо создать и разместить сферу по центру. Сфера – это наш персонаж, управление которого будет осуществляться с помощью виртуальных джойстиков. Нужно обязательно проверить наличие у сферы Sphere Collider и Rigidbody.

Теперь можно приступить к разработке самих джойстиков. Для этого на панели Hierarchy создайте объект Image, назвав его VirtualJoystickContainer и в позиции Source Image задайте вид круга (Knob), Width и Height по 200, цвет серый. Как дочерний по отношению к VirtualJoystickContainer создайте ещё один объект Image с именем Joystick (рис. 1), Source Image также Knob, но Width и Height должны быть равны 100, а цвет белый. Значение Anchor у VirtualJoystickContainer задать как left-bottom.

▼ Canvas

VirtualJoystickContainer

Joystick

Рисунок 1 – VirtualJoystickContainer

Проделав всё вышеперечисленное создайте ещё один джойстик, но с тем отличием что называться он будет CameraJoystick и значение Anchor right-bottom.

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

Листинг 1 –Классы и поля public class VirtualJoystick : MonoBehaviour,IDragHandler,IPointerUpHandler, IPointerDownHandler { private Image bgImg;                             //Изображение основного Image private Image joystickImg;                         //Изображение дочернего Image public Vector3 InputDirection{ set; get;}

В методе Start() пропишите следующее:

Листинг 2 – Start()

void Start () { bgImg = GetComponent (); //Получаем данные компонента VirtualJoystickContainer в переменную bgImg joystickImg = transform.GetChild(0).GetComponent ();     //Получаем данные компонента Joystick в переменную joystickImg

}

Всё что делает этот метод – инициализирует переменные. Основные действия будут происходить в OnDrag(), листинг которого приведён в листинге 3.

Листинг 3 – OnDrag()

public virtual void OnDrag(PointerEventData ped)

{

if (RectTransformUtility.ScreenPointToLocalPointInRectangle (bgImg.rectTransform, ped.position, ped.pressEventCamera, out pos)) { pos.x = (pos.x / bgImg.rectTransform.sizeDelta.x); pos.y = (pos.y / bgImg.rectTransform.sizeDelta.y);

* 2 -1;

* 2 -1;

InputDirection = new Vector3 (x, 0,y);

InputDirection = (InputDirection.magnitude > 1)?

InputDirection.normalized : InputDirection;

joystickImg.rectTransform.anchoredPosition = new Vector3 (InputDirection.x * (bgImg.rectTransform.sizeDelta.x / 3)

, InputDirection.z * (bgImg.rectTransform.sizeDelta.y /3));

}

}

Этот метод будет срабатывать при движении джойстика. И завершающими методами будут OnPointerDown() и OnPointerUp(), их код приведён в 4 и 5 листингах соответственно.

Листинг 4 – OnPointerDown()

public virtual void OnPointerDown(PointerEventData ped)

{

OnDrag (ped);

}

Листинг 5 – OnPointerUp()

public virtual void OnPointerUp(PointerEventData ped) {

Далее этот скрипт необходимо сохранить и прикрепить к джойстикам

VirtualJoystickContainer и CameraJoystick.

Можно приступать к написанию скрипта, который будет отвечать непосредственно за движение самой сферы, который будет называться Motor. Поля, объявленные в классе Motor представлены в листинге 6.

Листинг 6 – Поля класса Motor public float moveSpeed = 5.0f;

//Скорость

//Сопротивление

//Скорость вращения

//Сам джойстик

//компонент управляемого объекта

//Для управления камерой

public float drag = 0.5f;

public float terminalRotationSpeed = 25.0f;

public VirtualJoystick moveJoystick;

private Rigidbody controller;

Transform camTransform;

Код метода Start() представлен в листинге 7, код метода Update() в листинге 8.

Листинг 7 – Start()

void Start () { controller = GetComponent();

}

Листинг 8 – Update()

private void Update () {

  • Vector3 dir = Vector3.zero;

dir.x = Input.GetAxis("Horizontal");

dir.z = Input.GetAxis("Vertical");

if (dir.magnitude > 1)

dir.Normalize();

}

Vector3 rotateDir = camTransform.TransformDirection (dir); rotateDir = new Vector3 (rotateDir.x, 0, rotateDir.z); rotateDir = rotateDir.normalized * dir.magnitude;

controller.AddForce(rotateDir * moveSpeed);

}

//Скорость

//Сопростивление

//Скорость вращения

//Сам джойстик

//компонент управляемого объекта

//Для управления камерой

public float drag = 0.5f;

public float terminalRotationSpeed = 25.0f;

public VirtualJoystick moveJoystick;

private Rigidbody controller;

Transform camTransform;

void Start () { controller = GetComponent();

} private void Update () {

  • Vector3 dir = Vector3.zero;

dir.x = Input.GetAxis("Horizontal");

dir.z = Input.GetAxis("Vertical");

if (dir.magnitude > 1) dir.Normalize();

}

Vector3 rotateDir = camTransform.TransformDirection (dir); rotateDir = new Vector3 (rotateDir.x, 0, rotateDir.z);

rotateDir = rotateDir.normalized * dir.magnitude;

controller.AddForce(rotateDir * moveSpeed); }

Как итог, мы можем наблюдать шар, управляемый при помощи двух джойстиков (рис. 2).

Рисунок 2 – Скриншот итогового приложения

Список литературы Разработка виртуальных джойстиков управления передвижением объектов и камерой для мобильного приложения на ОС Android

  • Курзаева Л.В. Введение в теорию систем и системный анализ: учеб. пособие/Л.В. Курзаева. -Магнитогорск: МаГУ, 2015. -211 с.
  • Попова И.В. Разработка приложений: учебное пособие/И.В. Попова -Магнитогорск, 2005. -184 с.
Статья научная