Unity3D乒乓球,改善击球的选择

时间:2016-06-20 06:35:28

标签: c# unity3d

我对编码很陌生,而且我正在努力创建乒乓球游戏。

我编写了敌人桨位置随球位置移动的脚本。 (很简单)

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;  
}
你可以帮我解决这个问题。我一直试图这样做两天。

谢谢:)

1 个答案:

答案 0 :(得分: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;
        }