当我尝试使用PlayerPrefsManager.SetFood()
时,它会设置所有播放器pref字符串。因此,如果我执行PlayerPrefsManager.SetFood(Monday, Bread)
,则会将MONDAY_KEY
,TUESDAY_KEY
,WEDNESDAY_KEY
等设置为Bread
。有人可以指出我的错误吗?
编辑:我知道它是if
函数中的所有SetFood
语句(而不是else if
语句),但是由于函数的2个或更多个实例可能是同时调用我替换了所有else if
语句(我不确定这是否是正确的措辞)。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerPrefsManager : MonoBehaviour {
const string MONDAY_KEY = "null";
const string TUESDAY_KEY = "null";
const string WEDNESDAY_KEY = "null";
const string THURSDAY_KEY = "null";
const string FRIDAY_KEY = "null";
const string SATURDAY_KEY = "null";
const string SUNDAY_KEY = "null";
public static string GetFood (string Day){
if (Day == "Monday") {
return PlayerPrefs.GetString (MONDAY_KEY);
} else if (Day == "Tuesday") {
return PlayerPrefs.GetString (TUESDAY_KEY);
} else if (Day == "Wednesday") {
return PlayerPrefs.GetString (WEDNESDAY_KEY);
} else if (Day == "Thursday") {
return PlayerPrefs.GetString (THURSDAY_KEY);
} else if (Day == "Friday") {
return PlayerPrefs.GetString (FRIDAY_KEY);
} else if (Day == "Saturday") {
return PlayerPrefs.GetString (SATURDAY_KEY);
} else if (Day == "Sunday") {
return PlayerPrefs.GetString (SUNDAY_KEY);
} else{
return "Day out of range";
}
}
public static void SetFood (string Day, string Food){
if (Day == "Monday") {
PlayerPrefs.SetString (MONDAY_KEY, Food);
} if (Day == "Tuesday") {
PlayerPrefs.SetString (TUESDAY_KEY, Food);
} if (Day == "Wednesday") {
PlayerPrefs.SetString (WEDNESDAY_KEY, Food);
} if (Day == "Thursday") {
PlayerPrefs.SetString (THURSDAY_KEY, Food);
} if (Day == "Friday") {
PlayerPrefs.SetString (FRIDAY_KEY, Food);
} if (Day == "Saturday") {
PlayerPrefs.SetString (SATURDAY_KEY, Food);
} if (Day == "Sunday") {
PlayerPrefs.SetString (SUNDAY_KEY, Food);
} if (!(Day == "Monday") || (Day == "Tuesday") || (Day == "Wednesday") || (Day == "Thursday") || (Day == "Friday") || (Day == "Saturday") || (Day == "Sunday")) {
Debug.LogError ("Day out of range");
}
}
}
答案 0 :(得分:0)
您的所有密钥都具有相同的值,即“null”。这就是为什么你得到相同的值,无论const var名称是否不同。实际值应该不同。给它这样的独特价值。
const string MONDAY_KEY = "monday_key";
const string TUESDAY_KEY = "tuesday_key";
const string WEDNESDAY_KEY = "wednesday_key";
const string THURSDAY_KEY = "thursday_key";
const string FRIDAY_KEY = "friday_key";
const string SATURDAY_KEY = "saturday_key";
const string SUNDAY_KEY = "sunday_key";
此外,编写SetFood方法的更好方法是这样的。在设置PlayerPrefs之前检查有效性,如果无效则返回。注意我删除了'!'从if语句的开头开始的运算符,并在单独的条件元素中使用'!='。此外,即使在静态函数中也可以使用if else
语句。不要担心它会被同时调用。除非您实现多线程,否则Unity会确保逐个调用它。 ;)
public static void SetFood (string Day, string Food){
if ((Day != "Monday") || (Day != "Tuesday") || (Day != "Wednesday") || (Day != "Thursday") || (Day != "Friday") || (Day != "Saturday") || (Day != "Sunday") ) {
Debug.LogError ("Day out of range");
return;
}
if (Day == "Monday") {
PlayerPrefs.SetString (MONDAY_KEY, Food);
} else if (Day == "Tuesday") {
PlayerPrefs.SetString (TUESDAY_KEY, Food);
} else if (Day == "Wednesday") {
PlayerPrefs.SetString (WEDNESDAY_KEY, Food);
} else if (Day == "Thursday") {
PlayerPrefs.SetString (THURSDAY_KEY, Food);
} else if (Day == "Friday") {
PlayerPrefs.SetString (FRIDAY_KEY, Food);
} else if (Day == "Saturday") {
PlayerPrefs.SetString (SATURDAY_KEY, Food);
} else if (Day == "Sunday") {
PlayerPrefs.SetString (SUNDAY_KEY, Food);
}
}