C# 如何获取文本并将其保存在InputField中?
我有一个数组InputFields,在我的情况下-六个InputFields。如何从每个输入字段获取文本并保存 一切都应该是这样:我打开应用程序,更改一个、两个或所有输入字段,然后关闭应用程序。再次打开,输入字段必须是我前面写的值 我有一个代码,它似乎工作正常,但这个代码的工作原理是这样的:它只接受用户输入的最后一个值,并将其写入最后一个输入字段C# 如何获取文本并将其保存在InputField中?,c#,unity3d,input,input-field,unity3d-gui,C#,Unity3d,Input,Input Field,Unity3d Gui,我有一个数组InputFields,在我的情况下-六个InputFields。如何从每个输入字段获取文本并保存 一切都应该是这样:我打开应用程序,更改一个、两个或所有输入字段,然后关闭应用程序。再次打开,输入字段必须是我前面写的值 我有一个代码,它似乎工作正常,但这个代码的工作原理是这样的:它只接受用户输入的最后一个值,并将其写入最后一个输入字段 using System.Collections; using System.Collections.Generic; using UnityEngi
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SaveText : MonoBehaviour {
public GameObject[] InputFields;
public static string n;
public void Start ()
{
for(int i = 0; i < InputFields.Length; i++)
{
InputFields[i].GetComponent<InputField> ().text = PlayerPrefs.GetString (InputFields[i].name);
Debug.Log (PlayerPrefs.GetString (InputFields[i].name));
n = InputFields[i].name;
var input = InputFields[i].GetComponent<InputField> ();
var se = new InputField.SubmitEvent ();
se.AddListener (SubmitName);
input.onEndEdit = se;
}
}
public void SubmitName(string arg)
{
PlayerPrefs.SetString (n, arg);
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用UnityEngine.UI;
公共类SaveText:monoBehavior{
公共游戏对象[]输入字段;
公共静态字符串n;
公共无效开始()
{
for(int i=0;i
我初始化的一组输入字段,在脚本组件的自由单元格中统一拖动每个输入字段。好的,您对所有不同的播放器prefs变量使用单个变量,
n
。因此,当您更改字段时(使用SubmitName)它使用n
pref变量并对其进行更改。这将对应于您在循环中给n
的最后一个值
一个选项是让它也成为一个数组(私有字符串prefValues[]
),或者将调用输入字段传递给SubmitName
(或者更确切地说是它的名称),并使用它代替n
一个小例子(从您的代码中,您实际上可以将GameObject[]
更改为InputField[]
,从而保存一些GetComponent调用):
编辑:在下面的代码中添加了用于从prefs保存/加载的行。对于我的测试设置,我只有两个场景。两个场景都有两个输入字段和一个调用场景更改的按钮。我可以在字段中键入我喜欢的内容,更改场景并保持不变。同样,在编辑器中重新启动播放模式时也是如此
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class EventTest : MonoBehaviour
{
public InputField[] inputFields;
void Start ()
{
foreach(InputField field in inputFields)
{
// Get field values from player prefs if existing
// (it should only not exist the very first time or if you delete/clear the prefs)
if(PlayerPrefs.HasKey(field.name))
field.text = PlayerPrefs.GetString(field.name);
var se = new InputField.SubmitEvent();
se.AddListener(delegate {
SubmitText(field.name, field.text);
});
field.onEndEdit = se;
}
}
public void SubmitText(string prefKey, string prefValue)
{
// store the typed text of the respective input field
PlayerPrefs.SetString(prefKey, prefValue);
}
public void ChangeScene()
{
if(SceneManager.GetActiveScene().name == "Scene1")
{
SceneManager.LoadScene("Scene2");
}
else
{
SceneManager.LoadScene("Scene1");
}
}
}
嗯,您对所有不同的播放器prefs变量使用单个变量,
n
。因此,当您更改字段(使用SubmitName)时,它将使用该n
pref变量并对其进行更改。这将对应于您在循环中给n
的最后一个值
一个选项是让它也成为一个数组(私有字符串prefValues[]
),或者将调用输入字段传递给SubmitName
(或者更确切地说是它的名称),并使用它代替n
一个小例子(从您的代码中,您实际上可以将GameObject[]
更改为InputField[]
,从而保存一些GetComponent调用):
编辑:在下面的代码中添加了用于从prefs保存/加载的行。对于我的测试设置,我只有两个场景。两个场景都有两个输入字段和一个调用场景更改的按钮。我可以在字段中键入我喜欢的内容,更改场景并保持不变。同样,在编辑器中重新启动播放模式时也是如此
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class EventTest : MonoBehaviour
{
public InputField[] inputFields;
void Start ()
{
foreach(InputField field in inputFields)
{
// Get field values from player prefs if existing
// (it should only not exist the very first time or if you delete/clear the prefs)
if(PlayerPrefs.HasKey(field.name))
field.text = PlayerPrefs.GetString(field.name);
var se = new InputField.SubmitEvent();
se.AddListener(delegate {
SubmitText(field.name, field.text);
});
field.onEndEdit = se;
}
}
public void SubmitText(string prefKey, string prefValue)
{
// store the typed text of the respective input field
PlayerPrefs.SetString(prefKey, prefValue);
}
public void ChangeScene()
{
if(SceneManager.GetActiveScene().name == "Scene1")
{
SceneManager.LoadScene("Scene2");
}
else
{
SceneManager.LoadScene("Scene1");
}
}
}
如果要在应用程序停止或暂停后保存数据,则需要向
monobhavior
添加更多函数,以便它可以处理系统端或暂停时的其他操作
查看以下功能
这些函数将被自动调用。在这些函数中,您需要迭代文本字段并保存它们。这是在程序失去资源之前最后调用的函数之一
关于场景更改,您需要新场景告诉旧场景执行任何进一步的操作。与您一样,只有一种方法可以知道是否加载了新场景。
也许您可以在某个位置保存最后一个活动场景对象,然后在对象未清除时调用最后一个场景函数来执行保存过程。如果您想在应用程序停止或暂停后保存数据,则需要在
MonoBehavior
中添加更多函数,以便它可以处理系统结束或暂停时的其他操作
查看以下功能
这些函数将被自动调用。在这些函数中,您需要迭代文本字段并保存它们。这是在程序失去资源之前最后调用的函数之一
关于场景更改,您需要新场景告诉旧场景执行任何进一步的操作。与您一样,只有一种方法可以知道是否加载了新场景。
也许您可以在某个位置保存最后一个活动场景对象,然后在对象未清除时调用“最后一个场景”函数执行保存过程。到底是什么问题?数组输入字段中已经有字段。如果按submitName,您必须循环并从每个框中收集内容。W为要创建的每个文本字段创建一个包含属性的对象也不错access@AlexCio问题是,当我更改了输入字段中的值,然后切换到另一个场景,或关闭应用程序时,我希望在这些字段中显示我输入的值,以便输入到下一个ed它。我如何实现这个?我希望我正确理解了你想说的。尝试一下我帖子中的方法,它应该会起作用!到底是什么问题?数组输入字段中已经有字段了。如果按submitName,你必须循环并从每个框中收集内容。Wo
OnApplicationQuit()
OnApplicationPause()