记录下自己遇见的一些奇葩问题
unity5.4.1f1
在 eidtor 环境下
System.Serializable 会引起对象为空的问题.这个实现导致了一旦类对象有空成员,运行时点选对象一旦查看了 Inspector 面板,这个空成员就会被实例化
最简单的例子
[System.Serializable]
public class test2
{
public test a = null;
}
[System.Serializable]
public class test
{
public int a;
public int b;
}
public class TestSerial : MonoBehaviour {
public test2 cur;
void Start () {
//1
cur.a = null;//这个语法应该就是有问题的,可是 unity 里却可以这样,这里的 cur 默认就不为 null,也许是 Serializable 或者是选到了 TestSerial 这个脚本所在的对象导致的
}
void Update () {
if (cur.a == null)
Debug.Log("cur.a is null");
else
Debug.Log("cur.a is not null");
}
}
把这个脚本挂到场景里一个对象上,运行后,Console 输出 "cur.a is null"
然后在场景里勾选中这个脚本所在的对象,可以看到瞬间 update 里的输出变为了"cur.c is not null"
这个 bug 我也是醉了,点一个场景里的对象,挂在对象上的脚本里的成员的子成员还会由 null 变为不是 null。
2017/11/8-官方说这是一个陷阱,用 unity 工作的时候要注意
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于