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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

WebGL

WebGL(ウェブジーエル)は、ウェブブラウザで 3次元コンピュータグラフィックスを表示させるための標準仕様です。

Q&A

解決済

1回答

2974閲覧

unity webGLからjsonファイルのローカルへの書き出しについて

ray1224

総合スコア2

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

WebGL

WebGL(ウェブジーエル)は、ウェブブラウザで 3次元コンピュータグラフィックスを表示させるための標準仕様です。

0グッド

0クリップ

投稿2020/06/11 02:05

前提・実現したいこと

unityのwebGL版にてゲームのセーブデータをjsonファイルとしてローカルに保存させたいです。
現状unity内のセーブデータはjson形式でstring型の変数に保管し、プラグインを通してjavascriptまで送れるようになっています。
また、その変数をjsonファイルに書き出すことは成功しています。

発生している問題

string変数をjsonに書き換えるときに文字化け?が起きる(数字の羅列になる)。
またPointer_stringifyに通してからjsonに書き換えてもエスケープ文字が残ってしまう。

該当のソースコード

前者のコード

javascript

1getJsonData : function(str){ 2 window.alert(Pointer_stringify(str));//ここでは問題ないです 3 var jsonData = JSON.stringify(str); 4 window.alert(jsonData);//ここで文字列が数字の羅列になる 5 6 //blob = new Blob([Pointer_stringify(str)],{'application/json'}); 7 //window.alert(blob.size); 8 },

後者のコード

javascript

1getJsonData : function(str){ 2 window.alert(Pointer_stringify(str));//ここでは問題ないです 3 var jsonData = JSON.stringify(Pointer_stringify(str)); 4 window.alert(jsonData);//ここでエスケープ文字が見える状態の文字列になる 5 6 //blob = new Blob([Pointer_stringify(str)],{'application/json'}); 7 //window.alert(blob.size); 8 },

unityのゲームマネージャー内のセーブ用メソッド

c#

1 2 public void save() 3 { 4 var furnitures = new List<furniture>(); 5 for (int i = 0; i < ObjList.Count; i++) 6 { 7 furnitures.Add(new furniture(ObjList[i].name, ObjList[i].transform.position, ObjList[i].transform.rotation)); 8 } 9 SaveData = JsonUtility.ToJson(new Serialization<furniture>(furnitures)); 10 11 getJsonData(SaveData); 12 Debug.Log(SaveData); 13 14 Debug.Log("セーブが完了しました"); 15 }

試したこと

replaceをおこなってバックスラッシュを取り除こうと考えましたがエラーをはいたので断念。

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

unity2018.4.23f1

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「JsonUtility.ToJson()」も「JSON.stringify()」もJSON文字列に変換する関数です。
どちらか片方だけでいいのではないでしょうか。

投稿2020/06/11 02:13

fiveHundred

総合スコア9796

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ray1224

2020/06/11 02:38

自身のコードの書き方の問題かもしれませんが、stringをそのままblobに入れてもエラーでビルドすらできないです。
fiveHundred

2020/06/11 03:02 編集

どんなエラーかを記載してください。 また、ここで言うstringとは「Pointer_stringify(str)」のことですよね?
ray1224

2020/06/11 03:39

エラーを起こしている箇所が blob = new Blob([Pointer_stringify(str))],{'application/json'}); これをコメントアウトすると書き出せるので間違いないと思います。 エラーが下記の四つです。 Failed running "C:\Program Files\Unity\Hub\Editor\2018.4.23f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten_Win\python\2.7.5.3_64bit\python.exe" "C:\Program Files\Unity\Hub\Editor\2018.4.23f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emcc" Exception: Failed building WebGL Player. UnityEditor.WebGL.ProgramUtils.StartProgramChecked (System.Diagnostics.ProcessStartInfo p) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/ProgramUtils.cs:48) UnityEditor.WebGL.WebGlBuildPostprocessor.EmscriptenLink (UnityEditor.Modules.BuildPostProcessArgs args, System.Boolean wasmBuild, System.String sourceFiles, System.String sourceFilesHash) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:432) UnityEditor.WebGL.WebGlBuildPostprocessor.LinkBuild (UnityEditor.Modules.BuildPostProcessArgs args) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:482) UnityEditor.WebGL.WebGlBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:954) UnityEditor.Modules.DefaultBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args, UnityEditor.BuildProperties& outProperties) (at C:/buildslave/unity/build/Editor/Mono/Modules/DefaultBuildPostprocessor.cs:27) UnityEditor.PostprocessBuildPlayer.Postprocess (UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target, System.String installPath, System.String companyName, System.String productName, System.Int32 width, System.Int32 height, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:288) UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at C:/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:179) Build completed with a result of 'Failed' UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at C:/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:179) UnityEditor.BuildPlayerWindow+BuildMethodException: 3 errors at UnityEditor.BuildPlayerWindow+DefaultBuildMethods.BuildPlayer (UnityEditor.BuildPlayerOptions options) [0x00242] in C:\buildslave\unity\build\Editor\Mono\BuildPlayerWindowBuildMethods.cs:194 at UnityEditor.BuildPlayerWindow.CallBuildMethods (System.Boolean askForBuildLocation, UnityEditor.BuildOptions defaultBuildOptions) [0x0007f] in C:\buildslave\unity\build\Editor\Mono\BuildPlayerWindowBuildMethods.cs:97 UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at C:/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:179)
fiveHundred

2020/06/11 03:42

そもそもblobはどこで定義しておりますか?
ray1224

2020/06/11 04:05

すみません。表記をblob = new Blob([Pointer_stringify(str)],{type : 'application/json'}); に変えたらできました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問