能否解释一段关于检查人物是否在地面上的代码?

void checkGround()
{
    RaycastHit hit;
    float shellOffset = 0.01f;
    float groundCheckDistance = 0.01f;
    Vector3 currentPosition = transform.position;
    currentPosition.y += capsuleCollider.height / 2;
    if (Physics.SphereCast(currentPosition, capsuleCollider.radius * (1.0f - shellOffset), Vector3.down, out hit,
            ((capsuleCollider.height / 2f) - capsuleCollider.radius) + groundCheckDistance, ~0, QueryTriggerInteraction.Ignore))
    {
        isGround = true;
    }
    else
    {
        isGround = false;
    }
}

能否解释下 if 语句的条件是如何判断的, ~0 是什么语法,自己 C# 学得不太好,麻烦了!

阅读 3.4k
2 个回答

大概是判断以碰撞器中心currentPosition, capsuleCollider.radius * (1.0f - shellOffset)为圆心 以((capsuleCollider.height / 2f) - capsuleCollider.radius) + groundCheckDistance, ~0, QueryTriggerInteraction.Ignore))为半径是否有碰撞 如果有说明与地面有接触就是在地面 没有就没有在地面

新手上路,请多包涵

~是取反的意思
~0就是将0的所有二进制位取反
也就是说, ~0 等于 -1

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进