Проверка заземления RigidBody? - PullRequest
0 голосов
/ 27 мая 2020

У меня есть GameObject с Rigidbody, Me sh Collider, Skinned Me sh Renderer и скрипт ниже.

Я пытаюсь проверить, заземлен ли он, но консоль постоянно выплевывает «Не заземлен!» когда это так, значит, здесь явно что-то не так. Кто-нибудь может помочь?

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!");
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 27 мая 2020

Другой вариант проверки заземления жесткого тела - использование функции OnTriggerStay .

void OnTriggerStay(Collider other)
    {
        if (other.Transform.Tag == "Ground")
        {
            IsGrounded = true;
            Debug.Log("Grounded");
        }
        else
        {
            IsGrounded = false;
            Debug.Log("Not Grounded!");
        }
    }
1 голос
/ 27 мая 2020

Я проверил ваш код на простой сцене с плоскостью и кубом, и он работает.

Он появляется только тогда, когда он явно «плавает» вокруг или объект имеет половину своего тела за пределами плоскости.

Проверьте эти вещи рисунок Луч, это должно дать вам больше информации о том, что не так с вашим Я sh.

Также, если проблема в том, как игра воспринимает высоту вашего Skinned Me sh, вы также можете использовать SkinnedMeshRenderer.localBounds , который возвращает AABB объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...