2016-06-20 10 views
0

Ich bin völlig neu in der Codierung und ich versuche, ein Ping-Pong-Spiel zu erstellen.Unity3D Pong, Verbessere die Wahl, wo Ball trifft

Ich skripted, dass die feindliche Paddelposition mit der Ballposition zu bewegen. (Sehr einfach)

public float speed = 6f; 
Vector2 player2; 
Vector2 player2position; 
GameObject ballpos; 

void Start() 

{ 
    ballpos = GameObject.FindGameObjectWithTag ("ball"); 
} 

void Update() 
{ 
player2 = Vector2.Lerp (gameObject.transform.position , ballpos.transform.position , Time.deltaTime * speed); 
player2position = new Vector2 (3.1f , Mathf.Clamp (player2.y , -2.4f, 2.4f)) ; 
gameObject.transform.position = new Vector2 (3.1f , player2position.y); } 

Was Code tun, ist, dass die „“ center „“ des Feindes Paddel in Bezug auf die „“ center „bewegen“ des Balles.

Jetzt versuche ich, den Feind den Ball zufällig in verschiedene Richtungen schlagen zu lassen, so dass die Kollision zwischen dem feindlichen Paddel und dem Ball an den Rändern des feindlichen Paddels geschah. (nicht immer mit der Mitte).

Auch habe ich einen Abstand zwischen dem Ball und dem Feind Paddel eingestellt, so dass, wenn wenn die Entfernung> 3 das feindliche Paddel wird aufhören.

if (Mathf.Abs (ballpos.transform.position.x - paddle.transform.position.x) > 3) 
{ 
    speed = 0f; 
} 

if (Mathf.Abs (ballpos.transform.position.x - paddle.transform.position.x) < 3) 
{ 
    speed = 6f; } 

können Sie mir bitte dabei helfen. Ich habe das zwei Tage lang versucht.

Thanks :)

Antwort

0

Sie können für bounciness Effekt, Physik Materialkomponente enden Spieler und beiden Spieler mit einfacher Bewegung Skript zu bewegen. Nun können Sie die Ballposition kennenlernen, indem Sie die OnCollisionEnter2D-Funktion und eine andere Funktion verwenden, die die Geschwindigkeit des Balls berechnet, je nachdem, wo er getroffen wurde.

void OnCollisionEnter2D(Collision2D col) { 


     if (col.gameObject.name == "PlayerLeft") // collide with left player 
{ 

      float y = AFactor(transform.position, 
           col.transform.position, 
           col.collider.bounds.size.y); 

      // Calculate direction, make length=1 via .normalized 
      Vector2 dir = new Vector2(1, y).normalized; 

      // Set Velocity with dir * speed 
      GetComponent<Rigidbody2D>().velocity = dir * speed; 
     } 


     if (col.gameObject.name == "PlayerRight")// hit right player 
{ 

      float y = AFactor(transform.position, 
           col.transform.position, 
           col.collider.bounds.size.y); 

      // Calculate direction, make length=1 via .normalized 
      Vector2 dir = new Vector2(-1, y).normalized; 

      // Set Velocity with dir * speed 
      GetComponent<Rigidbody2D>().velocity = dir * speed; 
     }