2016-06-20 7 views
0

私は完全にコーディングするのが新しく、私はピンポンゲームを作成しようとしています。Unity3D pong、ボールのヒットの選択を改善

私は、敵のパドルの位置がボールの位置で動くようにスクリプト化しました。 (非常に単純な)

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); } 

コードは何かある敵のパドルの「」中央「は」ボールの「」中央「」に対して移動するということです。

ここで私がしようとしているのは、敵がランダムに異なる方向にボールを打つようにして、敵のパドルとボールの衝突が敵のパドルのエッジで起こるようにすることです。 (必ずしも中心ではない)。

また、ボールと敵パドルの距離を設定しているため、距離> 3の場合、敵パドルは停止します。

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; } 

あなたは私にこれを手伝ってもらえますか?私は約二日間これをやろうとしています。

感謝:)

答えて

0

あなたは弾み効果のためにあなたのボールに物理マテリアルコンポーネントを追加することができ、両方のプレイヤーが簡単な動きスクリプトを使用して移動すること。 ボールの位置を知るために、OnCollisionEnter2D関数と、ヒットした場所に応じてボールの速度を計算する別の関数を使用できます。

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; 
     } 
関連する問題