检查RigidBody是否被接地?

问题描述 投票:0回答:1

我有一个GameObject,里面有一个Rigidbody,Mesh Collider,Skinned Mesh Renderer,还有下面的脚本。

我想检查它是否接地,但当它接地时,Console不断地吐出 "Not Grounded!",所以很明显这里有问题。有谁能帮忙吗?

public class GroundCheck : MonoBehaviour
{
    public float Height;
    bool IsGrounded;
    Ray ray;
    MeshRenderer renda;

    private void Start()
    {
        Height = renda.bounds.size.y;
    }

    void Update()
    {
        if (Physics.Raycast(transform.position, Vector3.down, Height))
        {
            IsGrounded = true;
            Debug.Log("Grounded");
        }
        else
        {
            IsGrounded = false;
            Debug.Log("Not Grounded!");
        }
    }
}
c# unity3d
1个回答
3
投票

另一个检查 rigidBody 是否接地的方法是使用 OnTriggerStay 函数。

void OnTriggerStay(Collider other)
    {
        if (other.Transform.Tag == "Ground")
        {
            IsGrounded = true;
            Debug.Log("Grounded");
        }
        else
        {
            IsGrounded = false;
            Debug.Log("Not Grounded!");
        }
    }

1
投票

我用一个有飞机和立方体的简单场景检查了你的代码,它可以工作。

只有当它明显地 "漂浮 "在周围或者对象的一半身体在平面之外时,才会产生NotGrounded。

检查这些东西 绘图 雷,这应该会给你更多的信息,让你知道你的网格出了什么问题。

另外,如果问题出在游戏对蒙皮网格的高度感知上,你也可以使用 SkinnedMeshRenderer.localBounds. 返回对象的AABB。

© www.soinside.com 2019 - 2024. All rights reserved.