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)
С этим уравнением игрок не будет затронут вообще, но тело, в которое вы двигаетесь, должно двигаться "вместе" с игроком.