Я хочу знать, какую игру Physics Pang используют в Ball Bounce - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь настроить контроль над мячом, как игра в панг. Я пишу этот код, но все равно что-то упустил или делаю что-то не так.

Я пытаюсь использовать Физический Материал, но не могу его контролировать. Когда я установлю отказов на 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 голосов
/ 12 апреля 2019

Вы не должны использовать силы, если хотите, чтобы ваш жесткий корпус двигался с постоянной скоростью. Вместо этого, установите значение «шарика» вашего шара 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);
   }
}

В вашем случае я бы также посоветовал сделать жесткое тело kinematic, чтобы избежать ошибок при движении

0 голосов
/ 12 апреля 2019

Вы, конечно, хотите использовать импульс, а не силу (сила, действующая в течение длительного времени, пока импульс больше похож на удар, который остается на 1 кадр) https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html

Что-то вроде:

 rigid.AddForce(Vector3.Lerp(transform.position, new Vector3(300f, 0,0), Time.deltaTime * ballForce), ForceMode.Impulse);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...