Unity_數據持久化_PlayerPrefs基礎

Unity數據持久化

一、數據持久化基礎概念

1.1 什么是數據持久化

定義:
數據持久化就是將內存中的數據模型轉換為存儲模型,以及將存儲模型轉換為內存中的數據模型的統稱。

通俗解釋:
將游戲數據存儲到硬盤,硬盤中數據讀取到游戲中,也就是傳統意義上的存盤。

核心概念:

  • 內存數據模型:游戲運行時在內存中的數據
  • 存儲模型:保存在硬盤上的數據格式
  • 轉換過程:序列化和反序列化

1.2 數據持久化的作用

1. 游戲進度保存

  • 保存玩家游戲進度
  • 記錄關卡完成狀態
  • 存儲角色屬性數據

2. 用戶設置保存

  • 保存游戲設置選項
  • 記錄用戶偏好設置
  • 存儲界面配置信息

3. 數據統計分析

  • 記錄游戲統計數據
  • 保存用戶行為數據
  • 用于游戲優化分析

1.3 Unity中的數據持久化方式

1. PlayerPrefs

  • 適合存儲簡單數據
  • 鍵值對存儲方式
  • 自動加密存儲

2. JSON序列化

  • 適合復雜數據結構
  • 可讀性強的文本格式
  • 跨平臺兼容性好

3. XML序列化

  • 結構化數據存儲
  • 支持復雜數據類型
  • 可擴展標記語言

4. 二進制序列化

  • 存儲效率高
  • 數據安全性好
  • 文件體積小

二、PlayerPrefs

2.1 PlayerPrefs基礎概念

什么是PlayerPrefs:
PlayerPrefs是Unity自帶的類,用于保存和讀取玩家設置。它是Unity提供的最簡單的數據持久化解決方案。

特點:

  • 鍵值對存儲方式
  • 支持三種基本數據類型
  • 自動加密存儲
  • 跨平臺兼容性好

2.2 PlayerPrefs常用方法

1. 數據類型支持
PlayerPrefs只提供了三個數據類型的存取方法:

// 浮點數類型
PlayerPrefs.SetFloat(string key, float value);
PlayerPrefs.GetFloat(string key, float defaultValue);// 整數類型  
PlayerPrefs.SetInt(string key, int value);
PlayerPrefs.GetInt(string key, int defaultValue);// 字符串類型
PlayerPrefs.SetString(string key, string value);
PlayerPrefs.GetString(string key, string defaultValue);

2. 數據保存機制

// 重要:直接調用Set相關方法,只會把數據存到內存中,不會保存到本地
PlayerPrefs.SetInt("score", 100);// 當游戲結束時,Unity會自動把內存中的數據保存到本地
// 但是如果游戲不是正常結束,而是被強制退出,那么內存中的數據不會被保存到本地// 手動保存:只要調用了Save方法,那么內存中的數據就會被保存到本地
PlayerPrefs.Save();

3. 數據讀取機制

// 運行時調用了Get相關方法,只要Set相關方法被調用過,就可以得到數據
int score = PlayerPrefs.GetInt("score");// 如果沒有調用過Set相關方法,那么Get相關方法會返回默認值
int defaultValue = PlayerPrefs.GetInt("notExistKey"); // 返回0// Get方法還有一個重載,如果沒有Set過可以手動設置默認值
int customDefault = PlayerPrefs.GetInt("notExistKey", 100); // 返回100

4. 數據刪除方法

// 刪除所有數據
PlayerPrefs.DeleteAll();// 刪除指定數據
PlayerPrefs.DeleteKey("intKey");

2.3 PlayerPrefs數據存儲位置

重要說明:
PlayerPrefs數據的存儲位置因平臺而異,不同操作系統有不同的存儲方式。

Windows平臺存儲位置:

#region Windows
// PlayerPrefs數據存儲在Windows注冊表中
// 存儲路徑:HKCU\Software\[公司名稱]\[產品名稱]
// 其中[公司名稱]和[產品名稱]是在Unity的"Project Settings"中設置的名稱// 查看方法:
// 運行 regedit
// HKEY_CURRENT_USER
// SOFTWARE
// Unity
// UnityEditor
// [公司名稱]
// [產品名稱]
#endregion

各平臺存儲位置對比:

平臺存儲位置說明
Windows注冊表HKCU\Software\[公司名稱]\[產品名稱]
macOS屬性列表文件~/Library/Preferences/[公司名稱].[產品名稱].plist
Linux配置文件~/.config/[公司名稱]/[產品名稱]
AndroidSharedPreferences/data/data/[包名]/shared_prefs/
iOSNSUserDefaults應用沙盒內的plist文件

查看存儲數據的方法:

1. Windows平臺:

