字符串字段不存储数据

时间:2014-01-09 16:14:38

标签: c# string unity3d

我有三个字符串变量,当我的引擎没有运行时,我想要统一设置。但是,当我将数据输入这些字段时,在我运行程序的那一刻,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);
}

以下是两张图片:

Unity未播放时设置字符串: enter image description here

然后当它正在播放时: enter image description here

我想要做的是在编辑器中获取这些值并将它们传递给另一个类中的另一个字符串。由于上面的字符串是在编辑器类中保存的,所以我无法直接访问这些值,如果我是诚实的,我对于统一如何来回传递这些值有点模糊。

1 个答案:

答案 0 :(得分:2)

简短回答:Unity不会序列化检查器值。如果您需要存储数据,则应该由正在检查的组件保留。

您可以将Unity视为一种庞然大物的工厂。加载场景及其资源后,它可以实例化数百或数千个游戏对象和组件,然后填充其序列化数据,包括场景和资产引用。每次代码更改并重新编译程序集时,它都会为场景中的许多对象重复该过程。当发生这种情况时,任何未被序列化的数据都将被销毁。

每次重新编译时,都会丢失检查器对象。

每次加载场景时,都会丢失检查器对象。

我从未检查Unity是否在取消选择组件时删除了检查器对象,但如果确实如此,我不会感到非常惊讶。

最重要的是:编辑器脚本永远不会包含在您的最终版本中,如果客户端中的任何内容依赖于它们,这可能会让您大吃一惊。

回到简短的回答:我不知道该字符串是做什么的,但是任何你期望永久保存的数据都不应该由检查员保存。