ラベル Android の投稿を表示しています。 すべての投稿を表示
ラベル Android の投稿を表示しています。 すべての投稿を表示

2014年12月16日火曜日

Unity4.2:文字コードとセーブファイルで困った・・・

以下始めてセーブファイルを作ろうとしたわけで馬鹿とか言わないで

セーブファイルの書式を決めようぜ
まずはセーブファイルの書式を決めるんだけど、ファイルの読み込みってこんな感じでやる。
var lineArray    = saveFile.text.Split("\n"[0]);
for each ( var str:String in lineArray){
     何か処理
}
つまり、全部Stringで戻ってくる。
だから、例えばbooleanとかintegerとかfloatで値を格納しても文字列になっちゃう。
つーことで、戻ってきた値を適切に処理できるように、以下のような書式にした。
項目名:型:値
例えば、(debug:bool:false)みたいな感じ。(何故かコロンを英数字にすると絵文字が出ちゃうので日本語で)
これを行ごとに処理してく。

各項目を処理しようとしたんだけど・・・
で、戻ってきた文字列を処理しようとして以下のようにしたんだけど。
var lineArray    = saveFile.text.Split("\n"[0]);
for each ( var str:String in lineArray){
     if ( str.Split(“:”[0])[0] == “true”){
          return(true);   //文字列trueをboolのtrueとして返す
     }else{
          return(false);   //文字列falseだったらboolのfalseとして返す
     }
}
なぜか全部falseになってしまう・・・
んで色々調べてみたら、どうもUTF-8という文字コードじゃないとちゃんと動かないらしい。
つまり、文字コードが違ったので、同じ”true”同士でも、同じと判別してくれてないみたい。
なので、書き込み部分をUTF-8で行うように変更する・・・

UTF-8で書き込むぜ!
色々省くけど、こんな感じ。
var sw            :StreamWriter;
var enc            :Encoding = Encoding.GetEncoding("UTF-8");
sw                 = new StreamWriter(saveFilePath, false, enc);
sw.WriteLine(“debug:bool:false”);
sw.Close();
で、ね。
うまくいかないわけよ!!!!!

更に調べると改行コードも関係してた
何か色々とエンコード回りを調べてたら、僕が作ったファイルはUTF-8になってるんだけど、
改行コード「混在」となってる・・・
更に調べるとUnityではUTF-8で改行コードCR LFじゃないとダメみたい。
僕の作ったファイルはCR LFとLFが混在してるわけ。
で、行ごとに読み込む時にSplit(“/n”[0])で読み込んでるので、これだとLFで切り分けてしまうので、CRが残ってしまうらしい。
CRは\rで表すらしいので、”true\r”と”true”を比べていたわけ!

わかったよ改行コードCR LFで書き込むよ
と・・・いったものの、書き込み方がわかんない・・・・
つーわけで一時間程あれこれ調べた結果、あきらめましたよ!

セーブファイルの書式を変えますよええ
LFで区切ってる場合とCR LFで区切っている場合を分けて処理使用とも考えたけど面倒なので、セーブファイルの書式を変えました。
項目名:型:値:
これで、CRは:でSplitされた時点で戻り値の行列の末尾にサヨナラだ!

そしてAndroidでセーブファイルがみつからない・・・
Windowsで作業した時にはわからなかったんだけど、Andoroidに出力したらセーブファイルみつからないよ・・・
つーわけで、ここからはそっちの探索をはじめます・・・・

続く・・・

2013年6月22日土曜日

Android端末(Nexus7)にビルドして出力してみる

どうやらUnityからAndroid端末への出力は簡単らしい

のでやってみる。
基本的なセットアップ方法は。
http://docs-jp.unity3d.com/Documentation/Manual/android-sdksetup.html

Android SDKをインストール

ここからダウンロード
http://developer.android.com/sdk/installing/index.html

手持ちのAndroid端末のOSバージョンを確認。
ダウンロードしたファイルを解凍してSDK Manager.exeを起動。
OSバージョンに合ったファイルを選択してインストール。

僕のは4.2.2だったからこんな感じ。
ちなみに、画像はインストール済みの図だから、右側の欄がInstaledになっている。
あと、インストール項目の自動判別が行われるようで、チェックしたものが全部入るわけではなさそう。

UnityにSDKのパスを通す

Edit > Preference > External Tool >Android SDK Location
に、SDKをインストールしたパスを入れる。
<任意のパス>\adt-bundle-windows-x86_64-20130522\sdk
こんな感じ?

UnityのBuild SettingをAndroidにする

何故か画面キャプチャできないので、文字で。

File > Build Setting
で開いたウインドウの下の方にあるAndroidというのを選択。

さあ動け!File > Build and Run
動かないです。

Couldn't Find Android Device

Android 端末を開発者モードにする

調べると、そういうことだそうです。
http://webhoric.com/android/how-to-nexus7-developer-options

開発者モードにしたぜ!
さあ動け!File > Build and Run
動かないです。

Android 端末のUSBドライバを入れる

調べるとそういうことだそうです。
http://blogs.yahoo.co.jp/momo_poem/67257950.html

Nexus7のドライバはここから。
http://www.asus.co.jp/Tablet/Nexus/Nexus_7/#download

インストールしたぜ!
さあ動け!File > Build and Run
動かないです。

adbで端末の接続を確認

調べると、どうもAndroid端末が接続されているかどうか調べるのに、adbというコマンドを使うようです。
http://note.chiebukuro.yahoo.co.jp/detail/n128056
Windowsコマンドプロンプトに以下のように打ち込めと。
adb devices
....コマンドとして認識していない・・・・。

http://wghost.org/it/android/android-adb-shell-usb/
ああ、さっきインストールしたAndroid SDKのplatform-toolsフォルダにパスを通せばいいのか!

...パスの通し方わかりません
http://blog.cnu.jp/2009/11/06/windows-7-path/

通った!adbと・・・動かない・・・

再起動したら動きました。
が・・・Nexus7は認識されていないご様子。

なんだなんだー、えーっと・・・
http://blog.livedoor.jp/moonlight_aska/archives/50743650.html

というわけでこの方法でadb認識しましました。
何でカメラなんだ!

期待しないで・・・!File > Build and Run
うううううう!動いた!
表示方向が縦横逆だけど動いた!
マウス用にしかプログラム書いてないのに、タッチで動いた!
うわああああい!

超カンタンだったね!