Как следует из названия:
MovePosition
Перемещает твердое тело в указанное положение с помощью , вычисляя соответствующую линейную скорость требуется переместить твердое тело в это положение во время следующего обновления физики. Во время движения ни гравитация, ни линейное сопротивление не влияют на тело.
AddForce
Добавляет силу к Rigidbody
Сила указывается как два отдельных компонента в направления X и Y (в 2D физике нет направления Z). Объект будет ускоряться силой согласно закону сила = масса х ускорение - чем больше масса, тем больше сила, необходимая для ускорения до заданной скорости.
То есть, согласно массе и Трение объекта заставляет его двигаться с определенной скоростью в соответствии с физикой.
Смешение обоих не имеет большого смысла, так как MovePosition
обычно используется для isKinematic
твердых тел, так что те, которые являются полностью контролируется через скрипт, в то время как AddForce
действует только на , а не isKinatic
, таким образом, полностью контролируется только физикой; смешивая оба, вы не даете AddForce
возможности работать, поскольку вы перезаписываете линейную скорость тела ригода, используя MovePosition
, который устанавливает абсолютную скорость для твердого тела, таким образом полностью перекрывая AddForce
.
rb2d.MovePosition (transform.position + (movement * speed * Time.deltaTime));
эта целевая позиция, к которой вы хотите двигаться, всегда имеет Y
и transform.position.y
, поэтому вы в основном прибиваете объект к этой высоте.
Однако, если вы думаете об этом Все физические действия имеют одну общую черту: в конце концов, все они представляют собой разные способы подложить определенную скорость к ригоду.
Поэтому вместо того, чтобы позволить этим методам вычислить, что вместо этого вы можете вместо этого непосредственно изменить velocity
и тем самым позволить AddForce
полностью контролировать скорость Y
, в то время как вы контролируете только компонент X
:
rb2d.velocity = new Vector2(movement * speed, rb2d.velocity.y);