none
Conserver une variable "string" de void start à void update RRS feed

  • Discussion générale

  • Bonjour,

    Voici mon programme actuel :

    using System.Collections.Generic; using System.Text; using System.IO; using System.Collections; using System.Text.RegularExpressions; using UnityEngine; using System; public class Recup_donnees_6bis : MonoBehaviour { class Data_struct { public String marker_name ; public Vector3 [] positions ; } private Data_struct [] nv_data ; GameObject [] body ; string[][] datas; int cpt = 0 ; // Int void Awake () { Application.targetFrameRate = 25; } void Start() { body = new GameObject[55]; body [0] = GameObject.Find ("RightUpLeg"); body [1] = GameObject.Find ("LeftUpLed"); body [5] = GameObject.Find ("Neck"); body [6] = GameObject.Find ("RightArm"); body [7] = GameObject.Find ("LeftArm"); body [8] = GameObject.Find ("Throat"); body [9] = GameObject.Find ("Spine1"); body [11] = GameObject.Find ("Spine"); body [12] = GameObject.Find ("Hips"); body [13] = GameObject.Find ("Scalp"); body [14] = GameObject.Find ("HeadTop_End"); body [15] = GameObject.Find ("R_Temple"); body [16] = GameObject.Find ("L_Temple"); body [17] = GameObject.Find ("RightForeArm"); body [21] = GameObject.Find ("RightHand"); body [23] = GameObject.Find ("RightHandIndex1"); body [24] = GameObject.Find ("RightHandThumb2"); body [25] = GameObject.Find ("RightHandPinky2"); body [26] = GameObject.Find ("LeftForeArm"); body [30] = GameObject.Find ("LeftHand"); body [32] = GameObject.Find ("LeftHandIndex1"); body [33] = GameObject.Find ("LeftHandThumb2"); body [34] = GameObject.Find ("LeftHandPinky2"); body [35] = GameObject.Find ("RightLed"); body [38] = GameObject.Find ("RightFoot"); body [41] = GameObject.Find ("RightFootToeBase_End"); body [42] = GameObject.Find ("RightToeBase"); body [45] = GameObject.Find ("LeftLed"); body [48] = GameObject.Find ("LeftFoot"); body [51] = GameObject.Find ("LeftFootToeBase_End"); body [53] = GameObject.Find ("LeftToeBase"); StreamReader reader = new StreamReader ("Suj01_PI_DP_C00_1.txt"); // The text file has to be saved in the "racine" of the project using (reader) { string line = " "; int lineNumber = 10; // To skip first 10 lines for (int i = 0; i < lineNumber; i++) { line = reader.ReadLine(); if (line == null) return; } string line_10; line_10 = line; string[] names = line_10.Split (new String[] {",",",,,"},StringSplitOptions.RemoveEmptyEntries);

    nv_data = new Data_struct[names.Length] ; for (int i =0 ; i< names.Length; ++i ) { nv_data[i] = new Data_struct () ; nv_data[i].marker_name = names[i] ; } line = reader.ReadLine(); line_11 = line; string[] axes = line_11.Split(new String[] {"Field #",","},StringSplitOptions.RemoveEmptyEntries); datas = new string[4000][]; int counter = 0; while (line != null) { counter++; line = reader.ReadLine(); if (line == "ANALOG") break ; if ((counter %3) != 1) continue; string lines_datas; lines_datas = line; datas[cpt] = lines_datas.Split(new string[] {","},StringSplitOptions.RemoveEmptyEntries); line = reader.ReadLine(); cpt ++ ; } for (int i = 0 ; i < cpt ; ++i ) { for (int j = 1 ; j < names.Length+1 ; j++ )

    nv_data[j-1].positions = new Vector3[cpt]; nv_data[j-1].positions[i].x = float.Parse(datas[i][j*3-2]); nv_data[j-1].positions[i].y = float.Parse(datas[i][j*3-1]); nv_data[j-1].positions[i].z = float.Parse(datas[i][j*3]); } } } } // Update is called once per frame void Update () { // To associate names_markers to avatar_joints : for (int i = 0; i < cpt; ++i) { for (int k = 0; k < body.Length; ++k) body [k].transform.position = nv_data[k].positions[i]; } } }


    Mon problème se trouve dans "void update ()" : 
    nv_data (contenant les données) n'existe pas dans "void update ()" ainsi cette erreur apparaît lorsque je clique sur "play" dans unity :

    " Object reference not set to an instance of an object"

    Comment fait on pour conserver une variable en dehors de la fonction où elle a été créée ?

    J'ai pensé à :

    public void SetString
    public string GetString

    Mais je ne sais pas comment utiliser ces lignes de code ni où les placer.

    Je vous remercie par avance de l'aide que vous pourriez m'apporter


    lundi 9 mars 2015 10:06

