2016-07-20 14 views
1

Ich möchte auf myNumber von UDPReceive Klasse innerhalb meiner myCSV Klasse zugreifen, aber es gibt jedes Mal 0 zurück.Zugreifen auf eine Variable aus einer anderen Klasse innerhalb einer privaten Void-Funktion C#

using UnityEngine; 
using System; 
using System.Net; 
using System.Net.Sockets; 
using System.Threading; 

public class UDPReceive : MonoBehaviour 
{ 
    Thread receiveThread; 
    UdpClient client; 
    public int port; 
    public int sizeOfData = 0; 
    public string time = ""; 
    bool myDataGram = false; 

    public static float myNumber; 

    //******************************************************** 
    //      MAIN 
    //******************************************************** 
    private static void Main() 
    { 
     UDPReceive receiveObj = new UDPReceive(); 
     receiveObj.init(); 
     string text = ""; 

     do 
     { 
      text = Console.ReadLine(); 
     } 
     while (!text.Equals("exit")); 
    } 

    //******************************************************** 
    //      START 
    //******************************************************** 

    public void Start() 
    { 
     init(); 
    } 

    //******************************************************** 
    //      ONGUI 
    //******************************************************** 
    void OnGUI() 
    { 
     GUIStyle style = new GUIStyle(); 
     style.alignment = TextAnchor.UpperLeft; 
     GUI.Box((new Rect(40, 10, 600, 600)), "Time: " + myNumber, style); 
    } 

    //******************************************************** 
    //      INIT 
    //******************************************************** 
    private void init() 
    { 
     print("UDPSend.init()"); 
     port = 3500; 

     receiveThread = new Thread(new ThreadStart(ReceiveData)); 
     receiveThread.IsBackground = true; 
     receiveThread.Start(); 

    } 

    //******************************************************** 
    //      RECEIVEDATA 
    //******************************************************** 
    private void ReceiveData() 
    { 
     client = new UdpClient(port); 

     while (true) 
     { 
      try 
      { 
       IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0); 
       byte[] data = client.Receive(ref anyIP); //THIS IS YOUR DATA 

       myDataGram = true; 

       if (myDataGram == true) 
       { 


       float myNumber2 = 555; 
       myNumber = myNumber2; 

       } 


       //Thread.Sleep(1000); 




      } 
      catch (Exception err) 
      { 
       print(err.ToString()); 
      }  
     } 
    } 
} 

und das Skript ich will es zuzugreifen, ist dies:

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

public class myCSV : MonoBehaviour 
{ 

    public TextAsset file; 
    public float mynewX; 
    public float mynewY; 
    public float mynewZ; 
    private static float myNumbersss2; 

    void Start() 
    { 


     Load(file); 

      for (int i = 1; i < 6481; i++) 
     { 

     string j = i.ToString(); 
     float mynewX = Single.Parse(Find_point_number(j).my_x); 
     float mynewY = Single.Parse(Find_point_number(j).my_y); 
     float mynewZ = Single.Parse(Find_point_number(j).my_z); 


      //print(mynewX); 
      //print(mynewY); 
      //print(mynewZ); 
      //print(Find_point_number(j).my_x); 
      //print(Find_point_number(j).my_y);             
      //print(Find_point_number(j).my_z); 


      GameObject prefab = Resources.Load("Cube") as GameObject; 
      GameObject go = Instantiate(prefab); 
      go.transform.position = new Vector3(mynewX, mynewY, mynewZ); 



      //float myNumbersss2 = UDPReceive.myNumbersss3; 




      float myNumbersss2 = UDPReceive.myNumber; 
      print("from myCSV" + myNumbersss2); 

     } 



    } 


} 

Ich habe so viele Dinge ausprobiert und sie funktionieren nicht. Ich bekomme immer 0. Ich benutze dies in der Einheit und ich habe es versucht

und es hat auch nicht funktioniert. Ich weiß wirklich nicht, was ich falsch mache.

+3

Sind Sie sicher, dass 'ReceiveData()' aufgerufen wurde und alle Bedingungen erfüllt sind, um 'myNumber' zu setzen? – John3136

Antwort

4

Ihr Skript myCSV wird wahrscheinlich vor dem Skript UDPReceive gestartet.

Sie den Zugriff auf den UDPReceive.myNumber in Start() Methode in myCSV Skript, bevor es auf 555 im Hintergrund-Thread gesetzt begann im Start() Methode des UDPReceive Skript.

Sie sollten wahrscheinlich auf die statische Variable myNumber von der Update()-Methode des UDPReceive-Skripts zugreifen. Die Update() Verfahren kontinuierlich nach der Initialisierung aller Skripte (einschließlich Ihrer myCSV-Skript), also die Variable myVariable auf 555. gesetzt werden aufgerufen wird

Ganz zu schweigen davon, dass die Variable myVariable sollte als volatile deklariert werden.

+0

netter kumpel danke – 2222