Пятница, 22 Ноября 2024, 18:55

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Реализация управления на TouchScreen
fraiДата: Вторник, 08 Сентября 2015, 16:11 | Сообщение # 1
частый гость
Сейчас нет на сайте
Я реализовал управления на Устройстве под Android используя объекты UI Canvas. Но беда в том, что персонаж двигается не плавно, а рывками, при этом на клавиатуре все работает нормально. В канвасе я использовал элементы image с компонентом Ivent Trriger, внутри него добавил компонент Pointer down. Я думаю это связано с тем, что на клавиатуре можно зажимать кнопки, а эти элементы не реагируют на зажимание. Собственно вопрос в том как сделать такое управление на тач скрине чтобы персонаж мог двигаться не рывками, а пока палец нажат на кнопке?

Прилагаю код контроллера персонажа.

Код
[HideInInspector] public bool facingRight = true;
   [HideInInspector]public bool jump = false;

   public float moveForce = 365f;
   public float maxSpeed = 5f;
   public float jumpForce = 1000f;
   public Transform groundCheck;
   float hInput = 0;
   private bool grounded = false;
   private Animator anim;
   private Rigidbody2D rb2d;
   // Use this for initialization
   void Awake () {
    anim = GetComponent<Animator> ();
    rb2d = GetComponent<Rigidbody2D> ();

   }
     
   // Update is called once per frame
   void Update () {
    grounded = Physics2D.Linecast (transform.position, groundCheck.position, 1 << LayerMask.NameToLayer("Ground"));
    if (Input.GetButton ("Jump") && grounded) {
     jump = true;
    }

   }

   public void Jump()
   {

    grounded = Physics2D.Linecast (transform.position, groundCheck.position, 1 << LayerMask.NameToLayer("Ground"));
    if (Input.GetButton("Jump") && grounded) {
     jump = true;
    }
   }

   void FixedUpdate()
   {
    float h = Input.GetAxis ("Horizontal");
    Debug.Log (h.ToString ());
    anim.SetFloat ("Speed", Mathf.Abs (h));

    if (h * rb2d.velocity.x < maxSpeed)
     rb2d.AddForce(Vector2.right * h * moveForce);
      
    if (Mathf.Abs (rb2d.velocity.x) > maxSpeed)
     rb2d.velocity = new Vector2 (Mathf.Sign (rb2d.velocity.x) * maxSpeed, rb2d.velocity.y);

    if (h > 0 && !facingRight)
     Flip ();
    else if (h < 0 && facingRight)
     Flip ();

    if(jump)
    {
     anim.SetTrigger ("Jump");
     rb2d.AddForce (new Vector2(0f, jumpForce));
     jump = false;
    }

   }

   public void Tjump()
   {
    Debug.Log ("push");
    if ( grounded) {
     jump = true;
    }
    if(jump)
    {
     anim.SetTrigger ("Jump");
     rb2d.AddForce (new Vector2(0f, 100));
     jump = false;
    }

   }

   public void StartMoving(float h)
   {
    Debug.Log ("push"+" " + h.ToString());

    anim.SetFloat ("Speed", Mathf.Abs (h));

    if (h * rb2d.velocity.x < maxSpeed)
     rb2d.AddForce(Vector2.right * h * moveForce);
      
    if (Mathf.Abs (rb2d.velocity.x) > maxSpeed)
     rb2d.velocity = new Vector2 (Mathf.Sign (rb2d.velocity.x) * maxSpeed, rb2d.velocity.y);

    if (h > 0 && !facingRight)
     Flip ();
    else if (h < 0 && facingRight)
     Flip ();
   }

   void Flip()
   {
    facingRight = !facingRight;
    Vector3 theScale = transform.localScale;
    theScale.x *= -1;
    transform.localScale = theScale;
   }


Сообщение отредактировал frai - Вторник, 08 Сентября 2015, 16:13
ЛевшаДата: Вторник, 08 Сентября 2015, 16:45 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
У тебя есть 2 метода:
PointerEnter
PointerExit

Или скажем:
PointerDown
PointerUp

Вводи bool переменную и переключай ее этими методами.
Для движения проверяй ее состояние.


X.cor.R (Prologue)

Сообщение отредактировал Левша - Вторник, 08 Сентября 2015, 16:46
fraiДата: Среда, 09 Сентября 2015, 01:48 | Сообщение # 3
частый гость
Сейчас нет на сайте
результат такой же, Если можно пример кода такой функции.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг