Unity技術メモ

スポンサーリンク
スポンサーリンク
スポンサーリンク

PlayerPrefsでListやDictionaryを保存する

参考サイト
PlayerPrefsでListやDictionaryの保存【Unity】 · GitHub
//  PlayerPrefsUtility.cs
//  http://kan-kikuchi.hatenablog.com/entry/PlayerPrefsUtility
//
//  Created by kan kikuchi on 2015.10.22.

using UnityEngine;
using System.Collections;

using System.Collections.Generic;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System;

/// <summary>
/// PlayerPrefsに関する便利クラス
/// </summary>
public static class PlayerPrefsUtility {

    //=================================================================================
    //保存
    //=================================================================================

    /// <summary>
    /// リストを保存
    /// </summary>
    public static void SaveList<T>(string key , List<T> value){
        string serizlizedList = Serialize<List<T>> (value);
        PlayerPrefs.SetString (key, serizlizedList);
    }

    /// <summary>
    /// ディクショナリーを保存
    /// </summary>
    public static void SaveDict<Key, Value>(string key , Dictionary<Key, Value> value){
        string serizlizedDict = Serialize<Dictionary<Key, Value>> (value);
        PlayerPrefs.SetString (key, serizlizedDict);
    }

    //=================================================================================
    //読み込み
    //=================================================================================

    /// <summary>
    /// リストを読み込み
    /// </summary>
    public static List<T> LoadList<T> (string key){
        //keyがある時だけ読み込む
        if (PlayerPrefs.HasKey (key)) {
            string serizlizedList = PlayerPrefs.GetString (key);
            return Deserialize<List<T>> (serizlizedList);
        }

        return new List<T> ();
    }

    /// <summary>
    /// ディクショナリーを読み込み
    /// </summary>
    public static Dictionary<Key, Value> LoadDict<Key, Value> (string key){
        //keyがある時だけ読み込む
        if (PlayerPrefs.HasKey (key)) {
            string serizlizedDict = PlayerPrefs.GetString (key);
            return Deserialize<Dictionary<Key, Value>> (serizlizedDict);
        }

        return new Dictionary<Key, Value> ();
    }

    //=================================================================================
    //シリアライズ、デシリアライズ
    //=================================================================================

    private static string Serialize<T> (T obj){
        BinaryFormatter binaryFormatter = new BinaryFormatter ();
        MemoryStream    memoryStream    = new MemoryStream ();
        binaryFormatter.Serialize (memoryStream , obj);
        return Convert.ToBase64String (memoryStream   .GetBuffer ());
    }

    private static T Deserialize<T> (string str){
        BinaryFormatter binaryFormatter = new BinaryFormatter ();
        MemoryStream    memoryStream    = new MemoryStream (Convert.FromBase64String (str));
        return (T)binaryFormatter.Deserialize (memoryStream);
    }
}

クエスト(ミッション)を実装

https://note.com/azumagoro/n/n1e915ab38ead 参考サイト
https://note.com/azumagoro/n/nbdc7d4b77482 (最後のソースは有料。購入しましたが、これだけでクエスト機能が動くという全ソースはないので注意)
こちらにはUnity Excel Import Makerを使うとありますが、個人的にはhttps://qiita.com/mikito/items/2ad911f69180c15102a1 Unity Excel Importerの方が使いやすいと思います。

かんたんな手書きエフェクトを実装

https://matcha-choco010.net/2019/01/24/unity-handdrawn-effect-timeline/ 参考サイト

1 Star2 Stars3 Stars4 Stars5 Stars (まだ投票されていません)
読み込み中...

コメント

タイトルとURLをコピーしました