Unity управление персонажем андроид

Unity управление персонажем андроид

Katerpiller 10 фев 2017, 19:37

Здравствуйте. Адаптирую свою игру под андроид. Есть проблема с сенсорным управление У меня есть два скрипта.

Вот на этом у меня управление со всей анимацией:

using UnityEngine ;
using System.Collections ;

public class Animation : MonoBehaviour
<
//переменная для установки макс. скорости персонажа
public float Speed = 1.5f ; // скорость движения
public float maxSpeed = 10f ;
//переменная для определения направления персонажа вправо/влево
private bool isFacingRight = true ;
//ссылка на компонент анимаций
private Animator anim ;

//находится ли персонаж на земле или в прыжке?
private bool isGrounded = false ;
//ссылка на компонент Transform объекта
//для определения соприкосновения с землей
public Transform groundCheck ;
//радиус определения соприкосновения с землей
private float groundRadius = 0.2f ;
//ссылка на слой, представляющий землю
public LayerMask whatIsGround ;

private Rigidbody2D body ;
private int layerMask ;

///
/// Начальная инициализация
///
private void Start ( )
<

body = GetComponent Rigidbody2D > ( ) ;
body. freezeRotation = true ;
layerMask = 1 gameObject . layer | 1 2 ;
layerMask =

layerMask ;
anim = GetComponent Animator > ( ) ;
>

///
/// Выполняем действия в методе FixedUpdate, т. к. в компоненте Animator персонажа
/// выставлено значение Animate Physics = true и анимация синхронизируется с расчетами физики
///
private void FixedUpdate ( )
<
<

<
//определяем, на земле ли персонаж
isGrounded = Physics2D. OverlapCircle ( groundCheck. position , groundRadius, whatIsGround ) ;
//устанавливаем соответствующую переменную в аниматоре
anim. SetBool ( «Ground» , isGrounded ) ;
//устанавливаем в аниматоре значение скорости взлета/падения
anim. SetFloat ( «vSpeed» , GetComponent Rigidbody2D > ( ) . velocity . y ) ;
//если персонаж в прыжке — выход из метода, чтобы не выполнялись действия, связанные с бегом
if ( ! isGrounded )
return ;
//используем Input.GetAxis для оси Х. метод возвращает значение оси в пределах от -1 до 1.
//при стандартных настройках проекта
//-1 возвращается при нажатии на клавиатуре стрелки влево (или клавиши А),
//1 возвращается при нажатии на клавиатуре стрелки вправо (или клавиши D)
float move = Input. GetAxis ( «Horizontal» ) ;

//в компоненте анимаций изменяем значение параметра Speed на значение оси Х.
//приэтом нам нужен модуль значения
anim. SetFloat ( «Speed» , Mathf. Abs ( move ) ) ;

//обращаемся к компоненту персонажа RigidBody2D. задаем ему скорость по оси Х,
//равную значению оси Х умноженное на значение макс. скорости
GetComponent Rigidbody2D > ( ) . velocity = new Vector2 ( move * maxSpeed, GetComponent Rigidbody2D > ( ) . velocity . y ) ;

//если нажали клавишу для перемещения вправо, а персонаж направлен влево
if ( move > 0 && ! isFacingRight )
//отражаем персонажа вправо
Flip ( ) ;
//обратная ситуация. отражаем персонажа влево
else if ( move 0 && isFacingRight )
Flip ( ) ;
>
>
>

///
/// Метод для смены направления движения персонажа и его зеркального отражения
///
private void Flip ( )
<
//меняем направление движения персонажа
isFacingRight = ! isFacingRight ;
//получаем размеры персонажа
Vector3 theScale = transform . localScale ;
//зеркально отражаем персонажа по оси Х
theScale. x *= — 1 ;
//задаем новый размер персонажа, равный старому, но зеркально отраженный
transform . localScale = theScale ;
>
>

А вот этот для сенсорных кнопок:

using UnityEngine ;
using System.Collections ;

public class Controller : MonoBehaviour
<
public Rigidbody2D rb2d ;
public float playerSpeed ;
public float jumpPower ;
public int directionInput ;
public bool groundCheck ;
public bool facingRight = true ;

void Start ( )
<
rb2d = GetComponent Rigidbody2D > ( ) ;

Читайте также:  Чистый андроид это хорошо или плохо

void FixedUpdate ( )
<
rb2d. velocity = new Vector2 ( playerSpeed * directionInput, rb2d. velocity . y ) ;
>

public void Move ( int InputAxis )
<

public void Jump ( bool isJump )
<
isJump = groundCheck ;

if ( groundCheck )
<
rb2d. velocity = new Vector2 ( rb2d. velocity . x , jumpPower ) ;
>

void Flip ( )
<
facingRight = ! facingRight ;
Vector3 theScale = transform . localScale ;
theScale. x *= — 1 ;
transform . localScale = theScale ;
>

