2014-01-09 50 views
1

我有三個字符串變量,我想在我的引擎沒有運行時進行統一設置。但是,當我將數據輸入到這些字段中時,Unity運行程序的同時擦除了字符串。字符串字段沒有存儲數據

有人可以告訴我我做錯了什麼嗎?

我用盡了一切我能想到的,我沒有得到,其中:

在編輯器類:

TestEdit target_Object; 
    public string event_NameString = ""; 
    public string event_ActionString = "Event action"; 
    public string event_Label = "Event label"; 

void OnEnable() 
{ 
    target_Object = (TestEdit)target; 
} 

public override void OnInspectorGUI() 
{ 

    GUILayout.BeginVertical(); 

    GUILayout.Space(10); 
    enum_Index = EditorGUILayout.Popup(enum_Index, enum_Option); 

    target_Object.nameString = event_NameString; 

     event_NameString = EditorGUILayout.TextField("Event Category", event_NameString); 
     event_ActionString = EditorGUILayout.TextField("Event Action", event_ActionString); 
     event_Label = EditorGUILayout.TextField("Event Label", event_Label); 


    GUILayout.Space(5); 

    GUILayout.EndVertical(); 
} 
在我的腳本代碼

,我已經連接到遊戲對象:

string nameString = ""; 
string Test2 = ""; 
string Test3 = ""; 


void OnGUI() 
{ 
    if(GUI.Button(new Rect(0,0,100,100), "Send stuff")) 
     Analytics.gua.sendEventHit(nameString, Test2, Test3, 1); 
} 

這裏是展示它還有兩個圖像:

設置字符串時的Un兩者均不打: enter image description here

然後將其播放時: enter image description here

什麼我想要做的就是把這些值在編輯器中,並將它們傳遞到一個單獨的類舉行另一個字符串。由於上面的字符串是在編輯器類中進行的,我沒有辦法直接訪問這些值,如果我誠實,我對於如何來回傳遞這些值有點模糊。

但我會更新我的代碼示例以向您展示我到目前爲止的內容。

+0

超出範圍? – matcheek

+0

我不這麼認爲。但是,字符串在編輯器腳本中 – N0xus

回答

1

簡答:Unity不會序列化檢查器值。如果您需要存儲數據,則可能應該由正在檢查的組件保存。

你可以把Unity看作是一個龐然大物的對象工廠。加載場景及其資源後,它可以實例化數百或數千個GameObjects和組件,然後填充其序列化數據,包括場景和資產引用。每次代碼更改並重新編譯程序集時,它都會重現場景中許多對象的處理過程。任何未序列化的數據將在這種情況下被銷燬。

每次你重新編譯時,你都會失去檢查器對象。

每次加載場景時,都會丟失檢查器對象。

我從來沒有檢查過Unity是否會在組件被取消選擇時丟棄檢查器對象,但如果確實如此,我不會感到驚訝。

最重要的是:編輯器腳本永遠不會包含在您的最終版本中,如果您的客戶端有任何依賴它們,這可能是一個難看的驚喜。

回到簡短的回答:我不知道那個字符串是幹什麼的,但是任何你希望是永久的數據都不應該由檢查員來保存。