Сделайте стену, которая повышает скорость единства - PullRequest
0 голосов
/ 18 февраля 2020

Итак ... я знаю, что это должно быть довольно прямолинейно, но я застрял на этом в течение нескольких дней, в основном то, что мне нужно, это то, что когда мяч ударяется о стену (коллайдер), он начинает ускоряться в направлении, как на картинке ниже, но мне нужно сделать это, используя физику, я не могу просто интерполировать позицию.

Exemplification

1 Ответ

1 голос
/ 18 февраля 2020

Сначала вам понадобится вектор, параллельный земле!

Вы можете использовать Collider.ClosestPoint, чтобы найти ближайшую точку на стенке коллайдера к положению шара.

Из этого вы затем узнаете плоскость, нормальную для вашего земля / стена, чтобы вы могли затем использовать Vector3.ProjectOnPlane, чтобы преобразовать обычное направление движения в одну параллель к земле.

private void FixedUpdate () 
{
    var ballRb = ball.GetComponent<Rigidbody>();
    var wallCollider = Wall.GetComponent<Collider>();
    var hitPoint = wallCollider.ClosestPoint(ballRb.position);

    // normal of ground (= vector from hitPoint to ball)
    var groundNormal = (ballRb.position - hitPoint).normalized;

    // project the given velocity onto the ground
    var newVelocity = Vector3.ProjectOnPlane(ballRb.velocity, groundNormal);

    // optionally increase the speed of needed e.g.
    //var newDirection = newVelocity.normalized;
    //var newMagnitude = newVelocity.magnitude * 1.1f; // or any multiplication or addition factor
    //newVelocity = newDirection * newMagnitude;

    // and finally reassign the new velocity
    ballRb.velocity = newVelocity; 
}

Примечание: типизировано на смартфоне, но я надеюсь, что идея проясняется, и это обеспечивает хорошую отправную точку

...