iOSとAndroidでも使用できるunityのデータ保存のサンプルソースです。
保存データ用のクラスをシリアライズして保存しています。
確かunityの推奨している保存方法の一つだったと思います。
iOSnoバージョンが古いとエラーが発生するので旧式の端末ではテストできないかも?
//使用例
private SaveDatas sd ;
private string SAVE ="key文字列";
private void DataSave2(){
SaveKanri.Save(SAVE, sd);
PlayerPrefs.Save();
}
private SaveDatas DataLoad2(){
SaveDatas data_str = SaveKanri.Load<SaveDatas>(SAVE);
if( data_str != null){
return data_str;
}else{
return new SaveDatas();
}
//管理クラス
using UnityEngine;
using System.Collections;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public class SaveKanri : MonoBehaviour{
public SaveKanri(){
}
public static bool Save<T>(string prefKey,T obj){
MemoryStream memoryStream = new MemoryStream();
#if UNITY_IPHONE || UNITY_IOS
System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes");
#endif
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize( memoryStream, obj );
string str = System.Convert.ToBase64String( memoryStream.ToArray() );
try {
PlayerPrefs.SetString ( prefKey, str );
} catch( PlayerPrefsException ) {
return false;
}
return true;
}
public static T Load<T>( string prefKey ){
if (!PlayerPrefs.HasKey(prefKey)) return default(T);
#if UNITY_IPHONE || UNITY_IOS
System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes");
#endif
BinaryFormatter bf = new BinaryFormatter();
string serializedData = PlayerPrefs.GetString( prefKey );
MemoryStream dataStream = new MemoryStream( System.Convert.FromBase64String(serializedData) );
T deserializedObject = (T)bf.Deserialize( dataStream );
return deserializedObject;
}
}
//保存するデータクラス
using System.Collections;
[System.Serializable()]
public class SaveDatas{
[System.Serializable()]
public class InnerClass{
public string instr1;
public int inint;
}
public string str1;
public int[] int10;
public InnerClass inClass;
}
以前までusing PlayerPrefs = PreviewLabs.PlayerPrefs;を使用して保存していました。最近どうもPreviewLabs.PlayerPrefsで以下のエラーが発生して他の保存方法に切り替えました。
以下がエラーログ
PlayerPrefs.Flush NullReferenceException Object reference not set to an instance of an object
2015年8月1日土曜日
2015年7月30日木曜日
Unity 日付型のチェック
Unityで文字列が日付型であるかをチェックするサンプル
C#だとout修飾 子が必要なんですね。
using System;
DateTime dt; string str ="2001/1/11";
if(DateTime.TryParse(str,out dt)){}
error CS1620: Argument `#2' is missing `out' modifier
error CS1501: No overload for method `TryParse' takes `1' arguments
C#だとout修飾 子が必要なんですね。
using System;
DateTime dt; string str ="2001/1/11";
if(DateTime.TryParse(str,out dt)){}
関連エラーログ
error CS1502: The best overloaded method match for `System.DateTime.TryParse(string, out System.DateTime)' has some invalid argumentserror CS1620: Argument `#2' is missing `out' modifier
error CS1501: No overload for method `TryParse' takes `1' arguments
2015年7月29日水曜日
iTunesConnectが繋がらないTunes Connect is temporarily unavailable.
数時間前からiTunesConnectが繋がりません。
ブラウザは読み込み中のままになるか以下の表示になるかです。
Tunes Connect is temporarily unavailable.
特にメンテナンスの通知はありませんでした。単にサーバーの障害でしょうか?
Safariを使用しても同様です。
ツイッターでも同様の報告が上がっています。
appleは相変わらず黙りです。
ブラウザは読み込み中のままになるか以下の表示になるかです。
Tunes Connect is temporarily unavailable.
特にメンテナンスの通知はありませんでした。単にサーバーの障害でしょうか?
Safariを使用しても同様です。
ツイッターでも同様の報告が上がっています。
appleは相変わらず黙りです。
2015年7月28日火曜日
Unity uGUIテキストボックスの値の取得と変更
UnityのテキストボックスはuGUIのinputfieldになります。
inputfieldには二つの子オブジェクトがあり、その一つのTextオブジェクトのTextスクリプトのtextフィールドが入力されたあたいになります。
訂正inputfieldのtextフィールドからしか書き込みができませんでした。
以下がテキストデータの取得と変更のサンプルです。
using UnityEngine.UI;
Text txt;
txt = GameObject.Find ("Iputfield/Text").GetComponents<Text>()[0];
Debug.Log (txt.text);//現在の値を表示
txt.text="変更";
inp = GameObject.Find ("Namae").GetComponents<InputField>()[0];
inp.text ="inpu!";
Debug.Log (inp.text);
この文法はよく使うので覚えておくといいです。GameObject.Find ("Iputfield/Text").GetComponents<Text>()[0];
訂正inputfieldのtextフィールドからしか書き込みができませんでした。
以下がテキストデータの取得と変更のサンプルです。
using UnityEngine.UI;
txt = GameObject.Find ("I
訂正
InputField inp;inp = GameObject.Find ("Namae").GetComponents<InputField>()[0];
inp.text ="inpu!";
Debug.Log (inp.text);
この文法はよく使うので覚えておくといいです。GameObject.Find ("Iputfield/Text").GetComponents<Text>()[0];
2015年7月21日火曜日
Unity uGUI Image画像を動的に変更する
インスペクタから画像を設定して、適当なボタンに画像変更()を割り当てます。
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class スクリプト : MonoBehaviour {
public Sprite 画像1;
public Sprite 画像2;
private GameObject obj;
private Image image;
void Start () {
obj = GameObject.Find("image(imageオブジェクトの名前)").gameObject as GameObject;
image = obj.GetComponent<Image> ();
}
public void 画像変更(){
image.sprite = 画像2;
}
}
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class スクリプト : MonoBehaviour {
public Sprite 画像1;
public Sprite 画像2;
private GameObject obj;
private Image image;
void Start () {
obj = GameObject.Find("image(imageオブジェクトの名前)").gameObject as GameObject;
image = obj.GetComponent<Image> ();
}
public void 画像変更(){
image.sprite = 画像2;
}
}
Unity uGUI Textの文字がボケる場合のチェック
2015年7月17日金曜日
google play開発者サービスで原因不明の問題が発生しました
スマホゲーム中に以下のエラーが発生しました。
ダイアログ「google play開発者サービスで原因不明の問題が発生しました」
PCもスマホも定期的に初期化をしないと様々な不具合が発生します。
解決方法
GooglePlay開発者サービスのダウンロードは以下です。
https://play.google.com/store/apps/details?id=com.google.android.gms&hl=ja
端末固有の不具合の可能性もあるのでビューから自分の端末を選択して調べてみましょう。
ダイアログ「google play開発者サービスで原因不明の問題が発生しました」
PCもスマホも定期的に初期化をしないと様々な不具合が発生します。
解決方法
- GooglePlay開発者サービスをインストールしなおす。
GooglePlay開発者サービスのダウンロードは以下です。
https://play.google.com/store/apps/details?id=com.google.android.gms&hl=ja
端末固有の不具合の可能性もあるのでビューから自分の端末を選択して調べてみましょう。
登録:
投稿 (Atom)
