Проблема в 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;
}
}
}
}
}