@andemp

Почему не работает groundcheck?

Unity не регистрирует столкновения игрока с "землей". Теги везде проставил, все взаимодействующие объекты имеют коллайдеры.

using UnityEngine;

public class controller : MonoBehaviour
{
    public float speed = 1f;
    public float JumpForce = 1000;
    public bool isGrounded;
    public bool isJump;
    Vector2 moveVector;
    Animator anim;
    Rigidbody2D rb;
    

   
    void Start()
    {
       rb =  gameObject.GetComponent<Rigidbody2D>();
       anim = GetComponent<Animator>();

    }


    void Update()
    {
        
        if (Input.GetKeyDown(KeyCode.W))
        {

            jump();
        }
        if (isJump)
        {
            anim.SetBool("isJump", true);
        }
        else
        {
            anim.SetBool("isJump", false);
        }


    }


    void FixedUpdate()
    {
        moveVector.x = Input.GetAxis("Horizontal");
        rb.MovePosition(rb.position + moveVector.x * Vector2.right * speed * Time.fixedDeltaTime);
        



    }
    void jump()
    {
        
        rb.AddForce(Vector2.up * JumpForce);
    }
    void OnCollisionStay(Collision collision)
    {
        if (collision.gameObject.tag == "Ground")
        {

            isJump = false;
            isGrounded = true;
            Debug.Log(isGrounded);
        }
    }
    void OnCollisionExit(Collision collision)
    {

        if (collision.gameObject.tag == "Ground")
        {
            isJump = true;
            isGrounded = false;
            Debug.Log(isGrounded);
        }
    }

}
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 3
@LanskoyGames
У модераторов первое место, но только с конца...
Почему rb = gameObject.GetComponent();, а не rb = GetComponent();?

other.CompareTag() лучше чем tag == .
И зачем OnCollisionStay вместо OnCollisionEnter? Смысл проверять каждый раз и тратить ресурсы, так как по смыслу нужна только проверка на вход и на выход
Ответ написан
Комментировать
@DrRen7
в 3д обычно использую Physics.CheckSphere каждый кадр думаю для 2д есть какой то аналог.
Вероятно если добавить Rb на землю ошибка пропадет
Ответ написан
Комментировать
@LDC
Используй CheckShpere, при попадание в коллайдер возвращает true, если нет - false.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы