[Résolu] [DB-AL] Sauvegarde des positions d'un GameObject dans un fichier texte

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Kaylian123
Messages : 7
Inscription : 20 Jan 2017 21:38

[Résolu] [DB-AL] Sauvegarde des positions d'un GameObject dans un fichier texte

Message par Kaylian123 » 20 Jan 2017 21:59

Bonjour,
Je me présente rapidement (je suis nouveau sur ce forum) : je suis un petit élève de classe préparatoire qui a besoin d'utiliser Unity (donc plein de scripts C#) pour un travail à présenter lors des concours de fin d'année... Heureux de vous rencontrer !

Mon problème est le suivant : je cherche à récupérer toutes les positions (Vector3) d'une balle qui rebondit sur un plan afin d'en faire l'étude en python... bref ! La question à du être posée à mainte reprise mais malgré mes recherches je ne trouve personne qui explique comment ajouter TOUTES les positions (à chaque nouveau passage dans la fonction void Update)...
A chaque fois que je trouve un semblant de solution l'écriture dans un fichier texte se fait d'un bloc dans une seule fonction...
en gros je voudrais utiliser ma fonction Update comme une sorte de boucle (car c'en est une il me semble) qui ajouterais à chaque passage la position de ma balle dans le fichier texte.
Si vous avez d'autres solutions à proposer je suis preneur tant qu'elles ont l'effet désiré.

Unity me renvoie trois erreurs :
"IOException: Sharing violation on path c:\Users\*Mon prénom*\Desktop\test.txt
System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.IO/FileStream.cs:320)
System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share)
(wrapper remoting-invoke-with-check) System.IO.FileStream:.ctor (string,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare)
System.IO.StreamWriter..ctor (System.String path, Boolean append, System.Text.Encoding encoding, Int32 bufferSize) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.IO/StreamWriter.cs:124)
System.IO.StreamWriter..ctor (System.String path)
(wrapper remoting-invoke-with-check) System.IO.StreamWriter:.ctor (string)
Positions..ctor () (at Assets/Positions.cs:7)"

"NullReferenceException: Object reference not set to an instance of an object
Positions.Start () (at Assets/Positions.cs:13)"

"NullReferenceException: Object reference not set to an instance of an object
Positions.Update () (at Assets/Positions.cs:19)"

Je vous préviens je suis 100% débutant, voici une ébauche de mon code :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Positions : MonoBehaviour {

    System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\Users\\*Mon prénom*\\Desktop\\test1.txt");
    private float minuteur = 0;


    // Use this for initialization
    void Start () {
        file.WriteLine(transform.position);
        file.WriteLine(minuteur);
    }
	
	// Update is called once per frame
	void Update () {
        file.WriteLine(transform.position);
        minuteur += Time.deltaTime;
        file.WriteLine(minuteur);
    }
}
Merci d'avance à tous !

P.S. : Si quoi que ce soit ne convient pas dans mon post je vous serais très reconnaissant de m'avertir afin de m'améliorer ! :-) Merci !
Dernière édition par Kaylian123 le 24 Jan 2017 19:44, édité 1 fois.

dan44180
Messages : 31
Inscription : 11 Août 2016 08:20
Contact :

Re: [DB-AL] Sauvegarde des positions d'un GameObject dans un fichier texte

Message par dan44180 » 21 Jan 2017 10:24

salut je t'ai fais un truc qui fonctionne en espérant t'aider.
la le fichier texte se cree a toutes les frames 60 fois par seconde puisqu'on est dans la boucle "FixedUpdate"
mais tu pourrais envisager de mettre a jour ta variable string sans ecrire le texte et seulement avant de quitter ton application
tu ecris le texte sur ton DD en cliquant sur un bouton ou autre.......................

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using System.IO; 

public class Positions : MonoBehaviour {

	private string mon_texte;
	private Transform mon_transform;

	// Use this for initialization
	void Start () {
		mon_transform = GetComponent<Transform> ();
		creation_texte ();
	}

	// Update is called once per frame
	void FixedUpdate () {
		creation_texte ();
	}
	//--------------------------------------------------------------------------------
	void creation_texte(){
		mon_texte = mon_texte + "\n"+ mon_transform.position;
		File.WriteAllText ("c:\\Users\\daniel\\Desktop\\test1.txt", mon_texte);	
	}
}

