字符串不能存储数据

我有三个要在Unity中设置的字符串变量。然而,当我把这些数据放到字段中,运行项目时,Unity消除了字符串。
谁能告诉我哪里出了问题?
我已经尝试了我能想到的所有可能。
在编辑器class中:

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不播放时设置字符串:
请输入图片描述
运行的时候
请输入图片描述
我想要做的是把这些在编辑器中值传递到另一个独立类的字符串里。如上述在编辑器中的字符串,我没有直接访问这些值的方法。其实我并不太清楚Unity是如何来回传递这些值的。但是我会更新示例代码来展示我目前的情况。

原文:String fields not storing data

阅读 3.4k
1 个回答

答案:
rutter:
简短的回答:Unity不会序列化inspector值。如果你想要存储数据,最好放在被检查的组件里。

你可以把Unity想成一个巨兽对象工厂。当下载了场景和资源之后,它可以实例化数以百计的GameObject和组件,然后填入序列化数据,包括场景中和资源引用的。每当改编代码以及重新编译组件的时候,它将会在场景中为对象多次重复这个过程。当这种情况发生时,所有没有序列化的数据都将被销毁。

每次重新编译的时候,你就会失去一个inspector对象。

每次加载场景的时候,你就将会失去这个inspector对象。

我从来没有检查过Unity是否在组件取消选择时终止inspector对象,如果是,我也不会惊讶。

最重要的:编辑器脚本永远不会包含在你的最终版本里,如果客户端的任何东西依赖于它们将多么令人惊讶。

回到简短回答:我不知道那个字符串是做什么的,但你所期望的永久数据不应该通过inspector存储。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进