При сильном наклоне коллайдера 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);
}
}
}