Kaylian123
Messages : 7
Inscription : 20 Jan 2017 21:38

Re: [DB-AL] Sauvegarde des positions d'un GameObject dans un fichier texte

Message par Kaylian123 » 21 Jan 2017 19:34

Salut !

Merci beaucoup pour la réponse, je prend ton script je regarde comment il fonctionne et je l'arrange juste comme il faut si il y a besoin !

Je tiens le sujet à jour pour donner la solution finale et le classer résolu ensuite :-)

Kaylian123
Messages : 7
Inscription : 20 Jan 2017 21:38

Re: [DB-AL] Sauvegarde des positions d'un GameObject dans un fichier texte

Message par Kaylian123 » 21 Jan 2017 21:48

Salut, après un peu de bidouillage informatique je reviens par ici sans solution mais je sens que je m'en rapproche, je m'explique :

J'ai essayé de faire en sorte que lorsque j'appuie sur la barre espace le fichier soit remplit par mon programme malheureusement rien ne se passe, même pas de message d'erreur, juste rien et lorsque je regarde dans mon fichier texte (avant ou après avoir arrêté le jeu sur Unity) celui-ci est toujours vide... voici mon code :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using System.IO;
using System;

public class essai1 : MonoBehaviour
{

    private string mon_texte;
    private Transform mon_transform;

    // Use this for initialization
    void Start()
    {
        mon_transform = GetComponent<Transform>();
        mon_texte += mon_transform.position;
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        mon_texte = mon_texte + '\n' + mon_transform.position.ToString("G4");
    }
    //--------------------------------------------------------------------------------
    void creation_texte()
    {
        if(Input.GetKey(KeyCode.Space))
            mon_texte = mon_texte + '\n' + mon_transform.position.ToString("G4");
            File.WriteAllText("C:\\Users\\Tristan\\Desktop\\test1.txt", mon_texte);
    }
}
P.S. je précise que j'ai essayé plein d'autres méthodes mais celles que j'ai trouvé ne fonctionnent pas...

Merci d'avance.

dan44180
Messages : 31
Inscription : 11 Août 2016 08:20
Contact :

Re: [DB-AL] Sauvegarde des positions d'un GameObject dans un fichier texte

Message par dan44180 » 22 Jan 2017 10:33

ca devrait aller mieux comme ca.

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using System.IO; 

public class Positions : MonoBehaviour {

	private string mon_texte;
	private Transform mon_transform;

	// Use this for initialization
	void Start () {
		mon_transform = GetComponent<Transform> ();
		mon_texte += mon_transform.position;
	}

	// Update is called once per frame
	void FixedUpdate () {
		mon_texte = mon_texte + "\n"+ mon_transform.position.ToString("G4");

		if (Input.GetKeyDown (KeyCode.Space)){
			File.WriteAllText ("c:\\Users\\daniel\\Desktop\\test1.txt", mon_texte);	
		}
	}
}

Kaylian123
Messages : 7
Inscription : 20 Jan 2017 21:38

Re: [DB-AL] Sauvegarde des positions d'un GameObject dans un fichier texte

Message par Kaylian123 » 22 Jan 2017 16:23

Ah oui effectivement petit oubli ridicule merci beaucoup beaucoup ce programme fonctionne à merveille je le publie en personnalisable pour que chacun puisse y avoir accès merci beaucoup !!

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using System.IO;

public class essai1 : MonoBehaviour
{

    private string mon_texte;
    private Transform mon_transform;
    private float Minuteur;

    // Use this for initialization
    void Start()
    {
        Minuteur = 0;
        mon_transform = GetComponent<Transform>();
        mon_texte += mon_transform.position.ToString("G4") + "--" + Minuteur.ToString("F3");
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        Minuteur += Time.deltaTime;
        mon_texte = mon_texte + "\r\n" + mon_transform.position.ToString("G4") + "--" + Minuteur.ToString("F3");

        if (Input.GetKeyDown(KeyCode.Space))
        {
            File.WriteAllText("chemin d'accès au fichier entre guillemets", mon_texte);
        }
    }
}
Il faut appuyer sur espace pendant que le jeu est lancé et les données de temps et de positions seront automatiquement écrites dans le fichier séparées par "--"

Merci !

Répondre

Revenir vers « (C#) CSharp »