首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >刚体间的统一运动平台交互作用

刚体间的统一运动平台交互作用
EN

Stack Overflow用户
提问于 2021-08-07 19:48:30
回答 1查看 84关注 0票数 2

我有一个协同机制,它使用它的Reigidbody连续移动平台,代码如下:

代码语言:javascript
复制
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.血小板-甲基硫丹

EN

回答 1

Stack Overflow用户

发布于 2022-10-07 12:27:24

我最近完成了一个项目,完成了使刚体坚持在改变位置和旋转的平台上。这需要做大量的工作,但我要试着很快地列出一个总结。

整个系统依赖于为每个移动平台创建完全独立的物理场景(https://docs.unity3d.com/Manual/physics-multi-scene.html),用于模拟运动平台与刚体骑手之间的物理关系。仿真和真实场景的唯一区别是,在仿真中,移动平台是不动的!

更详细的情况:

首先,这个仿真场景只包含一个移动平台的副本,除了它不移动。当刚体骑手在我们的主场景中与运动平台碰撞时,在相对于运动平台的相同位置/速度下,将刚体骑手的副本添加到仿真中。然后,禁用主刚体骑手上的控制器,使其不响应玩家的输入。不要在模拟刚体骑手上禁用控制器--它应该继续响应控制器,并在模拟(非移动)平台上自由移动。

模拟刚体骑手现在在模拟的非移动平台上行走。现在使用MovePosition()和MoveRotation()移动/旋转主刚体骑手,以匹配模拟刚体字符相对于模拟平台的位置和旋转。这样,当模拟刚体字符移动时,主刚体字符也会移动。

在这一点上,我们有一个运作良好的移动平台。只要骑手到骑手的转换是针对平台完成的,主平台如何移动或旋转并不重要--主刚体骑手将完美地坚持它。虽然这将是不自然的--例如,如果移动平台突然改变速度,骑手就会随之改变。

当主刚体骑手不再与运动平台碰撞时,从仿真场景中删除模拟刚体骑手,并向主刚体骑手添加完全控制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68695664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档