Load the positions of the objects

In this code below, it saves all the game objects and their positions in a .xml file. Then the code should load and execute the positions of each object. But it won’t, can someone help. I really really need this code.

using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.Text;

public class _GameSaveLoad : MonoBehaviour
{
    // An example where the encoding can be found is at
    // http://www.eggheadcafe.com/articles/system.xml.xmlserialization.asp
    // We will just use the KISS method and cheat a little and use
    // the examples from the web page since they are fully described

    // This is our local private members
    Rect _Save, _Load, _SaveMSG, _LoadMSG;
    bool _ShouldSave, _ShouldLoad, _SwitchSave, _SwitchLoad;
    string _FileLocation, _FileName;

    List<SaveStructure.GameItems> _GameItems;
    GameObject[] bodies;
    string _data = string.Empty;

	Vector3 VPosition;
	
    void Awake()
    {
        _GameItems = new List<SaveStructure.GameItems>();
    }

    // When the EGO is instansiated the Start will trigger
    // so we setup our initial values for our local members
    void Start()
    {
        // We setup our rectangles for our messages
        _Save = new Rect(10, 80, 100, 20);
        _Load = new Rect(10, 100, 100, 20);
        _SaveMSG = new Rect(10, 120, 400, 40);
        _LoadMSG = new Rect(10, 140, 400, 40);

        // Where we want to save and load to and from
        _FileLocation = Application.dataPath+"/";
        _FileName = "SaveData.xml";
    }

    void Update() { }

    bool isSaving = false;
    bool isLoading = false;
    void OnGUI()
    {
        //***************************************************
        // Loading The Player...
        // **************************************************       
        if (GUI.Button(_Load, "Load")  !isLoading)
        {
            try
            {
                isLoading = true;
                GUI.Label(_LoadMSG, "Loading from: " + _FileLocation);
                LoadXML();
                Debug.Log("Data loaded");
            }
            catch (Exception ex)
            {
                Debug.LogError(ex.ToString());
            }
            finally
            {
                isLoading = false;
            }

        }

        //***************************************************
        // Saving The Player...
        // **************************************************   
        if (GUI.Button(_Save, "Save")  !isSaving)
        {
            try
            {
                isSaving = true;
                GUI.Label(_SaveMSG, "Saving to: " + _FileLocation);

                bodies = FindObjectsOfType(typeof(GameObject)) as GameObject[];
                _GameItems = new List<SaveStructure.GameItems>();
                SaveStructure.GameItems itm;
                foreach (GameObject body in bodies)
                {
                    itm = new SaveStructure.GameItems();
                    itm.ID = body.name + "_" + body.GetInstanceID();
                    itm.Name = body.name;
                    itm.posx = body.transform.position.x;
                    itm.posy = body.transform.position.y;
                    itm.posz = body.transform.position.z;
                    _GameItems.Add(itm);
                }
           
                // Time to creat our XML!
                _data = SerializeObject(_GameItems);
               
                CreateXML();
                Debug.Log("Data Saved");
            }
            catch (Exception ex)
            {
                Debug.LogError(ex.ToString());
            }
            finally
            {
                isSaving = false;
            }
        }
    }

    /* The following metods came from the referenced URL */
    string UTF8ByteArrayToString(byte[] characters)
    {
        UTF8Encoding encoding = new UTF8Encoding();
        string constructedString = encoding.GetString(characters);
        return (constructedString);
    }

    byte[] StringToUTF8ByteArray(string pXmlString)
    {
        UTF8Encoding encoding = new UTF8Encoding();
        byte[] byteArray = encoding.GetBytes(pXmlString);
        return byteArray;
    }

    // Here we serialize our UserData object of myData
    string SerializeObject(object pObject)
    {
        string XmlizedString = null;
        MemoryStream memoryStream = new MemoryStream();
        XmlSerializer xs = new XmlSerializer(typeof(List<SaveStructure.GameItems>));
        XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
        xs.Serialize(xmlTextWriter, pObject);
        memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
        XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
        return XmlizedString;
    }

    // Here we deserialize it back into its original form
    object DeserializeObject(string pXmlizedString)
    {
        XmlSerializer xs = new XmlSerializer(typeof(List<SaveStructure.GameItems>));
        MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));
        return xs.Deserialize(memoryStream);
    }

    // Finally our save and load methods for the file itself
    void CreateXML()
    {
        StreamWriter writer;
        FileInfo t = new FileInfo(_FileLocation + "/" + _FileName);
        if (!t.Exists)
        {
            writer = t.CreateText();
        }
        else
        {
            t.Delete();
            writer = t.CreateText();
        }
        writer.Write(_data);
        writer.Close();
        Debug.Log("File written.");
    }

    void LoadXML()
    {
        if (File.Exists(_FileLocation + "/" + _FileName))
        {
            StreamReader r = File.OpenText(_FileLocation + "/" + _FileName);
            string _info = r.ReadToEnd();
            r.Close();
            // notice how I use a reference to type (UserData) here, you need this
            // so that the returned object is converted into the correct type
            _GameItems = (List<SaveStructure.GameItems>)DeserializeObject(_info);
            Debug.Log("File Read with item count: " + _GameItems.Count);
        }
        else
        {
            Debug.Log("Files does not exist: " + _FileLocation + "/" + _FileName);
        }
    }
}

“It wont” isn’t a very detailed diagnostic. What does happen? Are there any errors? Is some of the loading code working, or none of it? You’ll get more help if you narrow the problem down a bit, so people know where to focus when examining your code.

Most likely you are forgetting the full script this is only 1 piece to the pie, the SaveStructure class is also needed, if you got it from the wiki, all of the code is there to use. Also, somewhere in the forums is a working example package that you can open in Unity to see how it all fits together.

This thread:
http://forum.unity3d.com/threads/62150-Saving-and-Loading-XML-collections-example

Look near the bottom of the discussion for the package, it is 618k in size.

yeah I have the save structure.cs It saves all the objects perfectly fine. and laurie it does load the .xml data fine, I just want it to execute the data by moving the objects to their positions on the .xml file

I’d have to play around with the code to find out exactly what’s going on, but the fact it explicitly saves the transform.position data separately suggests there’s an issue with restoring that on deserialization. My guess would be that you need to go through _GameItems after the load to restore the position. Where are the objects ending up on load at the moment? Do they all end up at <0,0,0>? If so, that would support my guess. If they aren’t at the origin, there’s something else going on and you’ll need to do some debug logging to see what.