У меня есть физическая дверь. Через некоторое время, после того как дверь толкнёт какой-нибудь объект и откроет её, она закроется. Однако, если в этот момент дверь оттолкнёт что-то, то она будет дёргаться.
Так вот, как можно прервать Кватернион, который закрывает дверь?
private Quaternion _startRot;
private bool _itOpens;
[Header("Bools")]
[SerializeField] public bool canOpen;
[Header("Parametres")]
[SerializeField] private float _timeToClose = 2f;
[SerializeField] private float _closeSmooth = 1.5f;
private void Start()
{
_startRot = transform.rotation;
}
private void Update()
{
if (transform.rotation != _startRot)
{
StopCoroutine(Closing());
StartCoroutine(Closing());
}
if(transform.gameObject.GetComponent<Rigidbody>().velocity != new Vector3(0,0,0))
{
_itOpens = true;
}
else
{
_itOpens = false;
}
}
private IEnumerator Closing()
{
if(_itOpens) yield break;
yield return new WaitForSeconds(_timeToClose);
transform.rotation = Quaternion.Slerp(transform.rotation, _startRot, Time.deltaTime * _closeSmooth);
}