// 使用注冊表編輯器查看
// 1. 按Win+R,輸入regedit
// 2. 導航到:HKEY_CURRENT_USER\SOFTWARE\Unity\UnityEditor\[公司名稱]\[產品名稱]
// 3. 可以看到所有保存的鍵值對

2. 其他平臺:

// macOS: 使用Finder查看 ~/Library/Preferences/ 文件夾
// Linux: 查看 ~/.config/ 目錄下的配置文件
// Android: 使用ADB工具查看 /data/data/[包名]/shared_prefs/
// iOS: 在Xcode中查看應用沙盒內的plist文件

項目設置影響:

// Unity項目設置中的公司名稱和產品名稱決定了存儲路徑
// Edit -> Project Settings -> Player
// Company Name: 公司名稱
// Product Name: 產品名稱// 例如:
// Company Name: "MyGameStudio"
// Product Name: "MyGame"
// Windows存儲路徑:HKCU\Software\MyGameStudio\MyGame

2.4 PlayerPrefs數據唯一性

核心概念:
PlayerPrefs中不同數據的唯一性是由key決定的,不同的key決定了不同的數據。

重要警告:
同一項目中如果不同數據key相同會造成數據丟失。

解決方案:
要保證數據不丟失就要建立一個保證key唯一的規則。

通過合理使用PlayerPrefs,可以為游戲提供基礎的數據持久化功能,特別適合存儲簡單的用戶設置和游戲進度數據。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91742.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91742.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91742.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是列存儲(Columnar Storage)?深度解析其原理與應用場景

列存儲的基本概念:顛覆傳統的數據組織方式列存儲(Column Storage)是一種革命性的數據庫存儲技術,它通過按列而非按行組織數據,從根本上改變了數據的物理存儲結構。與傳統行存儲數據庫不同,列式數據庫將每一…

機器人抓取流程介紹與實現——機器人抓取系統基礎系列(七)

機器人抓取系統基礎系列文章目錄 1. UR機械臂的ROS驅動安裝官方教程詳解——機器人抓取系統基礎系列(一) 2. MoveIt控制機械臂的運動實現——機器人抓取系統基礎系列(二) 3. 機器人(機械臂)的相機選型與安裝…

【Qt】QObject::startTimer: Timers cannot be started from another thread

QTimer對象的 start 函數調用必須和創建QTimer對象是同一個線程。 #include "QtTimerTest.h" #include <QDebug>QtTimerTest::QtTimerTest(QWidget *parent): QMainWindow(parent),m_timer(nullptr),m_timerThread(nullptr), m_workingThread(nullptr) {ui.set…

社會治安滿意度調查:為城市安全治理提供精準參考(滿意度調查公司)

在社會治理不斷深化的背景下&#xff0c;公眾對社會治安的感知與評價已成為衡量城市治理水平的重要維度&#xff08;社會治安滿意度調查&#xff09;&#xff08;公眾滿意度調查&#xff09;&#xff08;滿意度調查&#xff09;。為全面掌握市民對治安狀況的真實反饋&#xff0…

Python篇--- Python 的加載、緩存、覆蓋機制

要理解 import 與 if __name__ "__main__": 的關系&#xff0c;以及 Python 的加載、緩存、覆蓋機制&#xff0c;我們可以從 “模塊的兩種身份” 和 “導入的全過程” 入手&#xff0c;用通俗的例子一步步拆解。一、核心&#xff1a;模塊的 “雙重身份” 與 __name_…

Java設計模式之行為型模式(訪問者模式)應用場景分析

訪問者模式&#xff08;Visitor Pattern&#xff09;作為Java設計模式中的“隱形冠軍”&#xff0c;常被開發者低估其價值。這一模式通過“雙分派”機制巧妙解耦數據結構與操作&#xff0c;為復雜系統的擴展提供了強大武器。在大廠項目中&#xff0c;訪問者模式往往出現在業務邏…

【IDEA】JavaWeb自定義servlet模板

方法一&#xff1a;&#xff08;推薦去使用方法二&#xff0c;還能創建其它代碼模板&#xff09;使用servlet模板創建Servlet類如果創建時找不到servlet模板&#xff1a;File -> Project Structure然后應用 -> OK&#xff0c;如果還是找不到Servlet模板&#xff0c;看看項…

Linux選擇

在內存中運行著的進程稱為&#xff08; 服務 &#xff09;。負責控制systemd系統和服務管理器的工具為&#xff08; systemctl &#xff09;命令。systemd管理系統服務的基本單位是&#xff08; unit &#xff09;。分配和管理資源的基本單位是&#xff08; 進程 &#xf…

【Redis學習路|第一篇】初步認識Redis

