C# Unity 2019.2.12f1播放器参考暂停脚本
我正在为我正在进行的一个项目构建一个认证系统 其中一部分是在本地保存用户数据,这样就不必在每次运行时都连接到云,也不必强制登录等 我遇到的问题是,当我试图设置PlayerPrefs时,它不起作用。我让它在每个PlayerPrefs.SetString之前运行Debug.Log,它只显示第一个 我可以在Start()中执行PlayerPrefs.SetString,但由于某些原因,它在这里不起作用,我不知道为什么 在我保存到PlayerPrefs之前,一切都正常C# Unity 2019.2.12f1播放器参考暂停脚本,c#,firebase,unity3d,authentication,C#,Firebase,Unity3d,Authentication,我正在为我正在进行的一个项目构建一个认证系统 其中一部分是在本地保存用户数据,这样就不必在每次运行时都连接到云,也不必强制登录等 我遇到的问题是,当我试图设置PlayerPrefs时,它不起作用。我让它在每个PlayerPrefs.SetString之前运行Debug.Log,它只显示第一个 我可以在Start()中执行PlayerPrefs.SetString,但由于某些原因,它在这里不起作用,我不知道为什么 在我保存到PlayerPrefs之前,一切都正常 公共字典LoggedUser=ne
公共字典LoggedUser=new Dictionary()代码>
您正在设置userName
PlayerPrefs.SetString(“用户名”,LoggedUser[“用户名])
并检索用户名
Log(“欢迎”+PlayerPrefs.GetString(“用户名”)
也应该是
PlayerPrefs.SetString(“用户名”,LoggedUser[“用户名])
而不是
PlayerPrefs.SetString(“用户名”,LoggedUser[“用户名])
您正在设置用户名
PlayerPrefs.SetString(“用户名”,LoggedUser[“用户名])
并检索用户名
Log(“欢迎”+PlayerPrefs.GetString(“用户名”)
也应该是
PlayerPrefs.SetString(“用户名”,LoggedUser[“用户名])
而不是
PlayerPrefs.SetString(“用户名”,LoggedUser[“用户名])
我找到了解决办法
getUserData()方法正在运行async,这将创建一个新线程。PlayerPrefs只能在主线程上运行
我的解决方案是创建一个布尔值,当数据加载到LoggedUser中时,我将其转换为true。我的Update()方法正在观察是否将其转换为true,然后调用setPlayer()
谢谢你们的帮助 我找到了解决办法
getUserData()方法正在运行async,这将创建一个新线程。PlayerPrefs只能在主线程上运行
我的解决方案是创建一个布尔值,当数据加载到LoggedUser中时,我将其转换为true。我的Update()方法正在观察是否将其转换为true,然后调用setPlayer()
谢谢你们的帮助 如果你不介意的话,我可以把你的答案再详细一点
如果使用而不是ContinueWith,则继续逻辑将自动出现在主线程上(因此您可以编写PlayerPrefs
)。如果您愿意比较的话,我将在中介绍大量使用Firebase和Unity处理线程的方法
此外,这是一种暗箭伤人的做法,但如果您使用的是实时数据库,那么您也可能使用。如果是这种情况,那么在游戏的两次运行之间实际上会持续(我会在中稍微介绍一下)。由于实时数据库还缓存您在本地请求的数据,您实际上可能正在做Firebase插件将为您处理的额外工作 如果你不介意的话,我可以把你的答案再详细一点
如果使用而不是ContinueWith,则继续逻辑将自动出现在主线程上(因此您可以编写PlayerPrefs
)。如果您愿意比较的话,我将在中介绍大量使用Firebase和Unity处理线程的方法
此外,这是一种暗箭伤人的做法,但如果您使用的是实时数据库,那么您也可能使用。如果是这种情况,那么在游戏的两次运行之间实际上会持续(我会在中稍微介绍一下)。由于实时数据库还缓存您在本地请求的数据,您实际上可能正在做Firebase插件将为您处理的额外工作 PlayerPrefs.Save()将数据写入磁盘(例如,在pc上它是hdd/ssd,在移动设备上它是内部存储器(我知道此信息是2*2=4:D))。也许你的计算机没有权限从应用程序中写入日期,只需在其他设备或其他操作系统上尝试,否则上面编写的代码中的所有内容看起来都很好。此外,如果我错了,并且没有设备权限问题,那么你必须在与上面的脚本相关的其他脚本中搜索问题(如果有)什么样的搜索问题?我是计算机管理员,它在同一脚本的开始方法中工作。我的意思是,你的问题必须在其他脚本中搜索,而不是你在这里发布的这个脚本(这只是假设),它在哪里工作?在编辑器中还是在实际设备上构建之后?或者你的目标平台是什么?PlayerPrefs.Save()在磁盘上写入数据(例如,在pc上它是hdd/ssd,在移动设备上它是内部存储器(我知道这个信息是2*2=4:D))。可能您的计算机上没有写入应用程序日期的权限,只需在其他设备或其他操作系统上尝试,否则上面编写的代码中的所有内容看起来都很好。此外,如果我错了,并且没有设备权限问题,则您必须在与上面的脚本相关的其他脚本中搜索问题(如果有)什么样的搜索问题?我是计算机管理员,它在同一脚本的开始方法中工作。我的意思是,你的问题必须在其他脚本中搜索,而不是你在这里发布的这个脚本(这只是假设)它在哪里工作?在编辑器中还是在实际设备上构建之后?或者你的目标平台是什么?谢谢你指出,我确实注意到了这一点,并且已经解决了它。但是这不是我问题的解决方法。谢谢你指出,我确实注意到了这一点,并且已经解决了它。但是这不是我问题的解决方法
public void getUserData(string id, string email)
{
Debug.Log("Getting User Data for ID: " + id);
FirebaseDatabase.DefaultInstance
.GetReference(id)
.GetValueAsync().ContinueWith(task1 =>
{
if (task1.IsFaulted)
{
Debug.Log("Failed");
}
else if (task1.IsCompleted)
{
Debug.Log("Data Retrieved");
DataSnapshot snapshot = task1.Result;
foreach (DataSnapshot user in snapshot.Children)
{
string firstName = user.Child("firstName").Value.ToString();
string lastName = user.Child("lastName").Value.ToString();
string sex = user.Child("sex").Value.ToString();
string country = user.Child("country").Value.ToString();
string age = user.Child("age").Value.ToString();
string userName = user.Child("userName").Value.ToString();
Debug.Log(firstName);
LoggedUser.Add("FirstName", firstName);
LoggedUser.Add("LastName", lastName);
LoggedUser.Add("Email", email);
LoggedUser.Add("age", age);
LoggedUser.Add("sex", sex);
LoggedUser.Add("country", country);
LoggedUser.Add("userName", userName);
Debug.Log("Welcome " + LoggedUser["FirstName"]);
Debug.Log("User signed in successfully: " +newUser.Email +" " +newUser.UserId);
setPlayer();
}
}
});
}
public void setPlayer()
{
Debug.Log("Saving to PlayerPrefs");
Debug.Log("Setting First Name");
PlayerPrefs.SetString("FirstName", "Ezekiel");
Debug.Log("Setting Last Name");
PlayerPrefs.SetString("LastName", LoggedUser["LastName"]);
Debug.Log("Setting Email");
PlayerPrefs.SetString("Email", LoggedUser["Email"]);
Debug.Log("Setting Age");
PlayerPrefs.SetString("age", LoggedUser["age"]);
Debug.Log("Setting Sex");
PlayerPrefs.SetString("sex", LoggedUser["sex"]);
Debug.Log("Setting Country");
PlayerPrefs.SetString("country", LoggedUser["country"]);
Debug.Log("Setting userName");
PlayerPrefs.SetString("userName", LoggedUser["username"]);
Debug.Log("Setting Loggedn State");
PlayerPrefs.SetInt("LoggedIn", 1);
Debug.Log("Saving Player Prefs");
PlayerPrefs.Save();
Debug.Log("Welcome " + PlayerPrefs.GetString("username"));
}