Научная статья на тему 'РАЗРАБОТКА ВИРТУАЛЬНЫХ ДЖОЙСТИКОВ УПРАВЛЕНИЯ ПЕРЕДВИЖЕНИЕМ ОБЪЕКТОВ И КАМЕРОЙ ДЛЯ МОБИЛЬНОГО ПРИЛОЖЕНИЯ НА ОС ANDROID'

РАЗРАБОТКА ВИРТУАЛЬНЫХ ДЖОЙСТИКОВ УПРАВЛЕНИЯ ПЕРЕДВИЖЕНИЕМ ОБЪЕКТОВ И КАМЕРОЙ ДЛЯ МОБИЛЬНОГО ПРИЛОЖЕНИЯ НА ОС ANDROID Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
11
7
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
UNITY / C# / ANDROID / ДЖОЙСТИК / C # / JOYSTICK

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Вахрушев В.И., Виноградова А.С., Самойлова С.С.

И КАМЕРОЙ ДЛЯ МОБИЛЬНОГО ПРИЛОЖЕНИЯ НА ОС ANDROID В данной работе рассматривается процесс разработки джойстиков управления передвижением объектов и камерой для мобильного приложения на ОС Android.In this paper we consider the process of developing a control joystick movement of objects and camera for mobile applications on the Android OS.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Вахрушев В.И., Виноградова А.С., Самойлова С.С.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «РАЗРАБОТКА ВИРТУАЛЬНЫХ ДЖОЙСТИКОВ УПРАВЛЕНИЯ ПЕРЕДВИЖЕНИЕМ ОБЪЕКТОВ И КАМЕРОЙ ДЛЯ МОБИЛЬНОГО ПРИЛОЖЕНИЯ НА ОС ANDROID»

УДК 004

Вахрушев В.И. студент, 4 курс

Институт энергетики и автоматизированных систем

МГТУ им. Г.И. Носова Россия, г. Магнитогорск Виноградова А.С. студент, 4 курс

Институт энергетики и автоматизированных систем

МГТУ им. Г.И. Носова Россия, г. Магнитогорск Самойлова С.С. студент, 4 курс

Институт энергетики и автоматизированных систем

МГТУ им. Г.И. Носова Россия, г. Магнитогорск РАЗРАБОТКА ВИРТУАЛЬНЫХ ДЖОЙСТИКОВ УПРАВЛЕНИЯ ПЕРЕДВИЖЕНИЕМ ОБЪЕКТОВ И КАМЕРОЙ ДЛЯ МОБИЛЬНОГО

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

Ключевые слова: Unity, C#, Android, Джойстик.

DEVELOPMENT OF VIRTUAL JOYSTICK CONTROL OBJECT MOVEMENT AND CAMERA FOR MOBILE APPLICATION ON THE

ANDROID OS.

In this paper we consider the process of developing a control joystick movement of objects and camera for mobile applications on the Android OS. Keywords: Unity, C #, Android, Joystick.

Первым делом следует добавить на сцену объект 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

яяиД

Joystick

VirtualJoystickContainer

Рисунок 1 - VirtualJoystickContainer

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

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

public class VirtualJoystick : MonoBehaviour,IDragHandler,IPointerUpHandler, IPointerDownHandler {

private Image bglmg; //Изображение основного Image

private Image joystickImg; //Изображение дочернего Image

public Vector3 InputDirection{ set; get;}

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

//Получаем данные компонента

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

void Start () {

bgImg = GetComponent<Image> (); VirtualJoystickContainer в переменную bgImg

joystickImg = transform.GetChild(0).GetComponent<Image> (); //Получаем данные компонента Joystick в переменную joystickImg

InputDirection = Vector3 .zero; }

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

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

public virtual void OnDrag(PointerEventData ped)

{

Vector2 pos = Vector2.zero;

if (RectTransformUtility.ScreenPointToLocalPointlnRectangle (bglmg.rectTransform, ped.position, ped.pressEventCamera, out pos))

{

pos.x = (pos.x / bglmg.rectTransform.sizeDelta.x); pos.y = (pos.y / bglmg.rectTransform.sizeDelta.y);

float x = (bgImg.rectTransform.pivot.x == 1) ? pos.x * 2 + 1 : pos.x * 2 -

float y = (bgImg.rectTransform.pivot.y == 1) ? pos.y * 2 + 1 : pos.y * 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)

{

InputDirection = Vector3 .zero;

joystickImg.rectTransform.anchoredPosition = Vector3.zero;

}

Далее этот скрипт необходимо сохранить и прикрепить к джойстикам 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<Rigidbody>(); controller.maxAngularVelocity = terminalRotationSpeed;

controller.drag = drag;

camTransform = Camera.main.transform;

}

Листинг 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();

if (moveJoystick.InputDirection != Vector3.zero) { dir = moveJoystick.InputDirection;

}

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

}

Скрипт Motor.cs необходимо прикрепить к компоненту Sphere и после этого в поле Look At поместить VirtualJoystickContainer.

Заключающим скриптом будет скрипт, управляющий камерой FreeCamera.cs, код которого приведён в листинге 9. Листинг 9 - FreeCamera.cs public float moveSpeed = 5.0f; //Скорость public float drag = 0.5f; //Сопростивление

public float terminalRotationSpeed = 25.0f; //Скорость вращения public VirtualJoystick moveJoystick; //Сам джойстик private Rigidbody controller; //компонент управляемого объекта Transform camTransform; //Для управления камерой

void Start () {

controller = GetComponent<Rigidbody>(); controller.maxAngularVelocity = terminalRotationSpeed; controller.drag = drag;

camTransform = Camera.main.transform;

}

private void Update () { Vector3 dir = Vector3.zero; dir.x = Input.GetAxis("Horizontal"); dir.z = Input.GetAxis("Vertical"); if (dir.magnitude > 1) dir.Normalize();

if (moveJoystick.InputDirection != Vector3.zero) {

dir = moveJoystick.InputDirection;

}

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

controller.AddForce(rotateDir * moveSpeed);

}

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

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

Использованные источники:

1.Курзаева Л.В. Введение в теорию систем и системный анализ: учеб. пособие/Л.В. Курзаева. - Магнитогорск: МаГУ, 2015. -211 с.

2.Попова И.В. Разработка приложений: учебное пособие / И.В. Попова -Магнитогорск, 2005. - 184 с.

i Надоели баннеры? Вы всегда можете отключить рекламу.