title: How to serialize and save a GameObject in Unity
body: <p>I have a game where the player picks up a weapon and it is then placed as the GameObject variable to my player called "MainHandWeapon" and I am trying to save that weapon through scene changes so I am trying to save it.  How I handle this is as follows :</p>
  
  <pre><code>public class Player_Manager : Character, Can_Take_Damage {
  
      // The weapon the player has.
      public GameObject MainHandWeapon;
  
      public void Save()
      {
          // Create the Binary Formatter.
          BinaryFormatter bf = new BinaryFormatter();
          // Stream the file with a File Stream. (Note that File.Create() 'Creates' or 'Overwrites' a file.)
          FileStream file = File.Create(Application.persistentDataPath + "/PlayerData.dat");
          // Create a new Player_Data.
          Player_Data data = new Player_Data ();
          // Save the data.
          data.weapon = MainHandWeapon;
          data.baseDamage = BaseDamage;
          data.baseHealth = BaseHealth;
          data.currentHealth = CurrentHealth;
          data.baseMana = BaseMana;
          data.currentMana = CurrentMana;
          data.baseMoveSpeed = BaseMoveSpeed;
          // Serialize the file so the contents cannot be manipulated.
          bf.Serialize(file, data);
          // Close the file to prevent any corruptions
          file.Close();
      }
  }
  
  [Serializable]
  class Player_Data
  {
      [SerializeField]
      private GameObject _weapon;
      public GameObject weapon{
          get { return _weapon; }
          set { _weapon = value; }
      }
  
      public float baseDamage;
      public float baseHealth;
      public float currentHealth;
      public float baseMana;
      public float currentMana;
      public float baseMoveSpeed;
  }
  </code></pre>
  
  <p>But I keep getting this error from having this setup :</p>
  
  <pre><code>SerializationException: Type UnityEngine.GameObject is not marked as Serializable.
  </code></pre>
  
  <p>What exactly am I doing wrong?</p>