Проблема в unity с удалением ссылки на GameObject сборщиком мусора

Я делаю игру на Unity в которой есть Dictionary<string, List> objects, который обозначает блоки которые имеют id, для обращения к ним из других скриптов.Я также использую Insantiate и сохраняю его в переменную obj.Потом obj я добавляю в objects[id].И проблема в том что объект на который указывает obj удаляется сборщиком мусора и потом вылазит Missing reference exception.Причем сам GameObject на сцене не удаляется. Как это исправить? это - удаление ссылки на GameObject сборщиком мусора.

Часть кода с добавлением обьекта в objects:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml.Linq;
using System;
using System.IO;

public static class GameManager {
    Dictionary<string, List<GameObject>> objects = new Dictionary<string, List<GameObject>>();
    //..код
}

public class LevelLoader : MonoBehaviour
{
//код...
GameObject obj;

void Start() {
//код...
obj = Instantiate(el.Value, pos, Quaternion.identity);
//код...
if (id != "") {
    try
    {
        var list = GameManager.objects[id];
    }
    catch (Exception) {
       GameManager.objects[id] = new List<GameObject>();
    }
    GameManager.objects[id].Add(obj);
}
//код...
}

}

Скрипт с обращением к objects:

using System.Collections.Generic;
using UnityEngine;

public class ColorTrigger : MonoBehaviour
{
    public BlockType type = BlockType.none;
    public string id;
    [ColorHtmlProperty]
    public Color color;

    private void OnTriggerEnter2D(Collider2D collider)
    {
        var player = collider.GetComponent<Player>();
        if (player)
        {
            if (type != BlockType.none && id == "")
            {
                switch (type)
                {
                    case BlockType.brick:
                        GameManager.brickColor = color;
                        break;
                    case BlockType.bg:
                        GameManager.bgColor = color;
                        break;
                    case BlockType.thorn:
                        GameManager.thornColor = color;
                        break;
                }
            }
            else
            {
                foreach(GameObject obj in GameManager.objects[id])
                {
                    obj.GetComponentInChildren<SpriteRenderer>().color = color;
                }
            }
        }
    }
}

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