Unity Pushing Object Script (как Маленькая Большая Планета)

Я хочу тянуть объект с той же силой, с которой игрок толкает твердое тело этого объекта. Однако я не знаю, как сделать такую ​​силу равной силе ходьбы в твердое тело.

Вот мой код:

 //if can push and holds button for pushing
other.GetComponent<Rigidbody>().AddForce(new Vector3(player.moveInput.x*player.speed*mass, player.moveInput.y * player.speed * mass, player.moveInput.z * player.speed * mass), ForceMode.Impulse);

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

1 ответ

О, я думаю, я понял: игрок перемещается в объект, и вы хотите перемещать объект вдоль игрока?

Самый простой способ сделать это, безусловно, игнорировать силы, как вы хотите

object.velocity = player.velocity

(Обратите внимание на терминологию: скорость не имеет направления, но скорость является вектором и имеет 3 компонента, поэтому приведенное выше означает object.velocity.x = player.velocity.x, object.velocity.y = player.velocity.y так далее.)


Возможно, вам придется рассчитать силу, чтобы он работал в Unity, поэтому давайте выведем это. я использую v для скорости, и nv для "следующей скорости". Нормальное время обновления выглядит

object.nv = object.v + object.force*object.mass*∆t

Теперь мы хотим object.nv == player.v:

player.v = object.v + object.force*object.mass*∆t

Перемещаем все вокруг:

object.force = (player.v - object.v)/(object.mass*∆t)

С этим уравнением игрок не будет затронут вообще, но тело, в которое вы двигаетесь, должно двигаться "вместе" с игроком.

Другие вопросы по тегам