Чтобы проверить, что объект, к которому обращается корутина, не является уничтоженным, можно использовать метод Object.ReferenceEquals()
. Давайте рассмотрим пример кода на языке C#, в котором используется корутина и проверка на уничтожение объекта SpriteRenderer:
using UnityEngine; using System.Collections; public class MyScript : MonoBehaviour { private SpriteRenderer spriteRenderer; private Coroutine myCoroutine; void Start() { spriteRenderer = GetComponent<SpriteRenderer>(); // Запускаем корутину myCoroutine = StartCoroutine(MyCoroutine()); } IEnumerator MyCoroutine() { // Ждем две секунды yield return new WaitForSeconds(2f); // Проверяем, что spriteRenderer не является null и не уничтожен if (spriteRenderer != null && !Object.ReferenceEquals(spriteRenderer, null)) { // Делаем что-то с spriteRenderer spriteRenderer.color = Color.red; } else { // Объект spriteRenderer уничтожен Debug.Log("Объект SpriteRenderer уничтожен"); } } void OnDestroy() { // Остановить корутину при уничтожении объекта StopCoroutine(myCoroutine); } }
В этом примере создана переменная spriteRenderer
, которая хранит ссылку на компонент SpriteRenderer данного объекта. Затем в методе Start
запускается корутина MyCoroutine()
.
В самой корутине мы проверяем, что spriteRenderer
не равен null
и не уничтожен при помощи метода Object.ReferenceEquals()
. Если объект spriteRenderer
не равен null
и не уничтожен, мы выполняем нужные действия с ним. В примере мы устанавливаем цвет спрайта в красный. Если объект spriteRenderer
равен null
или уничтожен, выводится сообщение об этом.
В методе OnDestroy
мы останавливаем корутину MyCoroutine()
, чтобы предотвратить возможность обратиться к уничтоженному объекту и избежать утечки памяти.