【问题标题】:Unity3D pong, improve choice of where ball hitsUnity3D pong,改进球击中位置的选择
【发布时间】:2018-07-12 04:41:36
【问题描述】:

我对编码完全陌生,我正在尝试创建一个乒乓球游戏。

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

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

你能帮我解决这个问题吗?我一直在尝试这样做大约两天。

谢谢:)

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    您可以将物理材质组件添加到您的球中以获得弹力效果,并使用简单的移动脚本来移动两名球员。 现在要知道球的位置,您可以使用 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;
            } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      • 2021-11-10
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多