private IEnumerator HandleDepartMotion() { Transform elevatorTransform = elevatorAnimator.transform; Vector3 elevatorStartDepartPosition = elevatorTransform.position; float elapsed = 0f; float duration = 0.55f; float yDistance = 20f; bool hasLayerSwapped = false; while (elapsed < duration) { if (elapsed > 0.15f && !crumblyBumblyAnimator.gameObject.activeSelf) { crumblyBumblyAnimator.gameObject.SetActive(true); crumblyBumblyAnimator.PlayAndDisableObject(string.Empty, null); } elapsed += BraveTime.DeltaTime; float t = Mathf.SmoothStep(0f, 1f, elapsed / duration); float yOffset = BraveMathCollege.SmoothLerp(0f, -yDistance, t); if (yOffset < -2f && !hasLayerSwapped) { hasLayerSwapped = true; elevatorAnimator.gameObject.SetLayerRecursively(LayerMask.NameToLayer("BG_Critical")); } elevatorTransform.position = elevatorStartDepartPosition + new Vector3(0f, yOffset, 0f); if (facewallAnimator != null) { facewallAnimator.Sprite.UpdateZDepth(); } yield return(null); } yield break; }