XML Save transform position
Hello i want save transform position every frame or something like that. I want use xml for save data. After i want use this data for simulation move. I found a script with name "GhostRecord" but he not did not serve my purpose.
I found this script is a good choice but he save only one time the position by button save. I want save position every frame like this:
<x>0.32242</x>
<y>1.2334</y>
<z>0.0001</z>
My purpose is to make a record. If any other idea is acceptable ,like video record?
The code i found with one time save position by button save is here: using UnityEngine; using System.Collections; using System.Xml; using System.Xml.Serialization; using System.IO; using System.Text;
public class TestXML : 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;
public GameObject _Player;
UserData myData;
string _PlayerName;
string _data;
Vector3 VPosition;
// 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";
// for now, lets just set the name to Joe Schmoe
_PlayerName = "Lefteris";
// we need soemthing to store the information into
myData = new UserData();
}
void Update() {
myData._iUser.x = _Player.transform.position.x;
myData._iUser.y = _Player.transform.position.y;
myData._iUser.z = _Player.transform.position.z;
}
void OnGUI()
{
//***************************************************
// Loading The Player...
// **************************************************
if (GUI.Button(_Load, "Load"))
{
GUI.Label(_LoadMSG, "Loading from: " + _FileLocation);
// Load our UserData into myData
LoadXML();
if (_data.ToString() != "")
{
// notice how I use a reference to type (UserData) here, you need this
// so that the returned object is converted into the correct type
myData = (UserData)DeserializeObject(_data);
// set the players position to the data we loaded
VPosition = new Vector3(myData._iUser.x, myData._iUser.y, myData._iUser.z);
_Player.transform.position = VPosition;
// just a way to show that we loaded in ok
Debug.Log(myData._iUser.name);
}
}
//***************************************************
// Saving The Player...
// **************************************************
if (GUI.Button(_Save, "Save"))
{
GUI.Label(_SaveMSG, "Saving to: " + _FileLocation);
//myData._iUser.x = _Player.transform.position.x;
//myData._iUser.y = _Player.transform.position.y;
//myData._iUser.z = _Player.transform.position.z;
myData._iUser.name = _PlayerName;
// Time to creat our XML!
_data = SerializeObject(myData);
// This is the final resulting XML from the serialization process
CreateXML();
Debug.Log(_data);
}
}
/* 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(UserData));
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(UserData));
MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
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()
{
StreamReader r = File.OpenText(_FileLocation + "\\" + _FileName);
string _info = r.ReadToEnd();
r.Close();
_data = _info;
Debug.Log("File Read");
}
}
// UserData is our custom class that holds our defined objects we want to store in XML format
public class UserData
{
// We have to define a default instance of the structure
public DemoData _iUser;
// Default constructor doesn't really do anything at the moment
public UserData() { }
// Anything we want to store in the XML file, we define it here
public struct DemoData
{
public float x;
public float y;
public float z;
public string name;
}
}
Answer by GameDeveloperAf · Apr 17, 2021 at 02:58 PM
Check it out my script here >>> https://answers.unity.com/questions/1827985/merge-xml-files-as-one-xml-file.html
Your answer
Follow this Question
Related Questions
How to work with XML for dialogues systems (Handling expression, name, etc)? 0 Answers
Gameobject hierarchy recorder(Can it record more than transforms?) 0 Answers
Windows Application : using Unity vs using native C# plus WPF 1 Answer
Recording with two microphones in Unity C# 0 Answers
How can I parse two or more xml data into c # by using Resource folder? 1 Answer