---
# System prepended metadata

title: PlayerPrefs
tags: [Unity 存檔]

---

###### tags: `Unity 存檔`
# PlayerPrefs
[toc]

# -------------------------------------------
# 使用方法

## 整數
- 儲存PlayerPrefs
```csharp=
PlayerPrefs.SetInt("Key",value);
```
- 讀取PlayerPrefs
```csharp=
PlayerPrefs.GetInt("Key");
```

## 浮點數
- 儲存PlayerPrefs
```csharp=
PlayerPrefs.SetFloat("Key",value);
```
- 讀取PlayerPrefs
```csharp=
PlayerPrefs.GetFloat("Key");
```

## 字串
- 儲存PlayerPrefs
```csharp=
PlayerPrefs.SetString("Key",value);
```
- 讀取PlayerPrefs
```csharp=
PlayerPrefs.GetString("Key");
```
---
## 其他函式

- 刪除全部key
```csharp=
PlayerPrefs.DeleteAll(); 
```

- 刪除key的名子
```csharp=
PlayerPrefs.DeleteKey("Key_name"); 
```

- 查看此KEY是否存在

    **回傳bool值**
```csharp=
PlayerPrefs.HasKey("Key_name"); 
```
---
## 測試兩個不同Scene使用PlayerPrefs

建立兩個Scene，**Scene1的程式碼可以儲存PlayerPrefs**，**Scene2的程式碼可以讀取PlayerPrefs**。

程式碼 :point_down: 

- 將PlayerPrefs的key設為「Test」，值為「Hello!」

![](https://i.imgur.com/tSTLAIL.png)

- 讀取PlayerPrefs的key時，則直接將參數放key的名稱即可

該程式會輸出PlayerPrefs的值

![](https://i.imgur.com/ske77ki.png)

當我先執行Scene2，還未執行Scene1，可從輸出得知還未有任何的PlayerPrefs被儲存

![](https://i.imgur.com/KWM9bIv.png)

而當我執行Scene1後在執行Scene2就可以讀到PlayerPrefs。
在Scene1執行時儲存PlayerPrefs，Scene2執行時才能讀取值。

![](https://i.imgur.com/rpK6psZ.png)

---

# -------------------------------------------

# 儲存位置

## 在儲存PlayerPrefs後，重新打開專案並執行Scene2

驚人的事情發生了! 即使沒有先執行Scene1來儲存PlayerPrefs，PlayerPrefs的值仍然存在! 這是因為PlayerPrefs被存在本地端電腦的檔案裡了。

## PlayerPrefs儲存在電腦的位置

> 你可以透過 Cmd (命令提示字元)，然後打上 regedit 後找到它(登錄編輯程式)。
> 存在兩個位置，一個是
>`電腦\HKEY_CURRENT_USER\Software\Unity\UnityEditor\DefaultCompany\ProjectName`
>
> ==這個是你平常用 Editor 上測試時，會寫入的地方。==
> 
> 另一個是 `電腦\HKEY_CURRENT_USER\Software\DefaultCompany\ProjectName`
> 
> ==這個是你玩這個遊戲，或別人玩你的遊戲，會存在他電腦的地方==
> 
> [name=KK]
> [資料來源:PlayerPrefs - Unity 內建簡易存檔機制](https://home.gamer.com.tw/creationDetail.php?sn=4790322)

如果打不開的話也可以打開「執行」

![](https://i.imgur.com/wyu6aaM.png)

打上regedit即可打開。

![](https://i.imgur.com/wiFCsUQ.png)

![](https://i.imgur.com/tfFRzSw.png)

可看到PlayerPrefs被儲存到此處，且確實是我們在程式碼撰寫的內容

![](https://i.imgur.com/nwGrBVB.png)

當然我們也可以把這個檔案刪除，在執行Scene2會發現輸出變成

![](https://i.imgur.com/xaJkHbA.png)


---