c#存储对象的信息,报错Object reference not set to an instance of an object

foolish。 2019-01-18 08:11:31
using UnityEngine;
using System.Collections;
using System.IO;
using UnityEditor;
public class JSON : MonoBehaviour {
[MenuItem("Tools/CreateJSON")]
static void WriteJson()
{
string path = Application.dataPath + "/PartMessage.json";
GameObject obj = Selection.activeGameObject;
if (obj.name != "Part")
{
throw new System.Exception("Selection Model");
}
DateVO date = new DateVO();
for(int i = 1; i <= obj.transform.childCount; i++)
{
PartVO part = new PartVO
{
pos = obj.transform.GetChild(i).localPosition,
rot = obj.transform.GetChild(i).localEulerAngles,
scale = obj.transform.GetChild(i).localScale
};
date.parts.Add(part); //这行是不是有问题
}
string s = JsonUtility.ToJson(date);
File.WriteAllText(path,s);
AssetDatabase.Refresh();
}
...全文
237 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
幽幽有悠悠呦 2019-01-19
  • 打赏
  • 举报
回复
从代码上来说,值得怀疑的对象是: date.parts.Add(part);   //行是不是有问题 date.parts 这个对象应该是一个List,但是它没有实例化对象,应该只是一个声明,缺少实例化。
幽幽有悠悠呦 2019-01-19
  • 打赏
  • 举报
回复
当前问题是空指针异常,这种异常在出现的时候,都会有详细信息显示是第几行出现。 所以看到这个异常信息的时候,完全可以精准定位到代码所在的行 找到出错代码行后,判断:对象.方法。或者是:对象.属性等方式的。都是有可能引发这个异常的。 以20行举例,这是个假设,出问题的是哪一行需要你控制台获取: 原本代码是: pos = obj.transform.GetChild(i).localPosition, 其中 obj.transform。是obj对象获取transform属性。如果obj是null,引发此异常 obj.transform.GetChild(i) 是obj.transform得到的transform对象获取GetChild方法。如果transform是null,引发此异常。当然,当前情况下,不可能成立。因为如果成立,在obj.transform就触发了 obj.transform.GetChild(i).localPosition 是obj.transform.GetChild(i)获取到的transform对象获取localPosition属性,如果transform是null,引发此异常。 所以。一个空引用异常,引发的可能性较多。需要针对处理

2,526

社区成员

发帖
与我相关
我的任务
社区描述
Unity3D相关内容讨论专区
游戏unity 技术论坛(原bbs)
社区管理员
  • Unity3D
  • 芝麻粒儿
  • 「已注销」
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

Unity3D社区公告:

  1. 社区致力于解决各种Unity3D相关的“疑难杂症”。
  2. 社区不允许发布与Unity3D或相关技术无关内容。
  3. 社区版主邀请各位一道为打造优秀社区不懈努力。

试试用AI创作助手写篇文章吧