概要: 深入探討NoSQL數據庫的核心特性&#xff0c;對比傳統關系型數據庫的差異&#xff0c;重點介紹Redis作為內存數據庫的優勢與應用場景。 文章目錄認識 NoSQLNoSQL vs SQL 對比1?? 結構化 vs 非結構化2?? 關聯 vs 非關聯3?? 查詢方式對比4?? 事務特性5?? 存儲方式…

java局域網聊天室小項目架構思路

java局域網聊天室小項目架構思路 項目需求 創建一個局域網聊天系統&#xff0c;要求&#xff1a;用戶在登錄界面登錄后進入聊天窗口界面&#xff0c;能實現多用戶同時在線聊天&#xff0c;并且用戶之間可以進行私聊 項目用到的技術棧 java網絡編程java多線程java面向對象編…

vulhub-corrosion2靶機

1.安裝靶機 https://download.vulnhub.com/corrosion/Corrosion2.ovahttps://download.vulnhub.com/corrosion/Corrosion2.ova 2.掃描IP 3.掃描端口 4.訪問端口 首先訪問一下80端口 訪問一個8080端口發現是一個apache的頁面 5.掃描目錄與漏洞探測 那么我們掃描一下目錄 80…

Mysql深入學習:慢sql執行

目錄 慢查詢日志 慢查詢主要步驟 11種慢查詢的場景分析 場景一&#xff1a;SQL 沒有建立索引 場景二&#xff1a;索引未生效的典型原因 場景三&#xff1a;LIMIT 深分頁導致性能下降 場景四&#xff1a;單表數據量過大導致 SQL 性能下降 場景五&#xff1a;ORDER BY 出現…

李宏毅深度學習教程 第8-9章 生成模型+擴散模型

【2025版】12 生成式對抗網絡GAN 一 – 基本概念介紹_嗶哩嗶哩_bilibili 目錄 1. GAN生成式對抗網絡 2. GAN的訓練 散度差異 3.WGAN 4.訓練GAN 5. 如何客觀評估GAN 6. 條件型生成&#xff08;按照要求&#xff09; 7. Cycle GAN&#xff08;互轉配對&#xff09; 8. d…

1.8 axios詳解

Axios的定義與核心特性Axios是一個基于Promise的現代化HTTP客戶端庫&#xff0c;主要用于在瀏覽器和Node.js 環境中發送HTTP請求&#xff0c;旨在簡化異步數據交互流程。其核心特性如下&#xff1a;跨平臺支持&#xff1a;在瀏覽器中通過XMLHttpRequest對象發送請求&#xff0c…

41.安卓逆向2-frida hook技術-過firda檢測(五)-利用ida分析app的so文件中frida檢測函數過檢測

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 內容參考于&#xff1a;圖靈Python學院 工具下載&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取碼&#xff1…

安卓調javaScript Not find method “forceLogout“ implementatidsignature or namesp

核對一下是否實現對應的javaScript或者javaScript的方法參數對不對&#xff0c; 在這里插入圖片描述我這里一開始實現了這個方法但是沒有給參數&#xff0c;一直報異常&#xff0c;后臺說token沒給就查token的問題&#xff0c;最后發現是搞偏了&#xff0c;兩個原因&#xff0c…

【Linux網絡】:UDP(傳輸層協議)

目錄 一、鋪墊知識 1、傳輸層 2、端口號 2.1、五元組表示 一個進程通信 2.2、端口號范圍劃分 2.3、知名端口 2.4、查看端口號 2.5、問題 3、pidof & netstat 命令 ①netsate 命令 ②pidof命令 二、UDP協議 1、UDP協議格式 2、UDP報文 1.1、UDP數據封裝的過…

Effective C++ 條款19: 設計class猶如設計type

Effective C 條款19&#xff1a;設計class猶如設計type核心思想&#xff1a;設計新的class時&#xff0c;應當像語言設計者設計內置類型一樣慎重&#xff0c;考慮對象的創建、銷毀、初始化、拷貝、類型轉換等所有方面。 ?? 1. 類設計的關鍵問題域 對象生命周期管理&#xff1…

《匯編語言:基于X86處理器》第11章 MS-Windows編程(3)

本章展示的是如何用32 位Microsoft Windows API進行控制臺窗口編程。應用編程接口(API:ApplicationProgramming Interface)是類型、常數和函數的集合體&#xff0c;它提供了一種用計算機代碼操作對象的方式。本章將討論文本I/O、顏色選擇、時間與日期、數據文件I/O&#xff0c;…

在 macOS 上通過 Docker 部署DM8 (ARM 架構)

概述 達夢數據庫 (DM8) 無法直接在 Apple macOS 操作系統上原生安裝&#xff0c;通常需要通過虛擬機&#xff08;如 Parallels Desktop、VMware Fusion&#xff09;進行部署。另一種更輕量級且受 macOS 支持的方案是利用 Docker 容器技術來構建開發與測試環境。本文檔將詳細介…