public static T Spawn <T>(VoxelStorage.Point point) where T : Transmutable { GameObject gameObject; { Transmutable prev = VoxelStorage.instance.Lookup(point); if (prev != null) { gameObject = prev.gameObject; Destroy(prev); } else { gameObject = Instantiate(Resources.Load <GameObject>("Transmutable"), point.ToVector3(), Quaternion.identity); } } var spawned = gameObject.AddComponent <T>(); spawned.point = point; VoxelStorage.instance.AddOrReplace(point, spawned); UpdateNeighbors(point, spawned.GetElement()); return(spawned); }