我正在开发一个2.5D的游戏。在这个游戏中,我想让我的角色(有刚体组件)在x轴和y轴上移动。因此,我使用以下代码片段:
private void LockZAxis () {
Vector3 currentPosition = _rigidbody.position;
currentPosition.z = 0;
_rigidbody.position = currentPosition;
}我在Update、FixedUpdate和LateUpdate的末尾都调用了这个LockZAxis方法。但它不起作用。当我的角色向前奔跑一段时间时,它的z位置仍然改变。
为了获得更多信息,在我的代码中,我有两次操作RegidBody的位置。第一个是当我的角色跳跃的时候,我使用了这个:
jumpVelocityVector = Vector3.up * jumpForceUp + transform.forward * jumpForceForward;
_rigidbody.velocity = jumpVelocityVector;当我想让我的角色移动得更快时,每一帧,所以在update方法中,我有以下内容:
void Update () {
Vector3 newPosition = transform.position + transform.forward * speed * Time.deltaTime;
newPosition.z = 0;
_rigidbody.MovePosition (newPosition);
LockZAxis ();
}发布于 2017-04-11 22:18:01
刚体用于模拟物理,通过在每一帧设置刚体的位置,实质上是在每一帧中传送角色。您可以限制在z轴上的移动,这将阻止它在应用物理时在z轴上移动,这是刚体通常用于的用途。
下面是如何限制刚体位置更改的方法:

如果您在更改位置后运行LockZAxis(),则应在每一帧将对象传送到z位置0。请确保z轴是正确的轴。可以通过暂停正在运行的游戏并操纵变换值来调试它,以查看每个轴是如何移动对象的。
https://stackoverflow.com/questions/43348406
复制相似问题