質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

解決済

Untiy Androidアプリのセーブデータをローカルに保存する方法がわかりません

CopanSassa
CopanSassa

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

1回答

0評価

1クリップ

32閲覧

投稿2019/06/25 05:35

編集2022/01/12 10:58

前提・実現したいこと

UnityでAndroidのアンケートアプリを作っています
時間と正解数をアンドロイドのローカル(外部でも内部でも可)に保存したいです。
その結果の統計などを取りたいので、パソコンでセーブデータを見れるようにしたいので必ずしもCSVファイルである必要はありません。XMLファイルでもいいですが、バイナリーファイルでしかできないなら、CSVファイルへの変換方法まで教えていただけると嬉しいです

PlayerPrefでの保存でもいいですが、CSVファイルへの変換方法がわかりません
バイナリファイルがいくつかできるのは、知っていますが、ファイル名も数字の羅列でよくわからないのでどう扱っていいかに困っています```ここに言語を入力
コード

とにかく、セーブデータを外部にエクスポートでき、それをパソコンで見れれば十分です ### 発生している問題・エラーメッセージ NotSupportedExeptionと出てきます パソコンでは、何ら問題がなくできたんですが、アンドロイドで動かすとうまくいきません ### 該当のソースコード ```ここに言語を入力 using UnityEngine; using UnityEngine.UI; using System.Text; using System.IO; public class exportCsvScript : MonoBehaviour { //Reference: https://dobon.net/vb/dotnet/file/edittextfile.html //public GameObject CSVText; // Use this for initialization void Start() { Debug.Log(UnityEngine.Application.persistentDataPath); CheckExixtCSV(); ReadCSV(); } // Update is called once per frame void Update() { } void OverWriteCSV() { // ファイル書き出し // 現在のフォルダにsaveData.csvを出力する(決まった場所に出力したい場合は絶対パスを指定してください) // 引数説明:第1引数→ファイル出力先, 第2引数→ファイルに追記(true)or上書き(false), 第3引数→エンコード //falseにすると、ファイルを新規作成する StreamWriter sw = new StreamWriter(UnityEngine.Application.persistentDataPath + "/saveData.txt", false, Encoding.GetEncoding("Shift_JIS")); // ヘッダー出力 string[] s1 = { "00", "01", "02", "03" }; string s2 = string.Join(",", s1); sw.WriteLine(s2); // データ出力 //ここでまず入れたいデータを配列として扱う string[] str = {DataScripts.CorrectNumber.ToString(), DataScripts.TotalTime.ToString(), DataScripts.ChooseCircleNumber.ToString(), DataScripts.ChooseCrosstNumber.ToString() }; //ここで","を付けた形にする(str2に配列strに","を付けたものを代入する) string str2 = string.Join(",", str); //ここで初めて書き込む sw.WriteLine(str2); // StreamWriterを閉じる sw.Flush(); sw.Close(); } void AppendCSV() { // ファイル書き出し // 現在のフォルダにsaveData.csvを出力する(決まった場所に出力したい場合は絶対パスを指定してください) // 引数説明:第1引数→ファイル出力先, 第2引数→ファイルに追記(true)or上書き(false), 第3引数→エンコード //falseにすると、ファイルを新規作成する StreamWriter sw = new StreamWriter(UnityEngine.Application.persistentDataPath + "/saveData.txt", true, Encoding.GetEncoding("Shift_JIS")); // データ出力 //ここでまず入れたいデータを配列として扱う string[] str = { DataScripts.CorrectNumber.ToString(), DataScripts.TotalTime.ToString(), DataScripts.ChooseCircleNumber.ToString(), DataScripts.ChooseCrosstNumber.ToString() }; //ここで","を付けた形にする(str2に配列strに","を付けたものを代入する) string str2 = string.Join(",", str); //ここで初めて書き込む sw.WriteLine(str2); // StreamWriterを閉じる sw.Flush(); sw.Close(); } void ReadCSV() { // ファイル読み込み // 引数説明:第1引数→ファイル読込先, 第2引数→エンコード StreamReader sr = new StreamReader(UnityEngine.Application.persistentDataPath + "/saveData.txt", Encoding.GetEncoding("Shift_JIS")); string line; // 行がnullじゃない間(つまり次の行がある場合は)、処理をする while ((line = sr.ReadLine()) != null) { // コンソールに出力 Debug.Log(line); //Text YourCSVText= CSVText.GetComponent<Text>(); // テキストの表示を入れ替える //YourCSVText.text = line.ToString(); } // StreamReaderを閉じる sr.Close(); } void CheckExixtCSV() { if (System.IO.File.Exists(UnityEngine.Application.persistentDataPath + "/saveData.txt")){ Debug.Log("CSVファイルが存在するので追記します"); AppendCSV(); } else { Debug.Log("CSVファイルが存在しないので作成します"); OverWriteCSV(); } } }

試したこと

現在はStreamWriterを使ってApplication.persistentDataPathに保存しようとしています

パソコン上では、しっかりと保存されているのを確認できましたが、Androidにビルドしてみるとファイルが作成されるどころか、CSVファイルの読み込みすらできません(あらかじめCSVファイルをそのPathに置いておいて読み込めるか確認しました)

パスが間違っているのかと思い、CSVファイルがあるかどうかだけ調べる関数を作ったところ、パスはあっており、CSVファイルがあることは確認できました

ただ、読み込み書き込みができないようでログを表示してみると(TEXTにログを表示するようにしてあるので、アンドロイド上でも見えるようになっています)NotSupportedExeptionと出てきます

そもそもAndroidにはCSVファイルを作る能力がないのでしょうか?(TXTでも試してみましたができませんでした)

Unityで開発したいので、解決できると嬉しいです

補足情報(FW/ツールのバージョンなど)

UntiyのPlayerSettingでInternalをExternal(SD card)にするといいと聞いたのでそれも試してみましたが効果はありませんでした。

他の質問ではApplication.DataPathじゃなくてApplication.persistentDataPathにすればできるというものばかりで、参考になるものがありません

SQLiteで保存する方法があるそうですが、ローカル保存ができてパソコンで開くことができるならそれでもいいです
(外部にセーブデータをエクスポートしたい)

よろしくお願いします

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

y_waiwai
y_waiwai

2019/06/25 05:39

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
CopanSassa
CopanSassa

2019/06/25 05:44

失礼しました、<code>というのがあるんですね 教えていただきありがとうございます よろしくお願いします
izmktr
izmktr

2019/06/25 05:56

Encoding\.GetEncoding\("Shift_JIS"\) 原因はこれだと思うんで、System\.Text\.Encoding\.UTF8 あたりとかだといけたりしませんかね?
CopanSassa
CopanSassa

2019/06/25 06:01

izmktrさん、ありがとうございます! 早速やってみますね! アンドロイドでもCSVファイルの生成ってできるんですよね?
CopanSassa
CopanSassa

2019/06/25 06:10

できました! ありがとうございます
CopanSassa
CopanSassa

2019/06/25 06:15

izmktrさん 僕が使っていたstreamwriteのスクリプトはネットで見たやつなので、内容をあまり理解していなかったのですが、Encoding\.GetEncoding\("Shift-JIS"\)とSystem\.Text\.Encoding\.UTF8って何が違うんですか?
izmktr
izmktr

2019/06/25 07:04

文字コードです 詳しくはググってもらうとして、簡単に言えば「古語で」ファイルに書け、と指示しているので、 Windowsだと古語も読み書きできるけど、Androidは古語をしらないので、 「現代日本語\(UTF8\)はいけるけど古語はサポートできん」って言ってる感じです
CopanSassa
CopanSassa

2019/06/26 05:03

izmktrさん、ありがとうございます そういうことだったんですね! 迷走していたので本当に助かりました!! teratailにはベストアンサー的なのがあるのでしょうか? izmktrさんにしたいのですが・・・
izmktr
izmktr

2019/06/26 05:42

なら、解答作っておきます

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。