我正在尝试模拟具有内部重力的船舶/空间站。
为了实现这一点,我正在制作船的玩家和船的所有内容。船本身有对撞机,但没有刚体组件。这个想法是,随着船的移动,它的所有内容也会移动。到目前为止非常简单。
为了模拟船上的重力,玩家控制器和所有刚体都关闭了默认重力。代替标准,每一帧沿母船的负向上矢量施加力。
这种工作,但有一个主要问题我必须在这件事变得稳固之前解决。所有刚体都在船内部非常缓慢地滑动。
我知道这可能是由于地板的更新位置加上重力导致了某种剪切力。物体总是随着船的旋转而滑动。
我已经尝试过处理从物理材料到拖动到质量等所有物理属性。这些都没有奏效,我很确定这是由于地板在移动的基本事实,即使 RBs是地板所属对象的子对象。
任何人都有解决方案,而不是某种胶带?我可以尝试使所有东西都运动,并且仅在发生某些外部碰撞或其他情况时“唤醒”,但这可能会变得非常麻烦。我需要尽可能多地以通用方式工作。
一些代码:
在船上
void Update ()
{
transform.Rotate(new Vector3(Time.deltaTime * 0.125f,Time.deltaTime*0.5f,0));
}
void FixedUpdate()
{
Vector3 tempVec;
foreach(Rigidbody rb in rigidBodies)
{
//Gravity!!
tempVec = transform.up * -9.81f * rb.mass * Time.deltaTime;
rb.AddForce(tempVec, ForceMode.Acceleration);
}
}
我还制作了一个版本,其中船跟随刚体的运动。我不能直接做父母,所以我不得不简单地手动设置每一帧的变换来匹配物理代理。这仍然具有与上述相同的效果,尽管这可能是我最终想要移动飞船的方式,因为这将更恰当地与飞行机制相关联。