座標値がリストに格納されない

前提

Unityでハンドトラッキングを利用したシステムを作っています。
設置したボタンを押したタイミングで人差し指の先の三次元座標をリストに順次格納し、json形式でファイルに書き出そうとしています。
リスクをjsonで扱うためにラッパーを試みています。
勉強中で調べながらのコーディングのため拙いかとは思いますがご教授いただければ幸いです。

実現したいこと

  • 座標を格納したリストをjson形式にしてファイルに書き出す

‐他のシーンでそのファイルから座標データを読み出す

発生している問題

おそらく座標値がリストに格納されていないようです。
画像左下のメモ帳の様に座標値の入っていない外枠だけがjson形式に変換されています。
ラッパーのコード周りで修正が必要なのだろうとは思っていますがそこまでしか分かりませんでした。
イメージ説明

該当のソースコード

C#

//PositionList.csusing System.Collections;using System.Collections.Generic;using UnityEngine;using System.IO;using System;using System.Runtime.Serialization;using System.Runtime.Serialization.Json;using System.Runtime.Serialization.Formatters.Binary;using System.Linq; [Serializable]public class Position { float x; float y; float z; public Position(float X, float Y, float Z) { x = X; y = Y; z = Z;} [Serializable]public class SaveDataWrapper { public List<Data> data; public SaveDataWrapper() { data = new List<Data>(); }} [Serializable]public class Data { public Data(List<Position> Ex) { test = Ex; } public List<Position> test;} public class PositionList : MonoBehaviour { public GameObject obj; List<Vector3> posList = new List<Vector3>(); public SaveDataWrapper sdw = new SaveDataWrapper(); [SerializeField] public string json; // Update is called once per frame public void ButtonClickSet() { Transform myTransform = this.transform; Vector3 worldPos = myTransform.position; float x = worldPos.x; float y = worldPos.y; float z = worldPos.z; Instantiate(obj, new Vector3(x, y, z), Quaternion.identity); Position pos = new Position(x,y,z); List<Position> positions = new List<Position>(); positions.Add((Position)pos.DeepCopy());//Debug.Log(positions); Data data = new Data(positions);//Debug.Log(data); sdw.data.Add((Data)data.DeepCopy()); } public void Check() { StreamWriter writer; json = JsonUtility.ToJson(sdw); writer = new StreamWriter(Application.dataPath + "/savedata.json"); writer.Write(json); writer.Flush(); writer.Close(); Debug.Log("check"); }} public static class Extention { //参照渡し回避用(オブジェクトのコピー) public static object DeepCopy(this object target) { object result; BinaryFormatter b = new BinaryFormatter(); MemoryStream mem = new MemoryStream(); try { b.Serialize(mem, target); mem.Position = 0; result = b.Deserialize(mem); } finally { mem.Close(); } return result; }}

試したこと

Debug.Log()でどの段階でミスが生じているのか確認してみましたが、コンソールでDebug.Log(positions)はPositionsと表示されたり、Debug.Log(data)もDataと表示されたりとよく理解できませんでした。

コメントを投稿

0 コメント