我有一个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!");
}
}
}
另一个检查 rigidBody 是否接地的方法是使用 OnTriggerStay 函数。
void OnTriggerStay(Collider other)
{
if (other.Transform.Tag == "Ground")
{
IsGrounded = true;
Debug.Log("Grounded");
}
else
{
IsGrounded = false;
Debug.Log("Not Grounded!");
}
}
我用一个有飞机和立方体的简单场景检查了你的代码,它可以工作。
只有当它明显地 "漂浮 "在周围或者对象的一半身体在平面之外时,才会产生NotGrounded。
检查这些东西 绘图 雷,这应该会给你更多的信息,让你知道你的网格出了什么问题。
另外,如果问题出在游戏对蒙皮网格的高度感知上,你也可以使用 SkinnedMeshRenderer.localBounds. 返回对象的AABB。