override public void Load(LevelGoalData data)
    {
        CollectedGoalData casted = data as CollectedGoalData;

        if (casted != null)
        {
            int count = casted.goalPrefabs.Count;
            collectionGoals = new CollectionGoal[count];
            for (int i = 0; i < count; i++)
            {
                CollectionGoal g = new GameObject().AddComponent <CollectionGoal>();
                g.transform.parent = transform;
                g.prefabToCollect  = casted.goalPrefabs[i];
                g.numberToCollect  = casted.goalQuantities[i];
                collectionGoals[i] = g;
            }
        }
        base.Load(data);
    }
    override public LevelGoalData ForSave()
    {
        CollectedGoalData data = new CollectedGoalData();

        data.goalPrefabs    = new List <GamePiece>();
        data.goalQuantities = new List <int>();

        if (collectionGoals == null || collectionGoals.Length == 0)
        {
            collectionGoals = GetComponentsInChildren <CollectionGoal>();
        }
        for (var i = 0; i < collectionGoals.Length; i++)
        {
            data.goalPrefabs.Add(collectionGoals[i].prefabToCollect);
            data.goalQuantities.Add(collectionGoals[i].numberToCollect);
        }
        data = BaseForSave(data) as CollectedGoalData;
        return(data);
    }