我想知道物理弹球游戏在Ball Bounce中的用途

时间:2019-04-12 15:05:51

标签: c# unity3d

我正在尝试使球像庞然大物一样。我写了这段代码,但仍然遗漏了某些东西,或者我做错了什么。

我尝试使用物理材料,但我无法控制它。 当我将跳动设置为1时,Y位置会随着每一帧而增加。所以我不能那样做。

private void OnTriggerEnter(Collider other)
{
    Debug.Log("Collied");

    if(other.tag == "rightWall")
    {
        direction = false;
    } 
    else if(other.tag == "leftWall")
    {
        direction = true;
    }

    if(other.tag == "groundWall") rigid.velocity = Vector3.up * 10;
    if(other.tag != "topWall")  BallMove(); 
}

void BallMove()
{
    if (direction == false)
    {
        rigid.AddForce(Vector3.Lerp(transform.position, new Vector3(-300f, 0, 0), Time.deltaTime * ballForce));
    }
    else
    {
        rigid.AddForce(Vector3.Lerp(transform.position, new Vector3(300f, 0,0), Time.deltaTime * ballForce));
    }
}

2 个答案:

答案 0 :(得分:0)

您当然想使用冲动而不是用力(长时间施加力,而冲动更像是冲击,保持一帧) https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html

类似的东西:

 rigid.AddForce(Vector3.Lerp(transform.position, new Vector3(300f, 0,0), Time.deltaTime * ballForce), ForceMode.Impulse);

答案 1 :(得分:0)

如果您要使刚性主体以恒定速度移动,则不应该使用力。 而是将球的“刚体drag”设置为0并为其设置起始速度。

void Start(){
    rigi.velocity=new Vector3(1f,1f,0f); //set any starting velocity you want
}

然后,当球碰到墙时,您只需翻转运动方向:

OnTriggerEnter(Collider other) { 

   if(other.gameObject.tag == "rightWall" || other.gameObject.tag == "leftWall")
   {
       rigi.velocity=new Vector3(-rigi.velocity.x, rigi.velocity.y, rigi.velocity.z);

   } else if(other.gameObject.tag == "groundWall")
   {
       rigi.velocity = new Vector3(rigi.velocity.x, 10, rigi.velocity.z);
   }
}

在您的情况下,我还建议您使{@ 1}