일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- sha
- Unity Editor
- 이미지 폰트
- Job 시스템
- 샘플
- Dots
- adfit
- 단말기 해상도
- 텍스트 메시 프로
- C#
- 2D Camera
- ui
- RSA
- job
- 프레임워크
- Dynamic Font
- DotsTween
- AES
- Custom Package
- TextMeshPro
- Tween
- unity
- 가이드
- base64
- jumping ball
- 최적화
- 암호화
- 커스텀 패키지
- Framework
- 다이나믹 폰트
Archives
- Today
- Total
EveryDay.DevUp
[Unity] 프레임워크 개발 - 6. 데이터(파일) 쓰기/읽기 본문
게임 중에 일시적으로 저장되고 사용되는 정보들도 있지만, 유저의 환경 설정 데이터와 같이 앱이 설치되어 있는 한 유지되어야 하는 데이터도 존재 이런 데이터는 파일로 만들어 단말기 또는 PC에 저장
▶ Unity에서 제공하는 PlayerPrefs 를 이용한 데이터 읽기/쓰기
참고 자료 : https://docs.unity3d.com/ScriptReference/PlayerPrefs.html
: string, int, float 타입의 데이터를 저장할 수 있음
: 단일한 값으로 사용되기 보다는 게임에서 사용하고 있는 데이터 포맷 Json, xml과 같은 것들을 string으로 변환해서 저장하는 형태로 잘 사용 됨
: PlayerPrefs가 보안에 취약하기 때문에 래핑해서 사용
( Window PC를 기준으로 HKEY_CURRENT_USER/Software/Unity/UnityEditor/{$CompanyName}/{$ProjectName} 에서 PlayerPrefs의 내용 확인 가능 )
: Key는 App의 이름을 합쳐 Base64로 인코딩
: Value는 암호화를 사용할 경우 AES를 사용
using UnityEngine;
using System.IO;
using System.Text;
public class FileUtil
{
static string GetPlayerPrefKey(string key)
{
key = string.Format( "{0}_{1}", Application.productName, key );
return Crypto.EncodingBase64( key );
}
public static bool HasPlayerPrefsKey(string key)
{
string playerPrefsKey = GetPlayerPrefKey( key );
return PlayerPrefs.HasKey( playerPrefsKey );
}
public static void DeletePlayerPrefs(string key)
{
string playerPrefsKey = GetPlayerPrefKey( key );
PlayerPrefs.DeleteKey( playerPrefsKey );
PlayerPrefs.Save();
}
public static void SavePlayerPrefs(string key, string data)
{
string playerPrefsKey = GetPlayerPrefKey( key );
PlayerPrefs.SetString( playerPrefsKey, data );
PlayerPrefs.Save();
}
public static void SavePlayerPrefs(string key, int data)
{
string playerPrefsKey = GetPlayerPrefKey( key );
PlayerPrefs.SetInt( playerPrefsKey, data );
PlayerPrefs.Save();
}
public static void SavePlayerPrefs(string key, float data)
{
string playerPrefsKey = GetPlayerPrefKey( key );
PlayerPrefs.SetFloat( playerPrefsKey, data );
PlayerPrefs.Save();
}
public static void SavePlayerPrefs(string key, string data, string base64AesKey, string base64AesIV)
{
data = Crypto.EncryptAESbyBase64Key( data, base64AesKey, base64AesIV );
SavePlayerPrefs( key, data );
}
public static string GetPlayerPrefs(string key, string defaultData)
{
string playerPrefsKey = GetPlayerPrefKey( key );
return PlayerPrefs.GetString( playerPrefsKey, defaultData );
}
public static int GetPlayerPrefs(string key, int defaultData)
{
string playerPrefsKey = GetPlayerPrefKey( key );
return PlayerPrefs.GetInt( playerPrefsKey, defaultData );
}
public static float GetPlayerPrefs(string key, float defaultData)
{
string playerPrefsKey = GetPlayerPrefKey( key );
return PlayerPrefs.GetFloat( playerPrefsKey, defaultData );
}
public static string GetPlayerPrefs(string key, string defaultData, string base64AesKey, string base64AesIV)
{
string data = GetPlayerPrefs( key, defaultData );
if( string.IsNullOrEmpty( data ) == false )
{
return Crypto.EncryptAESbyBase64Key( data, base64AesKey, base64AesIV );
}
return defaultData;
}
}
▶ C#에서 제공하는 API를 이용한 데이터 읽기/쓰기
: AES를 사용하여 파일 데이터의 암복호화
using UnityEngine;
using System.IO;
using System.Text;
public class FileUtil
{
public static void WriteFile(string folderPath, string fileName, string extention, string data, string base64AesKey, string base64AesIV)
{
data = Crypto.EncryptAESbyBase64Key( data, base64AesKey, base64AesIV );
WriteFile( folderPath, fileName, extention, data );
}
public static string ReadFile(string folderPath, string fileName, string extention, string base64AesKey, string base64AesIV)
{
string data = ReadFile( folderPath, fileName, extention );
return Crypto.DecryptAESByBase64Key( data, base64AesKey, base64AesIV );
}
public static void WriteFile(string folderPath, string fileName, string extention, string data)
{
File.WriteAllText( Path.Combine( folderPath, string.Format( fileName, extention ) ), data, Encoding.UTF8 );
}
public static string ReadFile(string folderPath, string fileName, string extention)
{
return File.ReadAllText( Path.Combine( folderPath, string.Format( fileName, extention )), Encoding.UTF8 );
}
}
'FrameWork' 카테고리의 다른 글
[Unity] 프레임워크 개발 - 8. Canvas (0) | 2020.05.08 |
---|---|
[Unity] 프레임워크 개발 - 7. 암호화 변수 (0) | 2020.05.05 |
[Unity] 프레임워크 개발 - 5. 암호화 ( 비대칭형 암호화 RSA ) (0) | 2020.05.05 |
[Unity] 프레임워크 개발 - 5. 암호화 ( 단방향 암호화 SHA256 ) (0) | 2020.05.04 |
[Unity] 프레임워크 개발 - 5. 암호화 ( 대칭형 암호화 AES ) (0) | 2020.05.04 |