Hi i have a requirement in one of my projects, where i have to save or store the XYZ coordinates of a moving game object(cube) in a file(Text/XML or whatever). Here my object(cube) is continously moving and rotating, and i want to store the its position values in a file dynamically.Can anybody please help me to do this in an easy way?
Hi try this script:
using System.IO;
using System;
using System.Xml;
using System.Net;
public class SaveStatistics : MonoBehaviour
{
public GameObject trackedPlayer;
public GameObject calibration;
public string version = "Prototype_0.1";
public bool bLog = true;
private static XmlWriterSettings fragmentSettings;
private string logFilePath, logFileDir;
private PlayerLocal localPlayer;
private Healthbar hb;
static FileStream logfile;
static string trackerDir = "trackerStatistics";
void Start()
{
if(bLog)
PrepareLog();
}
// Use this for initialization
void PrepareLog ()
{
print("******************* LOGFILE STARTING *****************");
XmlWriterSettings wrapperSettings = new XmlWriterSettings ();
wrapperSettings.Indent = true;
// print("TODO AUTO CREATE DIRECTORY at Savestatistics.cs...");
string basename = DateTime.Now.ToOADate ().ToString ();
logFileDir = Path.GetDirectoryName(Application.dataPath)+"/"+trackerDir+"/";
if (!Directory.Exists(logFileDir))
Directory.CreateDirectory(logFileDir);
string wrappername = logFileDir + "wrapper-" + basename + ".xml";
logFilePath = logFileDir + "log-" + basename + ".xml";
trackedPlayer = GameObject.FindGameObjectWithTag ("Player");
if(trackedPlayer != null)
{
hb = trackedPlayer.GetComponent<Healthbar>();
}
// Write the wrapper file
GameObject ld = GameObject.Find ("LevelData");
// string version = ld.GetComponent<LevelData> ().levelVersion;
string doctype = "<!DOCTYPE trackerdata
[
]>";
using (XmlWriter writer = XmlWriter.Create (wrappername, wrapperSettings)) {
writer.WriteStartDocument();
writer.WriteRaw (doctype);
writer.WriteStartElement ("trackerdata");
// meta
writer.WriteStartElement ("meta");
writer.WriteStartElement ("starttime");
writer.WriteValue (DateTime.Now);
writer.WriteEndElement ();
writer.WriteStartElement("hostname");
writer.WriteValue(Dns.GetHostName());
writer.WriteEndElement();
writer.WriteStartElement("playername");
writer.WriteValue(PlayerPrefs.GetString("Name"));
writer.WriteEndElement();
writer.WriteStartElement("playerscore");
writer.WriteValue(PlayerPrefs.GetInt("PlayerScore"));
writer.WriteEndElement();
writer.WriteElementString ("levelversion", version);
writer.WriteEndElement ();
// /meta
writer.WriteStartElement ("tracking");
writer.WriteEntityRef ("locations");
writer.Close ();
}
// Prepare the log XML fragment
logfile = new FileStream (logFilePath, FileMode.Append, FileAccess.Write, FileShare.Read);
fragmentSettings = new XmlWriterSettings ();
fragmentSettings.ConformanceLevel = ConformanceLevel.Fragment;
fragmentSettings.Indent = true;
fragmentSettings.OmitXmlDeclaration = false;
InvokeRepeating("CollectData", 0, 10); //collect data every 10 seconds
}
void CollectData ()
{
if(localPlayer == null)
{
try{
localPlayer = trackedPlayer.GetComponent<PlayerLocal>();
}catch (Exception e)
{
return;
}
return;
}
using (XmlWriter writer = XmlWriter.Create (logfile, fragmentSettings)) {
writer.WriteStartElement ("PlayerData");
writer.WriteStartAttribute ("runningTime");
writer.WriteValue (Time.timeSinceLevelLoad);
writer.WriteEndAttribute ();
writer.WriteStartElement ("location");
writer.WriteStartElement ("x");
writer.WriteValue (trackedPlayer.transform.transform.position.x);
writer.WriteEndElement ();
writer.WriteStartElement ("y");
writer.WriteValue (trackedPlayer.transform.position.y);
writer.WriteEndElement ();
writer.WriteStartElement ("z");
writer.WriteValue (trackedPlayer.transform.position.z);
writer.WriteEndElement ();
writer.WriteEndElement();
writer.WriteStartElement ("weight");
writer.WriteValue (hb.GetCurrentWeight().ToString());
writer.WriteEndElement ();
writer.WriteStartElement ("Score");
writer.WriteValue (localPlayer.Score);
writer.WriteEndElement ();
writer.WriteEndElement ();
writer.Flush ();
}
logfile.Flush ();
}
public static void AddEventInfo(string nodename, string value)
{
using (XmlWriter writer = XmlWriter.Create (logfile, fragmentSettings)) {
writer.WriteStartElement ("event");
writer.WriteStartAttribute ("runningTime");
writer.WriteValue (Time.timeSinceLevelLoad);
writer.WriteEndAttribute ();
writer.WriteStartElement (nodename);
writer.WriteValue (value);
writer.WriteEndElement ();
writer.WriteEndElement ();
writer.Flush ();
}
logfile.Flush ();
}
public static void AddPlayerStats(string nodename, string value)
{
using (XmlWriter writer = XmlWriter.Create (logfile, fragmentSettings)) {
writer.WriteStartElement ("playerstats");
writer.WriteStartAttribute ("runningTime");
writer.WriteValue (Time.timeSinceLevelLoad);
writer.WriteEndAttribute ();
writer.WriteStartElement (nodename);
writer.WriteValue (value);
writer.WriteEndElement ();
writer.WriteEndElement ();
writer.Flush ();
}
logfile.Flush ();
}
public static void AddHitEventInfo(string nodename, string value)
{
using (XmlWriter writer = XmlWriter.Create (logfile, fragmentSettings)) {
writer.WriteStartElement ("hitevent");
writer.WriteStartAttribute ("runningTime");
writer.WriteValue (Time.timeSinceLevelLoad);
writer.WriteEndAttribute ();
writer.WriteStartElement (nodename);
writer.WriteValue (value);
writer.WriteEndElement ();
writer.WriteEndElement ();
writer.Flush ();
}
logfile.Flush ();
}
}