Сенсорные кнопки делаю на канвасах. Добавляю Event Trigger’ы на все три кнопки c Pointer Enter (влево -1, вправо 1, прыжок буль — все понятно). Кнопка прыжок работает отлично — перс прыгает, анимация проигрывается. А вот бегает перс (влево-право) уже без анимации.

Как ̶с̶к̶р̶е̶с̶т̶и̶т̶ь̶ ̶б̶у̶л̶ь̶д̶о̶г̶а̶ ̶с̶ ̶н̶о̶с̶о̶р̶о̶г̶о̶м̶ сделать так чтобы перс смог бегать по сенсорным кнопкам с анимацией? Прыжок работает всегда отлично вместе с анимацией, а вот бегает уже без нее.

Источник

Ввод на мобильном устройстве

На мобильных устройствах класс Input предоставляет доступ к нажатию на экран, акселерометру и географическим/локационным данным.

Доступ к клавиатуре на мобильных устройствах обеспечивается через iOS keyboard.

Multi-Touch Screen

iPhone и iPod способны отслеживать до пяти нажатий на экран одновременно. Вы можете получить статус каждого нажатия на протяжении последнего кадра через массив Input.touches.

Android устройства не имеют определенного лимита на количество нажатий, которое можно отслеживать. Он колеблется от устройства к устройству и может варьироваться от одного-двух нажатий на старых устройствах, до пяти нажатий на некоторых новых.

Каждое нажатие пальцем представлено в структуре данных Input.Touch:

Свойство: Функция:
fingerId Уникальный индекс для нажатия.
position Позиция нажатия на экран.
deltaPosition Изменение позиции на экране с последнего кадра.
deltaTime Количество времени, которое прошло с тех пор как изменилось последнее состояние.
tapCount The iPhone/iPad screen is able to distinguish quick finger taps by the user. This counter will let you know how many times the user has tapped the screen without moving a finger to the sides. Android devices do not count number of taps, this field is always 1.
phase Describes so called “phase” or the state of the touch. It can help you determine if the touch just began, if user moved the finger or if they just lifted the finger.

Фазы могут быть следующими:

Began Палец только что прикоснулся к экрану.
Moved Палец передвинулся по экрану.
Stationary Палец прикоснулся к экрану, но с последнего кадра не двигался.
Ended Палец только что оторван от экрана. Это последняя фаза нажатий.
Canceled The system cancelled tracking for the touch, as when (for example) the user puts the device to their face or more than five touches happened simultaneously. This is the final phase of a touch.

Ниже приведен пример скрипта, который выпускает луч там, где пользователь тапает по экрану:

Симуляция Мыши

On top of native touch support Unity iOS/Android provides a mouse simulation. You can use mouse functionality from the standard Input class. Note that iOS/Android devices are designed to support multiple finger touch. Using the mouse functionality will support just a single finger touch. Also, finger touch on mobile devices can move from one area to another with no movement between them. Mouse simulation on mobile devices will provide movement, so is very different compared to touch input. The recommendation is to use the mouse simulation during early development but to use touch input as soon as possible.

Акселерометр

При движении мобильных устройств, встроенный акселерометр сообщает линейное ускорение изменяется вдоль трех основных осей в трехмерном пространстве. Ускорение вдоль каждой оси сообщается непосредственно аппаратным обеспечением как значение G-Force. Значение 1,0 представляет собой нагрузку около +1г вдоль заданной оси, а величина –1,0 представляет –1g. Если вы держите устройство в вертикальном положении (с кнопкой “домой” внизу) перед собой, ось X (положительная) будет по правой стороне, ось Y (положительная) будет направлена вверх, а ось Z (положительная) будет указывать на вас.

Вы можете получить значение акселерометра, путем доступа к свойству Input.acceleration.

Приведенный ниже пример скрипта позволяет двигать объект, используя акселерометр:

Фильтр низких частот

Показания акселерометра могут быть отрывистыми и с шумом. Применив низкочастотную фильтрацию на сигнал, вы сгладите его и избавитесь от высокочастотного шума.

Приведенный ниже скрипт демонстрирует, как применить низкочастотную фильтрацию на показания акселерометра:

Чем больше значение LowPassKernelWidthInSeconds , тем медленнее фильтруется значение, которое будет приближаться к значению входного образца (и наоборот).

Я хочу получить как можно более точные показания акселерометра. Что я должен делать?

Чтение переменной Input.acceleration не означает дискретизацию. Проще говоря, Unity замеряет результат при частоте 60 Гц. и сохраняет его в переменную. На самом деле все немного сложнее — в случае значительной нагрузки на процессор, замеры акселерометра не происходят с постоянными временными интервалами. В результате, система может сделать два замера за один кадр, и один замер за следующий кадр.

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

Источник

Андроид управление unity3d

Всем привет. Помогите мне, пожалуйста, перевести скрипт с ПК на Андроид управление.
Вот скрипт

Управление на андроид (кнопками) unity3d
Всем доброго времени суток! хочу сделать управление с помощью кнопок для 2d платформера на.

