При сильном наклоне коллайдера OnTriggerEnter2D работает некорректно

Есть объект зонтик, на нем висит Capsule Collider и rigitbody.По ходу игры спавняться объект линия под разными углами(зависит от позиции). У линии есть OnTriggerEnter2D OnTriggerExit2D OnTriggerStay2D они изменяют флажок doDamage. При увеличении наклона, в момент касания коллайдеров OnTriggerEnter2D и OnTriggerExit2D как-будто вызываются одновременно, и doDamage очень быстро меняется с true на false и обратно, непонятно почему срабатывает Exit, ведь коллайдеры касаются друг друга. Помогите пожалуйста.

Код линии:

    public class SunLine : MonoBehaviour
{
    public bool trigger = false;
    public bool doDamage = false;
    private GameObject personObj;
    [SerializeField] private Person person;
    private GameObject umbrella;
    private Collider2D collider;
    [SerializeField] private float liveTime; //= 3f;
    private float waitingTime = 0;// = 1f;
public Person Person {
    get => person;
    set => person = value;
      
}

public float WaitingTime
{
    get => waitingTime;
    set => waitingTime = value;

}

public float LiveTime
{
    get => liveTime;
    set => liveTime = value;

}
void Start()
{
   // waitingTime = 1f;
    //collider = GetComponent<Collider2D>();
    //person = personObj.GetComponent<Person>();

}

// Update is called once per frame
void Update()
{
    if (waitingTime != 0 && liveTime != 0)
    {
        if (waitingTime <= 0)
        {
            Living();
        }
        Damage(ref waitingTime);
    }
    if(doDamage == false)
    {
        transform.localScale = new Vector3(1, 0.3f);
    }
    else
    {
        transform.localScale = new Vector3(1, 1);
    }
}

private void Living()
{
    if (liveTime > 0)
    {
        liveTime -= Time.deltaTime;
        this.GetComponent<Collider2D>().isTrigger = true;
    }
    else
    {
        Destroy(gameObject);
    }
}

private void OnTriggerEnter2D(Collider2D collision)
{
    doDamage = false;
}
private void OnTriggerStay2D(Collider2D collision)
{
    doDamage = false;
    //Debug.Log(collision.name);
}

private void OnTriggerExit2D(Collider2D collision)
{
    Debug.Log("exit");
    doDamage = true;
}

private void isTouching(Collider2D collision)
{
    doDamage = false;
} 

private void Damage(ref float waitingTime)
{
    //waitingTime = 1f;
    if (doDamage && waitingTime<=0)
    {
        person.Health -= 20 * Time.deltaTime;
       // Debug.Log("Damage waiting time: " + waitingTime);
        
    }
    else if(waitingTime > 0)
    {
       // Debug.Log("waiting time: " + waitingTime);
        waitingTime -= Time.deltaTime;
      // Debug.Log("new waiting time: " + waitingTime);
    }

}

}


Ответы (0 шт):