我有一个协同机制,它使用它的Reigidbody连续移动平台,代码如下:
private IEnumerator MovePlatform(Vector3 startPosition, Vector3 endPosition)
{
float i = 0;
float rate = 1f / speed;
while (i < 1f)
{
i += Time.deltaTime * rate;
rigidbody.MovePosition(Vector3.Lerp(startPosition, endPosition, i));
yield return null;
}
StartCoroutine(MovePlatform(endPosition, startPosition));
}如果我想让我的刚体交互,rigidbody.MovePosition是移动平台的正确方式。
但问题是:
如果平台垂直移动,则平台顶部的物体在移动时不断跳跃。
如果平台水平移动,则平台顶部的对象来回滑动。显然,我不希望他们这样做。我要站台上的物体不要动。
我试过的是:
如何实现移动平台与对象之间的自然良好交互?
P.S.血小板-甲基硫丹
发布于 2022-10-07 12:27:24
我最近完成了一个项目,完成了使刚体坚持在改变位置和旋转的平台上。这需要做大量的工作,但我要试着很快地列出一个总结。
整个系统依赖于为每个移动平台创建完全独立的物理场景(https://docs.unity3d.com/Manual/physics-multi-scene.html),用于模拟运动平台与刚体骑手之间的物理关系。仿真和真实场景的唯一区别是,在仿真中,移动平台是不动的!
更详细的情况:
首先,这个仿真场景只包含一个移动平台的副本,除了它不移动。当刚体骑手在我们的主场景中与运动平台碰撞时,在相对于运动平台的相同位置/速度下,将刚体骑手的副本添加到仿真中。然后,禁用主刚体骑手上的控制器,使其不响应玩家的输入。不要在模拟刚体骑手上禁用控制器--它应该继续响应控制器,并在模拟(非移动)平台上自由移动。
模拟刚体骑手现在在模拟的非移动平台上行走。现在使用MovePosition()和MoveRotation()移动/旋转主刚体骑手,以匹配模拟刚体字符相对于模拟平台的位置和旋转。这样,当模拟刚体字符移动时,主刚体字符也会移动。
在这一点上,我们有一个运作良好的移动平台。只要骑手到骑手的转换是针对平台完成的,主平台如何移动或旋转并不重要--主刚体骑手将完美地坚持它。虽然这将是不自然的--例如,如果移动平台突然改变速度,骑手就会随之改变。
当主刚体骑手不再与运动平台碰撞时,从仿真场景中删除模拟刚体骑手,并向主刚体骑手添加完全控制。
https://stackoverflow.com/questions/68695664
复制相似问题