如何在固定更新中移动刚体,但我的角色仍然受到重力的影响?



so

下面你可以看到我最初用来控制角色移动的东西。

_RigidBody.velocity = _ConstantWalkingSpeed * direction.normalized;

这适用于在 4 个方向上四处走动。但是,如果我的角色跌倒在边缘,他会慢慢地倒下。如果我在半空中禁用步行脚本,重力就会加速并以正常速度前进。

这让我相信我的动作脚本以某种方式影响了重力效果。

因此,我尝试了以下解决方案:

_RigidBody.velocity = _ConstantWalkingSpeed * direction.normalized + new Vector3(0f, _RigidBody.velocity.y, 0f);

这也不起作用,所以我尝试了这个:

_RigidBody.velocity = _ConstantWalkingSpeed * direction.normalized + new Vector3(0f, _RigidBody.velocity.y, 0f) + Physics.gravity;

这确实使重力起作用,但后来重力变得如此之强,以至于我无法移动。

我尝试只添加 Physics.gravity 并跳过新的矢量部分,但随后重力仍然太强。

TL;博士

我使用的移动脚本会影响玩家向下的重力,这是不应该的。我希望他四处走动,但仍然受到重力的影响。我尝试过的想法没有奏效。

请注意,我更愿意将重力保持在-9.81。

希望你们有一个有效的建议:-)

您可以使用RigidBody.movePositon,而不是设置或修改速度:

这是我编写的一个快速示例脚本:

using UnityEngine;
public class simpleMoveRB : MonoBehaviour {
public Rigidbody myBody;
public float _constantWalkSpeed = 3.0f;
Vector3 moveDirection = Vector3.zero;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update() {
if (Input.GetKey(KeyCode.A))
{
moveDirection.x = -1.0f;
}
else if(Input.GetKey(KeyCode.D))
{
moveDirection.x = 1.0f;
}
else
{
moveDirection.x = 0.0f;
}
if(Input.GetKeyDown(KeyCode.Space))
{
myBody.AddForce(Vector3.up * 500.0f);
}
}
private void FixedUpdate()
{
myBody.MovePosition(transform.position + moveDirection * _constantWalkSpeed * Time.deltaTime);
}
}

您可以使用此脚本处理移动,并且仍然可以对对象进行重力处理。

不要设置速度,而是修改速度。

你正在用你的输入覆盖物理引擎应用的任何速度(例如重力)。

_RigidBody.velocity += _ConstantWalkingSpeed * direction.normalized;

您可能还希望将速度 X 和 Z 值限制为最大值:

Vector3 vel = _RigidBody.velocity;
vel.x = Mathf.Min(vel.x, ConstantWalkingSpeed);
vel.z = Mathf.Min(vel.z, ConstantWalkingSpeed);
_RigidBody.velocity = vel;

最新更新