2015-07-14 2 views
0

У меня есть простая сцена, когда игроки краны, мяч меняет направления на 90 градусов; Мой код работает, но это не является совершенным, главным вопросом является «водопроводная» обнаруженияединство касание мобильный выпуск

необходимо использовать Coroutine, чтобы сделать паузу между нажатиями, но пауза 0.25sec является большим и время отклика медленно, в некоторых случаях, но если попытаться для уменьшения времени паузы он запускает код так быстро, что он больше не отличается кранами; Я пробовал также с touch.phase == began и touch.phase.Stationary, но это также не работает

Я хочу, чтобы добиться эффекта, когда вы нажмете, он меняет направление один раз, даже если вы держите его.

Есть ли у кого-нибудь лучшее решение для обнаружения кранов?

using UnityEngine; 

using System.Collections; 


public class playerController : MonoBehaviour { 

public float speed = 2f; 
public float tapPauseTime = .25f; 
Rigidbody rb; 
bool timerOn; 
bool goingRight; 


void Awake(){ 

    rb = GetComponent<Rigidbody>(); 
    timerOn = false; 
    goingRight = false; 
} 

// Update is called once per frame 
void Update() 
{ 

    if (Input.touchCount == 1 && !timerOn && !goingRight) { 

      rb.velocity = Vector3.zero; 
      rb.angularVelocity = Vector3.zero; 
      rb.velocity = new Vector3 (speed, 0, 0); 
      timerOn = true; 
      goingRight = true; 
      StartCoroutine(TapPause()); 
     } 

    if(Input.touchCount == 1 && !timerOn && goingRight) 
     { 
      rb.velocity = Vector3.zero; 
      rb.angularVelocity = Vector3.zero; 
      rb.velocity = new Vector3(0,0,speed); 
      timerOn=true; 
      goingRight = false; 
      StartCoroutine(TapPause()); 
     } 


} 

IEnumerator TapPause(){ 
    yield return new WaitForSeconds(tapPauseTime); 
    timerOn = false; 
} 

}

ответ

0

Если все, что вы заботитесь о том, событие одним касанием (т.е. нет мультитача), все обработчики мыши в Input имитировать первое прикосновение. Поэтому вы можете использовать Input.GetMouseButtonDown(0), чтобы узнать, когда было прикосновение. Это fucntion вернет только тот фрейм, который нажимает мышь (или в вашем случае, на ощупь), и не вернется назад, пока кнопка не будет отпущена и не будет нажата снова. Вы можете заменить Input.touchCount == 1 на ваши операторы if с помощью Input.GetMouseButtonDown(0), чтобы попробовать это.

+0

Отлично, он работал как шарм :) это именно то, что я искал, спасибо! – drapichrust