我自己做了一个小角色控制器,主要使用非运动学的RigidBody和AddForce()方法(VelocityChangeForceMode)。然后我试着做蹲伏(简单的调整胶囊碰撞器的大小),它有点抖动,所以每一帧我都根据玩家的un-crowched来调整RigidBody的Y位置。蹲下抖动消失了,但现在刚体在取消/蹲下时移动得非常慢。因此,将这两者结合起来是一个很大的禁忌,或者应该是可能的?这是MovePosition部分。控制器被分成多个脚本,有超过1000行,所以不能在这里发布。只是想知道这两种运动方法是否可以结合起来。感谢阅读!
// Gradually adjust current height to target height
if (!Mathf.Approximately(heightTarget, currentHeight))
{
float oldHeight = currentHeight;
currentHeight = Mathf.Lerp(currentHeight, heightTarget, crouchSpeed * Time.deltaTime);
float camHeightDifference = (standingHeight - currentHeight) / 2;
player.Height = currentHeight;
player.targetCamYPos = initialCameraPos - camHeightDifference;
player.Rigidbody.MovePosition(player.transform.position += Vector3.up * (currentHeight - oldHeight) / 2);
}
我试着对刚体的特性做了一些实验,它的行为仍然是一样的--在蹲/蹲的过程中,刚体的速度改变了,即使我只是在加/减Y位置。
1条答案
按热度按时间zsbz8rwp1#
我刚刚得到了一个heureka时刻:D这是可能的合并这两者,工作相当好实际。我只是在更新循环中更新刚体位置,而不是在FixedUpdate循环中,在那里我所有其他的物理都被计算出来。多么愚蠢的错误,但也许看这个的人也会有同样的问题。干杯!
编辑:我合并它们的顺序是先MovePosition(),然后是AddForce()。我不知道交换它们是否会有什么不同,所以我想我应该提到这个细节。