Anti-Cheat Toolkit(二)(Unity游戲開發(fā)--防作弊)

接上文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)


保存Prefs

然后我們打開注冊表,查看保存的值,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

找到我們儲存的值,如下圖:


Unity保存的值

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


修改PlayerPrefs

我們再去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)制文件。


修改PlayerPrefs

再去Unity加載一下:


檢測到意外修改

總結(jié):當(dāng)檢測到意外修改時,我們可以做我們自己的邏輯處理,比如退出游戲,彈框等等.

????????另外做了一個表格看下Unity自帶的PlayerPrefs和插件ObscuredPrefs支持儲存的數(shù)據(jù)類型

PlayerPrefs和 ObscuredPrefs支持的存儲類型

下篇文章寫時間檢測和速度檢測,本來想這篇寫,但是太長了,還是另外再開一篇吧。

每天多學(xué)一點(diǎn),每天進(jìn)步一點(diǎn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容