nirasan's tech blog

趣味や仕事の覚え書きです。Linux, Perl, PHP, Ruby, Javascript, Android, Cocos2d-x, Unity などに興味があります。

Unity で List を string に変換して PlayrePrefs に保存する

List を string に変換するコード

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

namespace MyUtils {

	public class SerializeUtils {

		public static string Serialize<T> (T obj) {
			var b = new BinaryFormatter();
			var m = new MemoryStream();
			b.Serialize(m, obj);
			return Convert.ToBase64String (
				m.GetBuffer ()
			);
		}

		public static T Deserialize<T> (string str) {
			var b = new BinaryFormatter();
			var m = new MemoryStream(Convert.FromBase64String(str));
			return (T)b.Deserialize(m);
		}
	}
}

List を string に変換するコードのテスト

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using NUnit.Framework;
using MyUtils;

namespace MyUtilsTest {

	[TestFixture]
	[Category("MyUtils")]
	public class MyUtilsTest {

		[Test]
		public void SerializeTest () {

			List<int> list1 = new List<int> { 0, 1, 1, 2, 3, 5, 8, 13 };

			string serizlizedList1 = SerializeUtils.Serialize<List<int>> (list1);
			Debug.Log (serizlizedList1);

			List<int> list2 = SerializeUtils.Deserialize<List<int>> (serizlizedList1);
			Assert.That (list2 [0], 0);
			Assert.That (list2 [3], 2);
			Assert.That (list2 [7], 13);
		}
	}

}

使用例

// List を PlayerPrefs にセット
PlayerPrefs.SetString ("list1", SerializeUtils.Serialize<List<int>> (list1));
// PlayerPrefs から List をゲット
List<int> list2 = SerializeUtils.Deserialize<List<int>> (PlayerPrefs.GetString ("list1"));