2016-07-19 9 views
0

タイル(マップ上のオブジェクト)は、ワンタッチで色を変え、カメラをパンまたはズームすると変わらないようにします。私は2日間試していて、自分自身をグーグルで探そうとしていて、それを理解できないようです。それはかなりシンプルなようです。Unity Input.touches - 押されたままにしておく遅延のアクション

私はこれを修正するためのコードを与えられましたが、元のコードが触れるにはあまりにも敏感なので、時間の遅れを追加する必要があります。私は「あれば(タッチ時間が> 200msの)他の{何もしない} {ものを行う}またはそのようなことを考えていた

ここで私は気圧持っているものです。

bool onlyTouched; 

void Update() 
{ 
    if (Input.touchCount > 0) 
    { 
     Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); 
     RaycastHit hitInfo; 

     if (Input.GetTouch(0).phase == TouchPhase.Began) 
     { 
      onlyTouched = true; 
     } 
     if (Input.GetTouch(0).phase == TouchPhase.Moved) 
     { 
      onlyTouched = false; 
     } 
     if (Input.GetTouch(0).phase == TouchPhase.Ended) 
     { 
      if (onlyTouched) 
      { 
       if (Physics.Raycast(ray, out hitInfo)) 
       { 
        GameObject ourHitObject = hitInfo.collider.transform.parent.gameObject; 

        if (ourHitObject.GetComponent<Hex>() != null) 
        { 
         Touch_Hex(ourHitObject); 
        } 
        else if (ourHitObject.GetComponent<Unit>() != null) 
        { 
         Touch_Unit(ourHitObject); 
        } 
       } 
      } 
      onlyTouched = false; 
     } 
    } 
} 

おかげで進歩

+0

それはあまりにも敏感であるとはどういう意味ですか?私はあなたがワンクリック/タッチで色を変えたいと思っていました... – Programmer

+0

ええと、そのコードは機能しますが、タッチ式携帯電話などでタッチすると色が変わることはありません。タイルあなたはあなたのタッチで本当に繊細でなければならず、子供などと一緒にはできないだろう – Fogazi

答えて

0

ちょっとしたことでわかりました。私はstart/endtimeという2つの浮動小数点を作成し、開始時刻を入れて、if文でこれを使って、それらの間の時間が0.150未満。

float startTime; 
float endTime; 

void Update() 
{ 
    if (Input.touchCount > 0) 
    { 
     Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); 
     RaycastHit hitInfo; 

     if (Input.GetTouch(0).phase == TouchPhase.Began) 
     { 
      startTime = Time.time; 
     } 
     //Debug.Log("Start time is: " + startTime); 
     if (Input.GetTouch(0).phase == TouchPhase.Ended) 
     { 
      endTime = Time.time; 
      //Debug.Log("End time is: " + endTime); 
      if (endTime - startTime < 0.150f) 
      { 
       if (Physics.Raycast(ray, out hitInfo)) 
       { 
        GameObject ourHitObject = hitInfo.collider.transform.parent.gameObject; 

        if (ourHitObject.GetComponent<Hex>() != null) 
        { 
         Touch_Hex(ourHitObject); 
        } 
        else if (ourHitObject.GetComponent<Unit>() != null) 
        { 
         Touch_Unit(ourHitObject); 
        } 
       } 
      } 
     } 
    } 
} 

私を正しい道に導く助けてくれてありがとう 乾杯よろしくお願いします。

関連する問題