Как сделать сохранения

Подскажите пожалуйста, что надо исправить, и как завершить данный кусок кода.
Это то что мне удалось найти и дополнить а так же поправить, но я не до конца уверен в правильности синтаксиса и еще некоторые моменты:

ObjectsPositions.Add(obj); //компилятор ругается
obj не удается преобразовать из GameObject в SaveGameToM.myVector3


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;

public class SaveGameToM : MonoBehaviour
{

public GameObject Cube1Pref;


public struct myVector3
{
  public float  x, y, z;
}


[SerializeField]
public List<myVector3> ObjectsPositions = new List<myVector3>();

public void Start()
{
    ObjectsPositions = Load();

    foreach (var pos in ObjectsPositions)
    {
        Instantiate(Cube1Pref, new Vector3(pos.x, pos.y, pos.z), Quaternion.identity);
    }
}

public void OnApplicationQuit()
{
foreach (var obj in GameObject.FindGameObjectsWithTag("Cube1"))

    {
        ObjectsPositions.Add(obj);                                                       
    }

    Save(ObjectsPositions);
}
//Сериализовывать эту структурыв JSON или BinarySerialize.

void ListLoad()
{

        return;
        // [десериализуем оттуда, куда сериализуем в методе Save]
    }

void Save(List<myVector3> positions)
{
   
    // [сериализуем positions
}

Метод FindGameObjectsWithTag возвращает тип GameObject а коллекция ObjectsPositions содержит тип SaveGameToM.myVector3.
Какая структура GameObject класса, там есть свойства типа SaveGameToM.myVector3 ? Если да, то нужно сохранять значения этих свойств а не объект GameObject целиком.
Кстати пользовательские классы лучше называть с заглавной буквы SaveGameToM.MyVector3