Андроид управление для игры в Unity3D
Здравствуйте! сделал код по видео для пк по клавишам,а вот как сделать для кнопок не знаю(ходить.

Unity3d First Person для Андроид устройств
Здравствуйте, подскажите пожалуйста, как реализовать поворот FPS персонажа для android устройств.

Unity3D останавливается работы приложения на Андроид
Собрал приложение, сбилдил его на android 4.4.2, armv7. Запускается приложение, черный экран и.

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

кнопки влево вправо

Решение

1. Переключиться на Android.
2. Скачать Standart Assets -> CrossPlatformInput.
3. На сцену кинуть префаб MobileSingleStickControl — виртуальный джойскик и кнопка прыгать.
И можно еще MobileAircraftControls — там кнопки есть право влево
и собрать из них один как вам надо.

4.Поменять в коде

У меня точно такая же проблема. Помогите пожалуйста перевести скрипт с ПК на Андроид управление. Буду очень благодарен.

Разработка 3D игр под андроид на движке Unity3D и C++
Может кто-нибудь знает какие-нибудь книги или видео уроки по разработке 3D игр под андроид на.

Игры Unity3D для Андроид: на каком языке писать?
Добрый день! Хочу писать игры для андроид, только не знаю на каком языке писать. Знаю C++ и C#.

Unity3d управление персонажем
здравствуйте. подскажите пожалуйста, как сделать управление персонажем от первого лица в unity3d.

Touch управление в Unity3d
Очень прошу помочь с модификацией кода под мобильные устройства! Имеется скрипт управления для ПК.

Источник

Платформер под Android на Unity3D

Пожалуй, даже после выхода нового UI, создание интерфейса для Android’а осталось больной темой для многих.
Новая система “UI”, которая появилась в Unity 4.6 сильно упростила жизнь разработчикам, но все же, хотелось бы прояснить некоторые моменты, которые относятся к Android’у.

Из плюсов:
-Мощный набор инструментов
-Корректное масштабирование на разных разрешениях, что в свою очередь устраняет кучу лишней работы
-Поддержка сенсорного управления без дополнительных настроек
-Гибкость и простота в использовании

Статья будет разделена на две части.

Первая (базовая) — для тех, кто еще только начинает пользоваться Unity3D. Вторая — собственно, сама реализация управления для платформера под Android.

Часть первая

1) Для начала, создайте новую сцену File > New Scene.

2) В папке “Assets” создайте еще две папки: “Scripts” и “Sprites”.

3) Далее, спрайты, которые я подготовил, добавляем в папку “Sprites”.

Спрайты:





Ставим Filter Mode на пункт “Point” платформе и персонажу, поскольку они выполнены в пиксель арте.

Перетаскиваем на сцену спрайт персонажа, пару спрайтов платформ и фон(предварительно увеличив его в размере).

Должно получиться что-то похожее на:

Добавим нашему персонажу такие компоненты как:Rigidbody2D,CircleCollider2D и заморозим возможность вращения по оси Z.
Всем платформам добавим компонент: BoxCollider2D.

4) Добавим на сцену три Image’а через GameObject > UI > Image.

Это и есть наш будущий интерфейс(кнопки: вправо, влево, прыжок).

Подгоняем размеры и идем дальше:

Image’ам слева ставим “привязку” к левому нижнему краю, а правому — к правому нижнему.

Для каждого Image’а в Source Image перетаскиваем свой спрайт.

В результате должно получиться:

Вот и конец первой части.

Во второй части, мы перейдем к скриптингу и добавим кнопкам функционал.

Часть вторая

Теперь перейдем к основному:

1) Создайте новый скрипт в папке “Scripts” и назовите его “CharController” (писать будем на C#).

Вставляем в него код:

“Простота — залог успеха” — в нашем случае так и есть. Передвижение и прыжки персонажа были реализованы через отдельные void’ы.
Повесьте данный скрипт на персонажа. Склеить все это дело вместе, нам поможет Event System.

2) Для удобства переименуйте “кнопки” чтобы не запутаться.

Например:”leftButton”,”rightButton”,”jumpButton”.
Добавим каждой кнопке компонент Event Trigger.

Теперь, кнопке “Влево” в компоненте Event Trigger создайте два новых события — PointerDown и PointerExit.

В PointerDown и PointerExit создайте по одному событию, перетащите на каждый нашего персонажа(на котором обязательно должен висеть скрипт).Кликаем по выпадающему меню и находим наш скрипт “CharController” > void “Move(int)”.

Аналогичные манипуляции проведем с кнопкой “Вправо”.
Кнопке “Прыжок” добавим только PointerEnter > CharController > Jump(bool).

3) Пришло время выставлять значения.

Для кнопки “Вправо” тоже поменяем значение в PointerDown, но на “1”.

4) Запустим наш проект:

Конечно назвать данную статью “Разработка от А до Я” нельзя, но думаю многим теперь будет проще сделать управление для Android’а. Всем спасибо за внимание.

Источник

Читайте также:  Slide to unlock для андроид что это
Оцените статью