【发布时间】:2020-09-29 07:08:33
【问题描述】:
我目前正在研究程序生成天体。计划是尽可能多地覆盖,但目前我只为恒星、行星、卫星和小行星准备好配置。
无论如何,回到主要点。我希望能够在随机生成的行星上四处走动,为此,我需要为用于地形生成的 Sphere 网格分配一个网格对撞机。
我确保在将网格分配给网格过滤器后添加 MeshCollider 组件,以防万一。在所有的噪波层都通过该网格的顶点“雕刻”完成之后,我将碰撞器网格设置为 meshfilter 网格。
terrainMeshFilter.sharedMesh = shapeSettings.CreateTerrain(origin);
if(terrainSphere.GetComponent<MeshCollider>() == null) terrainSphere.AddComponent<MeshCollider>();
terrainSphere.GetComponent<MeshCollider>().sharedMesh = null;
terrainSphere.GetComponent<MeshCollider>().sharedMesh = terrainMeshFilter.sharedMesh;
我对此进行了测试,但没有产生预期的结果。出于某种原因,播放器处于浮动状态。我确保施加“重力”,将玩家拉向地球,如下所示:
Rigidbody rb = player.GetComponent<Rigidbody>();
Transform playerTransform = player.GetComponent<Transform>();
Vector3 gravityDirection = (playerTransform.position - origin).normalized;
if(rb != null){
rb.useGravity = false;
rb.isKinematic = true;
rb.AddForce(gravityDirection * gravity);
}
但是玩家被困在“半空中”。它不会粘在地上。正在发生的另一件奇怪的事情是,如果我让玩家在半空中“奔跑”在地球上,并撞到一些非常高的山,那么与山的碰撞会被正确记录。这表明 MeshCollider 被正确分配,但如果是这样,为什么玩家漂浮在半空中?
感谢任何帮助。提前谢谢你。
注意:我还在下面分配了一些图片,从玩家的星球视角和星球外的第三人称视角(太空舱就是玩家)描绘了问题。
【问题讨论】: