Unity PlayerPrefs類進行擴展(整個對象進行保存)


盤子臉在制作單機游戲的時候,先以為沒有好多數據需要保存本地. 就沒有使用json等格式自己進行保存. 使用PlayerPrefs類,但是后面字段越來越多的時候.

PlayerPrefs保存就發現要手動寫很多代碼. 於是是否可以寫一個輔助方法自動幫我保存一個對象,取出一個對象呢?

代碼如何下:

public static class PlayerPrefsExtend 
{
    public static void Save(string objectName,LocalEntityBase o) 
    {
        Type t = o.GetType();
        FieldInfo [] fiedls =  t.GetFields();
        for (int i = 0; i < fiedls.Length; i++)
        {
            string saveName = objectName + "." + o.Identification + "." + fiedls[i].Name;
            switch (fiedls[i].FieldType.Name)
            {
                case "String":
                    PlayerPrefs.SetString(saveName, fiedls[i].GetValue(o).ToString());
                    break;
                case "Int32":
                case "Int64":
                case "Int":
                case "uInt":
                    PlayerPrefs.SetInt(saveName, (int)fiedls[i].GetValue(o));
                    break;
                case "Float":
                    PlayerPrefs.SetFloat(saveName, (float)fiedls[i].GetValue(o));
                    break;
            }
        }
    }


    public static T GetValue<T>(string objectName) where T : LocalEntityBase, new()
    {
        T newObj = new T();

        Type t = newObj.GetType();
        FieldInfo[] fiedls = t.GetFields();
        for (int i = 0; i < fiedls.Length; i++)
        {
            string saveName = objectName + "." + newObj.Identification + "." + fiedls[i].Name;
            switch (fiedls[i].FieldType.Name)
            {
                case "String":
                    fiedls[i].SetValue(newObj,PlayerPrefs.GetString(saveName));
                    break;
                case "Int32":
                case "Int64":
                case "Int":
                case "uInt":
                    fiedls[i].SetValue(newObj, PlayerPrefs.GetInt(saveName));
                    break;
                case "Float":
                    fiedls[i].SetValue(newObj,PlayerPrefs.GetFloat(saveName));
                    break;
            }
        }

        return newObj;
    }
}

操作代碼 :

PlayerPrefs.DeleteAll();

User user = new User();
user.Name = "盤子臉";
user.Age = 10;
user.Describe = "碼農=。= ";
PlayerPrefsExtend.Save("ID1", user);

user = null;

user = PlayerPrefsExtend.GetValue<User>("ID1");

Debug.Log("user name: " + user.Name);
Debug.Log("user Age: " + user.Age);
Debug.Log("user Describe: " + user.Describe);

//以前的寫法,就要手動寫很多key.
//PlayerPrefs.SetString("Name", user.Name);
//PlayerPrefs.SetInt("Age", user.Age);
//PlayerPrefs.GetString("Describe", user.Describe);

效果圖:

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM