C# 检测玩家是否落在带有刚体的盒子顶部
我正在做一个Unity游戏,玩家在立方体上射击以改变它们的重量(可以是正的,也可以是负的,最后一个意思是“掉到”屋顶上),我遇到了刚体、球体切割和检测玩家是否被接地的问题 当我的播放机在地面上或任何带有碰撞器的物体顶部时,我使用以下功能将其检测为“接地”:C# 检测玩家是否落在带有刚体的盒子顶部,c#,unity3d,rigid-bodies,C#,Unity3d,Rigid Bodies,我正在做一个Unity游戏,玩家在立方体上射击以改变它们的重量(可以是正的,也可以是负的,最后一个意思是“掉到”屋顶上),我遇到了刚体、球体切割和检测玩家是否被接地的问题 当我的播放机在地面上或任何带有碰撞器的物体顶部时,我使用以下功能将其检测为“接地”: if (Physics.SphereCast(transform.position, m_Capsule.radius, Vector3.down, out hitInfo, ((m_Capsule.height / 2f) - m
if (Physics.SphereCast(transform.position, m_Capsule.radius, Vector3.down, out hitInfo,
((m_Capsule.height / 2f) - m_Capsule.radius) + advancedSettings.groundRoofCheckDistance, Physics.AllLayers, QueryTriggerInteraction.Ignore))
{
m_IsGrounded = true;
}
其中advancedSettings.groundrootCheckDistance
设置为0.01f
在那之前,一切都很好。但是现在,当我试图用一个非运动学的刚体在一个立方体的顶部时,我不能让那个布尔值为真
以下是两个示例来说明我的问题:
在本例中,玩家落在非运动学刚体框上,红色圆圈中的布尔值为m_isGrounded(false):
在这里,相同,但立方体是运动的,地面被检测得很好:
我真的不明白为什么刚体会这样做,或者如果我的地面探测功能有问题,欢迎任何帮助。
谢谢
PS:我使用的是Unity 2018.2.15f1有很多方法可以检测球员是否停飞。如果光线投射、SphereCast和其他基于光线的检测API工作不正常,请尝试其他方法。使用带有标志的回调函数,如
OnCollisionEnter
和OnCollisionExit
。在Update
功能中检查该标志
bool m_IsGrounded;
void OnCollisionEnter(Collision collision)
{
if (collision.collider.CompareTag("Ground"))
m_IsGrounded = true;
}
void OnCollisionExit(Collision collision)
{
if (collision.collider.CompareTag("Ground"))
m_IsGrounded = false;
}
void Update()
{
if (m_IsGrounded)
{
Debug.Log("Grounded");
}
}
请注意,这是在检查“地面”标记,因此地面对象必须位于“地面”标记上。您必须从编辑器中手动创建此标记,然后将地面对象标记更改为此标记。我尝试过,花了一天的时间修改其余代码,但现在可以使用了。谢谢