接上文http://www.itdecent.cn/p/2311c827b6a9
保護(hù)和擴(kuò)展PlayerPrefs。
為了測試存在本地的數(shù)據(jù)加了兩個按鈕:保存Prefs(點(diǎn)擊事件:保存當(dāng)前剩余的生命)和加載保存的Prefs(加載上次保存的數(shù)據(jù)),界面如下:

代碼也很簡單:
using UnityEngine;
using UnityEngine.UI;
namespace Test
{
? ? public class NewBehaviourScript : MonoBehaviour
? ? {
? ? ? ? public Text text;
? ? ? ? public Button btnDead;
? ? ? ? public Button m_SavePrefsBtn;
? ? ? ? public Button m_LoadPrefsBtn;
? ? ? ? //生命數(shù)
? ? ? ? private int live = 15;
? ? ? ? void Start()
? ? ? ? {
? ? ? ? ? ? text.text = "剩余生命:" + live;
? ? ? ? ? ? btnDead.onClick.AddListener(OnDeadClick);
? ? ? ? ? ? m_SavePrefsBtn.onClick.AddListener(OnSavePrefsClick);
? ? ? ? ? ? m_LoadPrefsBtn.onClick.AddListener(OnLoadPrefsClick);
? ? ? ? }
? ? ? ? public void OnDeadClick()
? ? ? ? {
? ? ? ? ? ? live--;
? ? ? ? ? ? if (live > 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? text.text = "剩余生命:" + live;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? live = 0;
? ? ? ? ? ? ? ? text.text = "游戲結(jié)束";
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? public void OnSavePrefsClick()
? ? ? ? {
? ? ? ? ? ? PlayerPrefs.SetInt("player lives", live);
? ? ? ? ? ? Debug.Log("SavePrefs Value:" + live);
? ? ? ? }
? ? ? ? public void OnLoadPrefsClick()
? ? ? ? {
? ? ? ? ? ? int res = PlayerPrefs.GetInt("player lives");
? ? ? ? ? ? Debug.Log("LoadPrefs Value:" + res);
? ? ? ? }
? ? }
}
運(yùn)行 項目,先點(diǎn)擊保存,保存剩余血量(15)

然后我們打開注冊表,查看保存的值,Win+R輸入regedit打開注冊表
Unity保存的PlayerPrefs值儲存在:
Mac OS
在MacOSX上PlayerPrefs是存儲在~/Library/Preferences文件夾,名為unity.[company name].[product name].plist,其中company name和product name名是在Project Setting中設(shè)置,.plist文件可用于編輯器和桌面平臺運(yùn)行。 (打開Find,按住Option鍵,點(diǎn)擊“前往 →“資源庫”,就可以找到Preferences文件夾。)
Windows
在Windows平臺下,PlayerPrefs被存儲在注冊表的 HKEY_CURRENT_USER\Software\Unity\UnityEditor\[company name]\[product name]鍵下,其中company name和product name名是在Project Setting中設(shè)置。
[HKEY_CURRENT_USER\SOFTWARE\*1\*2]
*1對應(yīng)PlayerSettings的Company Name
*2對應(yīng)Product Name
找到我們儲存的值,如下圖:

然后我們可以修改它為9:

我們再去Unity中加載一下看看:

明顯的看到我們保存的是15,但加載到的是9。
使用Anti-Cheat Toolkit后的代碼:
ObscuredPrefs.SetInt("player lives",live);
ObscuredPrefs.GetInt("player lives");
另外在Start方法中監(jiān)聽Prefs被意外修改的情況:
ObscuredPrefs.OnAlterationDetected += OnPrefsCheaterDetected;?
public void OnPrefsCheaterDetected()
? ? ? ? {
? ? ? ? ? ? Debug.Log("OnPrefsCheaterDetected");
? ? ? ? }
我們再來保存一下(15)看看注冊表怎么保存的:

保存成了二進(jìn)制文件.更改二進(jìn)制文件。

再去Unity加載一下:

總結(jié):當(dāng)檢測到意外修改時,我們可以做我們自己的邏輯處理,比如退出游戲,彈框等等.
????????另外做了一個表格看下Unity自帶的PlayerPrefs和插件ObscuredPrefs支持儲存的數(shù)據(jù)類型

下篇文章寫時間檢測和速度檢測,本來想這篇寫,但是太長了,還是另外再開一篇吧。
每天多學(xué)一點(diǎn),每天進(jìn)步一點(diǎn)。