2016-08-07 23 views
1

Ich versuche, ein einfaches Pong-Spiel für Touch-Geräte (Android und IOS) zu bauen, und das ist mein erstes Projekt, ich bin wirklich Anfänger in diesem Ding, und ich brauche Hilfe , Bitte.Einheit multitouch, Wie touch.fingerid

gibt es drei Schaltflächen auf dem Bildschirm. Der erste Knopf ist, um das Spielerpaddel nach oben zu bewegen, der zweite Knopf ist, um das Paddel nach unten zu bewegen und der dritte Knopf ist um die Ballgeschwindigkeit für 2 Sekunden zu erhöhen, wenn der Ball das Spielerpaddel berührt und gleichzeitig der Boostknopf berührt wurde .

das ist mein Skript für den Spieler Paddel

public class player1 : MonoBehaviour { 

    float playspeed = 15f; 
    float player1pos; 

    Ray2D ray; 
    RaycastHit2D hit; 

    Rigidbody2D rb; 

    Vector2 paddlepos; 

    GameObject paddle1; 

     void Update() 
     { 

     rb = gameObject.GetComponent <Rigidbody2D>(); 

     paddlepos = transform.position; 
     paddlepos.y = Mathf.Clamp (transform.position.y , -9f , 9f); 
     transform.position = paddlepos; 

     if (Input.touchCount > 0) 
     { 
      for (int i = 0; i < Input.touchCount; i++) 
      { 
       if (Input.GetTouch(i).phase == TouchPhase.Began) 
       { 

        Vector2 point = Camera.main.ScreenToWorldPoint (Input.GetTouch(i).position); 
        hit = Physics2D.Raycast (point , Vector2.zero, 10); 


        if (hit.collider != null) 
        { 

        if (hit.collider.name == "up") 

        { 
          rb.velocity = new Vector2 (0 , playspeed);         
        } 

        if (hit.collider.name == "down") 

        { 
        rb.velocity = new Vector2 (0 , -playspeed);  
        }  
       }  

       if (Input.GetTouch(i).phase == TouchPhase.Ended) 
       { 
        rb.velocity = new Vector2 (0 , 0); 
       }   
    } 
    } 
    } 
} 
} 

Und für den Ball Boost-Taste I

public class ball : MonoBehaviour { 

    public float ballspeed = 7f; 

    Ray2D ray; 
    RaycastHit2D hit; 

    float previousspeed; 

IEnumerator ballbooster() 
    { 
     previousspeed = ballspeed; 

     ballspeed = ballspeed * 1.8f ; 

     yield return new WaitForSeconds (2); 

     ballspeed = previousspeed; 

     yield break; 
    } 

void Update() 

    { 
     if (Input.touchCount > 0) 
     { 
      for (int i = 0; i < Input.touchCount; i++) 
      { 
       if (Input.GetTouch(i).phase == TouchPhase.Began) 
       { 

        Vector2 point = Camera.main.ScreenToWorldPoint (Input.GetTouch(i).position); 
        hit = Physics2D.Raycast (point , Vector2.zero, 10); 

        if (hit.collider != null) 
        { 
         if (hit.collider.name == "boost" && distance < 5) 
         { 
          StartCoroutine (ballbooster()); 
         } 
        } 

    } 
    } 
    } 
    } 
} 
} 

Mein Problem des folgenden Code bin ist, dass ich nicht Multi-Touch verwenden kann, Wenn ich zum Beispiel den Auf-Knopf berühre und dann den Boost-Knopf drücke, hört das Paddel auf sich zu bewegen. Jetzt versuche ich mit Multitouch umzugehen. Ich weiß, dass ich touch.fingerid verwenden muss, um zu tun, was ich will, aber ich weiß nicht, wie man das im Code macht. Kannst du mir bitte ein Beispiel geben?

Antwort

0

Haben Sie bemerkt, dass touchphase.ende in der Touchphase ist?

+0

Vielen Dank für die Antwort auf mich und nein, ich habe das nicht bemerkt .. aber das hilft mir nicht mein Problem zu lösen :) –

+0

Kann diese Hilfe ein wenig https://unity3d.com/learn/tutorials/topics sein/mobile-touch/pinch-zoom Als Beispiel könnte der Zoomfall erklärt werden. Auf hohem Niveau denke ich, dass Sie Ihren Code umgestalten müssen, um jedes gettouch (id) getrennt zu analysieren, jetzt scheint es, dass Sie die erste Aktion stoppen, wenn Sie die zweite berühren, weil beide das gleiche Corutine nennen. – gustavomick