您当前的位置: 首页 >  unity

Peter_Gao_

暂无认证

  • 4浏览

    0关注

    621博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity存档用 LitJson  不支持float类型

Peter_Gao_ 发布时间:2020-04-15 19:36:47 ,浏览量:4

  在进行类转json字符串时,报错JsonException: Max allowed object depth reached while trying to export from type System.Single。

 LitJson实际上是类的属性中有json不能识别的数据类型,这里就是float。什么类型是允许的呢?

在JsonData类中找到了答案。

        public JsonData(bool boolean);         public JsonData(double number);         public JsonData(int number);         public JsonData(long number);         public JsonData(object obj);         public JsonData(string str);

所以去掉float,或者 float转成double。 

float x1 = 0.01F;             double y = Convert.ToDouble(0.01F); 这时候y会变成0.09999992341…… 可以用Math.Round进行四舍五入,或者先将float转为字符串再用double.Parse转成double,避免精度错误。

 

下面以游戏地图节点位置vector是float类型转为double可存档类型为例说明:

// 地图节点管理器

public class MapNodeManager{         ///         /// 地图节点数据         ///         public List MapNodes { private set; get; }}

 

// 将要进行存档的内容

 class MapNode

{

        ///         /// 位置         ///     public Vector2 LocalPos { private set; get; }}

 

// 实际存档的数值

class MapNodeArchive

{

        ///         /// 位置         ///         public Vector2Archive LocalPos;

}

 

// 存档管理器

class GameArchiveManager

{

            Debug.Log("清空存档所有地图列表对象的数据");

            ga.List_MapNodesArchives.RemoveAll(j => true);

            // 得到manager的save

            MapNodeManager mapNodesSave = ManagerController.Instance.MMapNodeManager;

            // 得到n列节点的save

            List mapNodesColumns = mapNodesSave.MapNodes;

            if (mapNodesColumns != null)             {                 for (int i = 0; i < mapNodesColumns.Count; i++)                 {                     Debug.Log(" 得到一列节点的存档");                     MapColumnNodeArchive mnal = CreateMapNodeArchiveList(mapNodesColumns[i]);                     ga.List_MapNodesArchives.Add(mnal);

                }             }

           

   public MapNodeArchive CreateMapNodeArchive(MapNode mapANode)         {             if (mapANode != null)             {                 MapNodeArchive asmna = new MapNodeArchive();                 asmna.NodeId = mapANode.NodeId;                 // 节点位置                 asmna.LocalPos = CreateVector3Archive(mapANode.LocalPos);

                }

                return asmna;             }                 return null;

        }

        public Vector3Archive CreateVector3Archive(Vector2 v2)         {             Vector3Archive v3a = new Vector3Archive();             v3a.x = double.Parse(v2.x.ToString());             v3a.y = double.Parse(v2.y.ToString());             return v3a;         }

}

先将float转为字符串再用double.Parse转成double,避免精度错误

 

关注
打赏
1664521772
查看更多评论
立即登录/注册

微信扫码登录

0.2402s