Toutes les réponses

  • Bonjour,

    La solution que vous avez faite devrait fonctionner. A mon avis le problème viens du fait que la variable nv_data n'a pas été initialisée avant l'appel à update.

    Dans le code que vous donnez. La seule initialisaton est présente dans la méthode Start.

    Peut-être que cette initialisation peut être faite dans le constructeur de votre classe Recup_donnees_6bis si cela répond à la logique de votre application bien entendu.

    Cordialement,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.


    lundi 9 mars 2015 10:52
  • Bonjour,

    L'initialisation se trouve avant la méthode start non ?

    public class Recup_donnees_6bis : MonoBehaviour { class Data_struct { public String marker_name ; public Vector3 [] positions ; } private Data_struct [] nv_data ;

    Bien cordialement,

    Coralie


    • Modifié Co_Lilo lundi 9 mars 2015 12:33
    lundi 9 mars 2015 12:33
  • Bonjour,

    private Data_struct [] nv_data ;

    Permet de définir la variable.

    nv_data = new Data_struct[names.Length] ;

    Permet de la définir.

    Cordialement,

    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.


    lundi 9 mars 2015 12:40
  • Bonjour,

    Mais est-ce possible ? Etant donné que le string "names" apparaît seulement dans la méthode start.

    Bien cordialement,

    Coralie

    lundi 9 mars 2015 12:55
  • Bonjour,

    En fait le problème est là :

    - Vous devez initialiser la variable nv_data avant de pouvoir l'utiliser dans le corps de votre méthode Update.

    - Vous devez utiliser la variable names pour initialisze nv_data.

    Ensuite, il vous faut déterminer à quel moment vous devez initialiser le nv_data, en fonction de quel moment vous disposez des informations vous permettant de reconstruire la variable names.

    Je en comprends pas vraiment tout ce que vous devez faire dans votre logiciel. En revanche, je pencherai pour un ordonancement de vos appels.

    Ex :

    var data = new Recup_donnees_6bis();
    
    // Appeler cette methode en premier
    // Celle-ci initialisera la variable nv_data
    data.Start();
    
    // Appeler cette methode ensuite
    // Celle-ci pourra utiliser la variable nv_data
    data.Update();

    Cordialement,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    lundi 9 mars 2015 13:15
  • Bonjour,

    Je ne suis pas sûre de savoir comment réaliser ce que vous me dites.

    Dans mon cas, je devrai faire ça alors :

    using System.Collections.Generic; using System.Text; using System.IO; using System.Collections; using System.Text.RegularExpressions; using UnityEngine; using System; public class Recup_donnees_6bis : MonoBehaviour { class Data_struct { public String marker_name ; public Vector3 [] positions ; } private Data_struct [] nv_data ; GameObject [] body ; string[][] datas; int cpt = 0 ; // Int void Awake () { Application.targetFrameRate = 25; } nv_data.Start() { body = new GameObject[55]; body [0] = GameObject.Find ("RightUpLeg"); body [1] = GameObject.Find ("LeftUpLed"); body [5] = GameObject.Find ("Neck"); body [6] = GameObject.Find ("RightArm"); body [7] = GameObject.Find ("LeftArm"); body [8] = GameObject.Find ("Throat"); body [9] = GameObject.Find ("Spine1"); body [11] = GameObject.Find ("Spine"); body [12] = GameObject.Find ("Hips"); body [13] = GameObject.Find ("Scalp"); body [14] = GameObject.Find ("HeadTop_End"); body [15] = GameObject.Find ("R_Temple"); body [16] = GameObject.Find ("L_Temple"); body [17] = GameObject.Find ("RightForeArm"); body [21] = GameObject.Find ("RightHand"); body [23] = GameObject.Find ("RightHandIndex1"); body [24] = GameObject.Find ("RightHandThumb2"); body [25] = GameObject.Find ("RightHandPinky2"); body [26] = GameObject.Find ("LeftForeArm"); body [30] = GameObject.Find ("LeftHand"); body [32] = GameObject.Find ("LeftHandIndex1"); body [33] = GameObject.Find ("LeftHandThumb2"); body [34] = GameObject.Find ("LeftHandPinky2"); body [35] = GameObject.Find ("RightLed"); body [38] = GameObject.Find ("RightFoot"); body [41] = GameObject.Find ("RightFootToeBase_End"); body [42] = GameObject.Find ("RightToeBase"); body [45] = GameObject.Find ("LeftLed"); body [48] = GameObject.Find ("LeftFoot"); body [51] = GameObject.Find ("LeftFootToeBase_End"); body [53] = GameObject.Find ("LeftToeBase"); StreamReader reader = new StreamReader ("Suj01_PI_DP_C00_1.txt"); // The text file has to be saved in the "racine" of the project using (reader) { string line = " "; int lineNumber = 10; // To skip first 10 lines for (int i = 0; i < lineNumber; i++) { line = reader.ReadLine(); if (line == null) return; } string line_10; line_10 = line; string[] names = line_10.Split (new String[] {",",",,,"},StringSplitOptions.RemoveEmptyEntries);

    nv_data = new Data_struct[names.Length] ; for (int i =0 ; i< names.Length; ++i ) { nv_data[i] = new Data_struct () ; nv_data[i].marker_name = names[i] ; } line = reader.ReadLine(); line_11 = line; string[] axes = line_11.Split(new String[] {"Field #",","},StringSplitOptions.RemoveEmptyEntries); datas = new string[4000][]; int counter = 0; while (line != null) { counter++; line = reader.ReadLine(); if (line == "ANALOG") break ; if ((counter %3) != 1) continue; string lines_datas; lines_datas = line; datas[cpt] = lines_datas.Split(new string[] {","},StringSplitOptions.RemoveEmptyEntries); line = reader.ReadLine(); cpt ++ ; } for (int i = 0 ; i < cpt ; ++i ) { for (int j = 1 ; j < names.Length+1 ; j++ )

    nv_data[j-1].positions = new Vector3[cpt]; nv_data[j-1].positions[i].x = float.Parse(datas[i][j*3-2]); nv_data[j-1].positions[i].y = float.Parse(datas[i][j*3-1]); nv_data[j-1].positions[i].z = float.Parse(datas[i][j*3]); } } } } // Update is called once per frame nv_data.Update () { // To associate names_markers to avatar_joints : for (int i = 0; i < cpt; ++i) { for (int k = 0; k < body.Length; ++k) body [k].transform.position = nv_data[k].positions[i]; } } }

    Remplacer void start et void update par nv_data.start et nv_data.update ?
    Et mettre :

     var nv_data = new Data_struct();

    En dessous de :

    		private Data_struct [] nv_data ;

    Avant la méthode start ?

    Bien cordialement,

    Coralie


    • Modifié Co_Lilo lundi 9 mars 2015 13:55
    lundi 9 mars 2015 13:47
  • Non,

    Cela ne donnera rien du tout de bon.

    Essayez quelque chose comme cela :

    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Collections;
    using System.Text.RegularExpressions;
    using UnityEngine;
    using System;
    
    
    public class Recup_donnees_6bis : MonoBehaviour {
    
    	class Data_struct {
    
    		public String marker_name ; 
    		public Vector3 [] positions ; 
    
    
    	}
    
    		private Data_struct [] nv_data ;
    		GameObject [] body ; 
    		string[][] datas; 
    	
    		int cpt = 0 ; // Int 
    
    	void Awake ()
    
    	{
    		Application.targetFrameRate = 25; 
    	}
    
    	void Start() 
    
    	{
    		body = new GameObject[55]; 
    
    		body [0] = GameObject.Find ("RightUpLeg"); 
    		body [1] = GameObject.Find ("LeftUpLed");
    		body [5] = GameObject.Find ("Neck");
    		body [6] = GameObject.Find ("RightArm");
    		body [7] = GameObject.Find ("LeftArm");
    		body [8] = GameObject.Find ("Throat");
    		body [9] = GameObject.Find ("Spine1");
    		body [11] = GameObject.Find ("Spine");
    		body [12] = GameObject.Find ("Hips");
    		body [13] = GameObject.Find ("Scalp");
    		body [14] = GameObject.Find ("HeadTop_End");
    		body [15] = GameObject.Find ("R_Temple");
    		body [16] = GameObject.Find ("L_Temple");
    		body [17] = GameObject.Find ("RightForeArm");
    		body [21] = GameObject.Find ("RightHand");
    		body [23] = GameObject.Find ("RightHandIndex1");
    		body [24] = GameObject.Find ("RightHandThumb2");
    		body [25] = GameObject.Find ("RightHandPinky2");
    		body [26] = GameObject.Find ("LeftForeArm");
    		body [30] = GameObject.Find ("LeftHand");
    		body [32] = GameObject.Find ("LeftHandIndex1");
    		body [33] = GameObject.Find ("LeftHandThumb2");
    		body [34] = GameObject.Find ("LeftHandPinky2");
    		body [35] = GameObject.Find ("RightLed");
    		body [38] = GameObject.Find ("RightFoot");
    		body [41] = GameObject.Find ("RightFootToeBase_End");
    		body [42] = GameObject.Find ("RightToeBase");
    		body [45] = GameObject.Find ("LeftLed");
    		body [48] = GameObject.Find ("LeftFoot");
    		body [51] = GameObject.Find ("LeftFootToeBase_End");
    		body [53] = GameObject.Find ("LeftToeBase");
    		
    		Init();
    		
    		StreamReader reader = new StreamReader ("Suj01_PI_DP_C00_1.txt"); // The text file has to be saved in the "racine" of the project
    		
    		using (reader) { 
    			
    			string line = " "; 
    			int lineNumber = 10;
    			// To skip first 10 lines
    				for (int i = 0; i < lineNumber; i++) 
    				{ 
    					line = reader.ReadLine(); 
    					if (line == null) return; 
    				}
    			
    			string line_10;
    			line_10 = line; 
    			string[] names = line_10.Split (new String[] {",",",,,"},StringSplitOptions.RemoveEmptyEntries); 
    			
    			line = reader.ReadLine(); 
    			line_11 = line;
    			string[] axes = line_11.Split(new String[] {"Field #",","},StringSplitOptions.RemoveEmptyEntries);
    
    			datas = new string[4000][]; 
    
    			int counter = 0;
    			while (line != null) { 
    				counter++;
    				line = reader.ReadLine(); 
    
    				if (line == "ANALOG") 
    				break ;
    
    				if ((counter %3) != 1) 
    					continue;
    
    				
    				string lines_datas; 
    				lines_datas = line;
    				datas[cpt] = lines_datas.Split(new string[] {","},StringSplitOptions.RemoveEmptyEntries); 
    
    				line = reader.ReadLine(); 
    
    
    				cpt ++ ;
    
    				
    				
    			}
    				for (int i = 0 ; i < cpt ; ++i ) 
    				{
    					for (int j = 1 ; j < names.Length+1 ; j++ ) 
    
    
    					nv_data[j-1].positions = new Vector3[cpt]; 
    				nv_data[j-1].positions[i].x = float.Parse(datas[i][j*3-2]); 
    				nv_data[j-1].positions[i].y = float.Parse(datas[i][j*3-1]);
    				nv_data[j-1].positions[i].z = float.Parse(datas[i][j*3]);
    
    
    				}
    				
    			}
    
    		}
    		
    	 }
    
    
    
    
    	// Update is called once per frame
    	void Update () {
    		this.Init();
    		
    		// To associate names_markers to avatar_joints :
    		for (int i = 0; i < cpt; ++i) {
    			for (int k = 0; k < body.Length; ++k)
    				body [k].transform.position = nv_data[k].positions[i];
    	}
    
    	}
    	
    	private void Init(){
    		StreamReader reader = new StreamReader ("Suj01_PI_DP_C00_1.txt"); // The text file has to be saved in the "racine" of the project
    		
    		using (reader) { 
    			
    			string line = " "; 
    			int lineNumber = 10;
    			// To skip first 10 lines
    			for (int i = 0; i < lineNumber; i++) 
    			{ 
    				line = reader.ReadLine(); 
    				if (line == null) return; 
    			}
    			
    			string line_10;
    			line_10 = line; 
    			string[] names = line_10.Split (new String[] {",",",,,"},StringSplitOptions.RemoveEmptyEntries); 
    			
    			nv_data = new Data_struct[names.Length] ;
    			
    			for (int i =0 ; i< names.Length; ++i )
    			{
    				nv_data[i] = new Data_struct () ; 
    				nv_data[i].marker_name = names[i] ;
    			}
    		}
    	}
    
    }
    
    

    Ce n'est pas encore tout à fait "beau" mais cela vous donnera l'idée globale : initialiser votre variable dans le cas d'un appel à Start et dans le cas d'un appel à Update.

    Cordialement,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    lundi 9 mars 2015 14:12
  • Bonjour,

    Comme ceci ?

    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Collections;
    using System.Text.RegularExpressions;
    using UnityEngine;
    using System;
    
    
    public class Recup_donnees_7 : MonoBehaviour {
    	
    	class Data_struct {
    		
    		public String marker_name ; 
    		public Vector3 [] positions ; 
    		
    		
    	}
    	
    	private Data_struct [] nv_data ;
    	GameObject [] body ; 
    	string[][] datas; 
    	
    	int cpt = 0 ; // Int 
    	
    	void Awake ()
    		
    	{
    		Application.targetFrameRate = 25; 
    	}
    	
    	void Start() 
    		
    	{
    				body = new GameObject[55]; 
    		
    				body [0] = GameObject.Find ("RightUpLeg"); 
    				body [1] = GameObject.Find ("LeftUpLed");
    				body [5] = GameObject.Find ("Neck");
    				body [6] = GameObject.Find ("RightArm");
    				body [7] = GameObject.Find ("LeftArm");
    				body [8] = GameObject.Find ("Throat");
    				body [9] = GameObject.Find ("Spine1");
    				body [11] = GameObject.Find ("Spine");
    				body [12] = GameObject.Find ("Hips");
    				body [13] = GameObject.Find ("Scalp");
    				body [14] = GameObject.Find ("HeadTop_End");
    				body [15] = GameObject.Find ("R_Temple");
    				body [16] = GameObject.Find ("L_Temple");
    				body [17] = GameObject.Find ("RightForeArm");
    				body [21] = GameObject.Find ("RightHand");
    				body [23] = GameObject.Find ("RightHandIndex1");
    				body [24] = GameObject.Find ("RightHandThumb2");
    				body [25] = GameObject.Find ("RightHandPinky2");
    				body [26] = GameObject.Find ("LeftForeArm");
    				body [30] = GameObject.Find ("LeftHand");
    				body [32] = GameObject.Find ("LeftHandIndex1");
    				body [33] = GameObject.Find ("LeftHandThumb2");
    				body [34] = GameObject.Find ("LeftHandPinky2");
    				body [35] = GameObject.Find ("RightLed");
    				body [38] = GameObject.Find ("RightFoot");
    				body [41] = GameObject.Find ("RightFootToeBase_End");
    				body [42] = GameObject.Find ("RightToeBase");
    				body [45] = GameObject.Find ("LeftLed");
    				body [48] = GameObject.Find ("LeftFoot");
    				body [51] = GameObject.Find ("LeftFootToeBase_End");
    				body [53] = GameObject.Find ("LeftToeBase");
    
    		}
    
    		private void Init(){
    		
    		StreamReader reader = new StreamReader ("Suj01_PI_DP_C00_1.txt"); 
    		
    		using (reader) { 
    			
    			string line = " "; 
    			int lineNumber = 10;
    			// To skip first 10 lines
    			for (int i = 0; i < lineNumber; i++) 
    			{ 
    				line = reader.ReadLine(); 
    				if (line == null) return; 
    			}
    			
    			string line_10;
    			line_10 = line; 
    			string[] names = line_10.Split (new String[] {",",",,,"},StringSplitOptions.RemoveEmptyEntries);
    
    			nv_data = new Data_struct[names.Length] ;
    			
    			for (int i =0 ; i< names.Length; ++i )
    			{
    				nv_data[i] = new Data_struct () ; 
    				nv_data[i].marker_name = names[i] ;
    			}
    			
    			line = reader.ReadLine(); 
    			string line_11;
    			line_11 = line;
    			string[] axes = line_11.Split(new String[] {"Field #",","},StringSplitOptions.RemoveEmptyEntries);
    			
    			datas = new string[4000][]; 
    			
    			int counter = 0;
    			while (line != null) { 
    				counter++;
    				line = reader.ReadLine(); 
    				
    				if (line == "ANALOG") 
    					break ;
    				
    				if ((counter %3) != 1) 
    					continue;
    				
    				
    				string lines_datas; 
    				lines_datas = line;
    				datas[cpt] = lines_datas.Split(new string[] {","},StringSplitOptions.RemoveEmptyEntries); 
    				
    				line = reader.ReadLine(); 
    				
    				
    				cpt ++ ;
    
    				
    			}
    			for (int i = 0 ; i < cpt ; ++i ) 
    			{
    				for (int j = 1 ; j < names.Length+1 ; j++ ) 
    
    				{
    			
    					nv_data[j-1].positions = new Vector3[cpt];
    
    				nv_data[j-1].positions[i].x = float.Parse(datas[i][j*3-2]); 
    				nv_data[j-1].positions[i].y = float.Parse(datas[i][j*3-1]);
    				nv_data[j-1].positions[i].z = float.Parse(datas[i][j*3]);
    
    				}
    				
    				
    			}
    			
    		}
    		
    	}
    
    		// Update is called once per frame
    		void Update () {
    		this.Init();
    	
    	// To associate names_markers to avatar_joints :
    		for (int i = 0; i < cpt; ++i) {
    			
    			for (int k = 0; k < body.Length; ++k)
    				
    				body [k].transform.position = nv_data[k].positions[i];
    				Debug.Log(body[1].transform.position);
    			
    		}
    	
    	}
    	
    }

    Je pense que c'est bon.

    Mais des erreurs s'affichent encore dans Unity ...

    Voici mon projet :

    J'ai récupéré des données provenant d'un fichier texte.
    Ces données sont les valeurs des positions selon les trois axes X, Y et Z.
    Ces valeurs appartiennent à différents marqueurs présents sur un corps humain.
    Les mouvements ont été enregistrés en vrai.
    Maintenant je dois reproduire ces mouvements réels sur un avatar. Pour cela j'ai associé différents marqueurs aux joints (jointures physiques) de cet avatar :

    body = new GameObject[55]; 
    
    		body [0] = GameObject.Find ("RightUpLeg"); 
    		body [1] = GameObject.Find ("LeftUpLed");
    		body [5] = GameObject.Find ("Neck");
    		body [6] = GameObject.Find ("RightArm");
    		body [7] = GameObject.Find ("LeftArm");
    		body [8] = GameObject.Find ("Throat");
    		body [9] = GameObject.Find ("Spine1");
    		body [11] = GameObject.Find ("Spine");
    		body [12] = GameObject.Find ("Hips");
    		body [13] = GameObject.Find ("Scalp");
    		body [14] = GameObject.Find ("HeadTop_End");
    		body [15] = GameObject.Find ("R_Temple");
    		body [16] = GameObject.Find ("L_Temple");
    		body [17] = GameObject.Find ("RightForeArm");
    		body [21] = GameObject.Find ("RightHand");
    		body [23] = GameObject.Find ("RightHandIndex1");
    		body [24] = GameObject.Find ("RightHandThumb2");
    		body [25] = GameObject.Find ("RightHandPinky2");
    		body [26] = GameObject.Find ("LeftForeArm");
    		body [30] = GameObject.Find ("LeftHand");
    		body [32] = GameObject.Find ("LeftHandIndex1");
    		body [33] = GameObject.Find ("LeftHandThumb2");
    		body [34] = GameObject.Find ("LeftHandPinky2");
    		body [35] = GameObject.Find ("RightLed");
    		body [38] = GameObject.Find ("RightFoot");
    		body [41] = GameObject.Find ("RightFootToeBase_End");
    		body [42] = GameObject.Find ("RightToeBase");
    		body [45] = GameObject.Find ("LeftLed");
    		body [48] = GameObject.Find ("LeftFoot");
    		body [51] = GameObject.Find ("LeftFootToeBase_End");
    		body [53] = GameObject.Find ("LeftToeBase");

    Et à présent, je dois indiquer les positions que doivent prendre ces jointures à partir des données recueillies dans le fichier texte. Ces données ont été stockées dans la variable string "nv_data".

    Vous voyez ?

    Bien cordialement,

    Coralie




    • Modifié Co_Lilo lundi 9 mars 2015 14:33
    lundi 9 mars 2015 14:32
  • Bonjour,

    Je n'ai jamais développé pour Unity. Je crois que votre problème se trouve principalement dans le développement en général.

    J'aurai du mal à vous aider, surtout si vous ne nous donnez pas les erreur rencontrées dans Unity.

    En faite, je ne connais pas le cycle de vie de MonoBehaviour.

    - Qui est appelé en premier (Start ou Update) ?

    Pouvez-vous nous donner les messages d'erreur ?

    Cordialement,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    lundi 9 mars 2015 14:44
  • Bonjour,

    Je pense que c'est start qui est appelé en premier avant toute autre méthode update. Start est appelé qu'une seule fois.

    Voici mes messagers d'erreur :

    "Object reference not set to an instance of an object" par rapport aux lignes suivantes, du nouveau code que je vous ai envoyé en dernier :
    Concernant cette première ligne, je n'avais pas cette erreur dans le premier code.

    nv_data[j-1].positions[i].x = float.Parse(datas[i][j*3-2]);

    body [k].transform.position = nv_data[k].positions[i];

    Concernant cette ligne, c'est depuis le début que j'ai cette erreur, c'est pourquoi j'ai posté une question sur ce site. (La seule présente quand j'utilisais mon premier code).

    Et j'ai également cette nouvelle erreur :

    "Array index is out of range" par rapport à cette ligne :

    datas[cpt] = lines_datas.Split(new string[] {","},StringSplitOptions.RemoveEmptyEntries);

    Ce qui n'est pas normal... Etant donné que "cpt" correspond au nombre total de lignes présentes dans le fichier texte. Je n'avais pas cette erreur dans le premier code que j'ai posté ici.

    Avez-vous des solutions face à mes erreurs ?

    Merci beaucoup de l'aide que vous m'apportez.

    Bien cordialement,

    Coralie


    • Modifié Co_Lilo lundi 9 mars 2015 15:08
    lundi 9 mars 2015 15:04
  • Bonjour,

    Je ne sais pas comment vous devez faire. Mais passez en pas à pas pour regarder à quel moment vous avez cette erreur.

    Je suis certains qu'en ayant le contexte présent lors de l'obtention de ces erreurs vous trouverez comment les corriger.

    nv_data[j-1].positions[i].x = float.Parse(datas[i][j*3-2]); 
    
    

    Si cela se passe comme vous le dites, ce n'est peut être pas la variable nv_data qui n'est pas initialisée mais plutôt les propriétés qu'elle contients.

    Vous faites des calculs qui me semblent "complexes". L'erreur se trouve peut être dans le fait que vous tentez d'accéder à des indexes invalides, etc....

    datas[cpt] = lines_datas.Split(new string[] {","},StringSplitOptions.RemoveEmptyEntries);

    Typiquement ici, je dirait que c'est cpt qui est supérieur au nombre d'enregistrements présents dans le tableau data. (ou inférieur à zéro).

    Encore une fois, ce sont des pistes. Je pense que le mieux pour vous est de chercher un peut grâce au debug les causes de vos erreurs.

    Bon courage à vous.

    Cordialmenent,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    lundi 9 mars 2015 15:22
  • Bonjour,

    Lorsque j'utilise le code du début (que j'ai posté pour poser ma question), je n'ai que cette erreur :

    "Object reference not set to an instance of an object" :

    body [k].transform.position = nv_data[k].positions[i];

    Savez vous comment résoudre cette erreur ?

    En oubliant mon dernier code, et donc les autres erreurs.

    Bien cordialement,

    Coralie

    lundi 9 mars 2015 15:30
  • Bonjour,
    Dans votre problème de départ vous nous dîte qu'il s'agit de nv_data qui n'existe pas dnas Update. Etes-vous passé en Debug pour confirmer cela.
    Si non, je vous invite à le faire.
    Cordialement,

    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    lundi 9 mars 2015 15:33
  • J'ai écrit ceci à la dernière ligne :

    		for (int i = 0; i < cpt; ++i) {
    
    						for (int k = 0; k < body.Length; ++k)
    
    								body [k].transform.position = nv_data[k].positions[i];
    								Debug.Log(body[1].transform.position);

    Et rien ne s'affiche sauf cette erreur.

    Bien cordialement,

    Coralie

    lundi 9 mars 2015 15:36
  • OK.

    Tentez cela.

    for (int i = 0; i < cpt; ++i) {
    	for (int k = 0; k < body.Length; ++k)
    	{
    		if(body == null)
    			Debug.Log("body is null!");
    			
    		if(body[k] == null)
    			Debug.Log("body[" + k  + "] is null!");
    		
    		if(body[k].transform == null)
    			Debug.Log("body[" + k  + "].transform is null!");		
    		
    		if(nv_data == null)
    			Debug.Log("nv_data is null!");
    			
    		if(nv_data[k] == null)
    			Debug.Log("nv_data[" + k  + "] is null!");
    		
    		body[k].transform.position = nv_data[k].positions[i];
    	}
    	Debug.Log(body[1].transform.position);
    }
    


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    lundi 9 mars 2015 15:42
  • Merci.

    J'ai comme affichage :

    "body[1] is null !"

    Cela signifie que mon problème provient de mes jointures liées à l'avatar ? (du string body)

    Le problème peut également provenir de nv_data ?

    Bien cordialement,

    Coralie

    lundi 9 mars 2015 15:45
  • Je regarderai votre réponse demain.

    Je dois quitter le bureau et le logiciel se trouve ici. Je n'en ai pas accès ailleurs.

    Encore merci de l'aide que vous m'apportez.

    Bonne fin d'après midi.

    Bien cordialement,

    Coralie

    lundi 9 mars 2015 15:51
  • Cela signifie que mon problème provient de mes jointures liées à l'avatar ? (du string body)

    Encore une fois, là c'est à vous de trouver quel est le problème. Je peux vous donner des pistes ou des conseils techniques pour réussir à debugger votre problème mais là vous avez vraiment la cause (body[1] is null).

    Le problème peut également provenir de nv_data ?

    Si vous avez ensuite un message dans les logs vous indiquant que nv_data est null ou que nv_data[k] est null oui.



    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    lundi 9 mars 2015 15:53
  • Bonjour,

    Il y a également l'erreur : "nv_data is null !"

    Que pourrait être le problème ? Les données enregistrées dans ces deux variables (nv_data et body[k]) ne sont pas valables en dehors de la méthode start ?

    Merci de m'avoir aidé à trouver d'où provenaient les problèmes.

    Bien cordialement,

    Coralie

    mardi 10 mars 2015 07:14
  • Bonjour,

    nv_data et body sont des champs privés de la classe. S'ils sont initialisés par Start ensuite ils peuvent être utilisés par Update.

    Ce qu'il peut se passer est que cette classe (Recup_donnees_7) soit réinstanciée, auquel cas les variables nv_data et body ne font pas partie de cette nouvelle instance.

    Cordialement,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    mardi 10 mars 2015 08:15
  • Bonjour,

    Comment cette classe peut - elle être réinstanciée ?

    Comment est- ce que je peux vérifier ceci ?

    Bien cordialement,

    Coralie

    mardi 10 mars 2015 08:22
  • Bonjour,

    C'est unity3D qui doit gérer le cycle de vie de votre instance.

    Pour voir si une nouvelle instance est créée, ajouter un log dans le constructeur de votre classe.

    public Recup_donnees_7(): base(){
        Debug.Log("Recup_donnees_7 created!");
    }

    Si c'est le cas, et si cela parait logique, vous pouvez mettre vos variables nv_data et body en static afin qu'elles puissent être partagée entre toutes les instances. (attention cependant si c'est multithreadé, vous risquez d'avoir des erreurs d'accès durant l'exécution.) :

    private static Data_struct [] nv_data;
    private static GameObject [] body; 

    Cordialement,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    mardi 10 mars 2015 09:26
  • Bonjour,

    C'est bien le cas...
    Mais lorsque j'introduis "static", cela ne change rien au problème final...
    J'ai toujours les mêmes erreurs..

    Honnêtement, je suis complètement perdue... Je ne vois pas comment résoudre ces problèmes.

    Avez vous d'autres solutions ?

    Merci beaucoup pour votre aide.

    Bien cordialement,

    Coralie

    mardi 10 mars 2015 09:46
  • Bonjour,

    Des solutions yen a pleins.

    Le soucis c'est que personnellement, je ne connais rien en Unity3D. Je peux juste vous conseiller d'aller vous documenter un peu plus sur son fonctionnement afin d'avoir les idées plus clair sur comment implémenter votre problème.

    Vous pouvez aussi poser vos questions sur le forum dédié de Unity3D où ils pourrons vous aider un peut mieux sur les solutions que vous pourriez trouver :


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    mardi 10 mars 2015 10:34
  • Bonjour,

    J'ai déjà regardé le site unity, et posé des questions. Mais aucune réponse...
    Pourtant je trouve que ma question est précise et j'y indique les erreurs trouvées.

    Merci.

    Bien cordialement,

    Coralie

    mardi 10 mars 2015 10:52
  • Redonnez-nous le code de votre fichier maintenant ? (avec les statics) S.V.P.

    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    mardi 10 mars 2015 20:14