Управление под android

Общие вопросы о Unity3D

Управление под android

Сообщение Katerpiller 10 фев 2017, 19:37

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

Вот на этом у меня управление со всей анимацией:
Синтаксис:
Используется csharp
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;

        /// <summary>
        /// Начальная инициализация
        /// </summary>
        private void Start()
        {
               
                body = GetComponent<Rigidbody2D>();
                body.freezeRotation = true;
                layerMask = 1 << gameObject.layer | 1 << 2;
                layerMask = ~layerMask;
                anim = GetComponent<Animator>();
        }

        /// <summary>
        /// Выполняем действия в методе FixedUpdate, т. к. в компоненте Animator персонажа
        /// выставлено значение Animate Physics = true и анимация синхронизируется с расчетами физики
        /// </summary>
        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();
                        }
                }
        }

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


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

Синтаксис:
Используется csharp
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 Update()
        {
                if ((directionInput < 0) && (facingRight))
                {
                        Flip();
                }

                if ((directionInput > 0) && (!facingRight))
                {
                        Flip();
                }
                groundCheck = true;
        }

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

        public void Move(int InputAxis)
        {

                directionInput = 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, прыжок буль - все понятно). Кнопка прыжок работает отлично - перс прыгает, анимация проигрывается. А вот бегает перс (влево-право) уже без анимации.

Как ̶с̶к̶р̶е̶с̶т̶и̶т̶ь̶ ̶б̶у̶л̶ь̶д̶о̶г̶а̶ ̶с̶ ̶н̶о̶с̶о̶р̶о̶г̶о̶м̶ сделать так чтобы перс смог бегать по сенсорным кнопкам с анимацией? Прыжок работает всегда отлично вместе с анимацией, а вот бегает уже без нее....
Аватара пользователя
Katerpiller
UNец
 
Сообщения: 12
Зарегистрирован: 25 май 2016, 09:44

Re: Управление под android

Сообщение Cr0c 10 фев 2017, 22:03

Синтаксис:
Используется csharp
anim.SetFloat ("vSpeed", GetComponent<Rigidbody2D>().velocity.y);

На ПК, значит, надо в аниматор пихать данные, а на андроиде нет, что ли?
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: GoGo.Ru [Bot] и гости: 13