关于unity3d clone的prefab物体一起行动的问题(static要慎用)

首先,为什么要去一个这个名字呢,因为对大多数新手来说遇到这样的问题根本就不知道static的问题(就拿我来说...)而知道这个问题的基本可以自己解决了。

最近在学习Unity3d,看书和视频学习的时候基本上也就是对于static一句话就说过去了,说他是预先编译,优先于脚本的函数,这样的一句话,一开始我还是很迷茫,ok,或许是我的技术还很薄弱吧,没有细细体会到其中的奥秘,直到自己做了一个Unity的一个模仿红绿灯的项目,我才彻底的领悟到了这一点,当然代价就是找了六个小时的bug,最终用最笨的方法一点点的执行,最后发现是因为一个关键词——static!(一开始根本就没有想到会是static出问题...)

ok,回到我们所说的话题,了解Unity3d的都知道,对于一个prefab物体,我每次克隆的话,就相当于每一个独立的个体,彼此之间是没有联系的,然而我在运行我的项目(一个模拟红绿灯的交通系统)的时候,一旦一辆车停下,所有的车都停下了,这让我很迷茫,曾一度认为是我的wheelCollider的库不支持clone呢,后来也查了相关的东西,说什么的都有,还有什么Instantiate并不可以完全的复制还有destory并没有完全的删除,虽然了解了相关的东西,但是改来改去都没有解决我的所有的车一起停的问题,最后查到了凌晨一点,竟然是一个static,好吧,再说一下,为什么我要用static因为我要引用不同的js脚本的传值,当时并没有用sendmessage类似这样的方法而是用了一个自认为简单的直接获取另一个脚本的静态变量的方法,结果就导致了这个问题...

最后查了相关的资料也算是给自己和大家的一些忠告吧:直面意思就是说这个object是在程序运行时是静止不变的,确保不被改变,一般多用于场景中静止的物体在unity内部会有不少操作来检测该object是否为static的,对于static的物体进行一些特殊处理,比如说在Occlusion culling时会对static物体进行patching,在rendering优化时也会根据是否为static来进行不同的优化,在lightmaping时,会根据是否是static来进行光照等等。

你可能感兴趣的:(Unity3D)