我有三个要在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是如何来回传递这些值的。但是我会更新示例代码来展示我目前的情况。
答案:
rutter:
简短的回答:Unity不会序列化inspector值。如果你想要存储数据,最好放在被检查的组件里。
你可以把Unity想成一个巨兽对象工厂。当下载了场景和资源之后,它可以实例化数以百计的GameObject和组件,然后填入序列化数据,包括场景中和资源引用的。每当改编代码以及重新编译组件的时候,它将会在场景中为对象多次重复这个过程。当这种情况发生时,所有没有序列化的数据都将被销毁。
每次重新编译的时候,你就会失去一个inspector对象。
每次加载场景的时候,你就将会失去这个inspector对象。
我从来没有检查过Unity是否在组件取消选择时终止inspector对象,如果是,我也不会惊讶。
最重要的:编辑器脚本永远不会包含在你的最终版本里,如果客户端的任何东西依赖于它们将多么令人惊讶。
回到简短回答:我不知道那个字符串是做什么的,但你所期望的永久数据不应该通过inspector存储。