Zefirot
@Zefirot

Как правильно определить соприкосновение?

Мне нужно определять есть ли что-то под объектом с помощью лучей, делаю так - на объекте бокс коллайдер, есть 4 точки которые крепятся к углам коллайдера (для того чтобы при поворотах они там оставались), далее из этих точек пускаю лучи вниз, вот так кодом это выглядит
private BoxCollider BotCollider;
    public Transform GroundTouchpoint1;
    public Transform GroundTouchpoint2;
    public Transform GroundTouchpoint3;
    public Transform GroundTouchpoint4;
    private bool RayDown(Transform t){ return Physics.Raycast(t.position, Vector3.down, 0.1f); }
    private void RayDownTest(Transform t){ Debug.DrawRay(t.position, Vector3.down * 0.1f, Color.red); }
    private bool isGrounded{ get{
        if(RayDown(GroundTouchpoint1) || RayDown(GroundTouchpoint2) || RayDown(GroundTouchpoint3) || RayDown(GroundTouchpoint4)){ return true; }else{ return false; }
        }}
    private void Awake(){
        RB = GetComponent<Rigidbody>();
        BotCollider = GetComponent<BoxCollider>();
        GroundTouchpoint1.position = BotCollider.center + new Vector3(BotCollider.size.x, -BotCollider.size.y, BotCollider.size.z) * 0.5f;
        GroundTouchpoint2.position = BotCollider.center + new Vector3(-BotCollider.size.x, -BotCollider.size.y, BotCollider.size.z) * 0.5f;
        GroundTouchpoint3.position = BotCollider.center + new Vector3(-BotCollider.size.x, -BotCollider.size.y, -BotCollider.size.z) * 0.5f;
        GroundTouchpoint4.position = BotCollider.center + new Vector3(BotCollider.size.x, -BotCollider.size.y, -BotCollider.size.z) * 0.5f;
        }

Используя RayDownTest я вижу что лучи идут оттуда откуда нужно, даже при поворотах они всегда исходят из углов коллайдера.
Но вот isGrounded показывает не то что нужно, если стою то всегда False, а если поворачиваюсь или хожу то в разнобой False и True.
Подскажите в чём может быть проблема?
(дело происходит в 3D, объект движется по осям X и Z, по Y прыгает/падает)
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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