gpt4 book ai didi

c# - 检测玩家是否落在带有刚体的盒子顶部

转载 作者:太空宇宙 更新时间:2023-11-03 12:09:05 25 4
gpt4 key购买 nike

我正在开发一款 Unity 游戏,玩家在该游戏中射击立方体以改变它们的重量(它可以是正数或负数,最后一个表示“掉落”到屋顶上),我遇到了刚体、球体转换的问题并检测玩家是否接地。

当我的播放器在地面上或任何带有碰撞器的物体顶部时,我使用以下函数将其检测为“接地”:

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.groundRoofCheckDistance 设置为 0.01f。

在那之前,一切正常。但是现在,当我试图登上一个带有非运动学刚体的立方体时,我无法让那个 bool 值变为真。

这里有两个截图来说明我的问题:

在这一个中,玩家落在一个非运动学刚体盒子上,红色圆圈中的 bool 值是 m_isGrounded(false):

enter image description here

在这里,相同,但立方体是运动学的,地面检测得很好:

enter image description here

我真的不明白为什么刚体会那样做,或者如果我的地面检测功能有问题,欢迎任何帮助。谢谢!

PS:我使用的是Unity 2018.2.15f1

最佳答案

有很多方法可以检测玩家是否停飞。如果光线转换、SphereCast 和其他基于光线的检测 API 无法正常工作,请尝试不同的方法。使用带有标志的回调函数,例如 OnCollisionEnterOnCollisionExit。在 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");
}
}

请注意,这是在检查“Ground”标签,因此您的地面对象必须在“Ground”标签上。您必须从编辑器中手动创建此标签,然后将您的地面对象标签更改为此。

关于c# - 检测玩家是否落在带有刚体的盒子顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53377778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com