holokit-LineRendererBase LineUnity的吊诡之处

Bug描述:

使用holokit给出的example里的Lineunity (继承了LineRenderBase的基类)+Bezier(继承了LineBase的基类)实现曲线

但是出现nullpointer错误

问题1:

lineunity里使用的defaultlinematerial 名字使用shader.find找不到该material

按理说,可以手动规定linematerial,这样不必使用default linematerial,也避免直接修改lineunity的代码(这个毕竟是库函数)

但由于lineunity是直接新建Object, 然后addcomponent()得到的,

因此在生成lineunity之前,无法指定linematerial,

生成之后则自动跑OnEnable(),

即在linematerial linecolor未经初始化的时候,自己使用默认值初始化并且使用了,

这种执行顺序改不了,并且感觉很吊诡

解决方案:

修改lineunity(这个是暂时的,最终要么换一个库类,要么自己重写一个类似的类)

问题2

定义了

[Tooltip("The source Line this component will render")]

protected LineBase source;

之后立即定义了

public virtual LineBase Source

        {

            get

            {

                if (source == null)

                {

                    source = GetComponent();

                }

                return source;

            }

            set

            {

                source = value;

                if (source == null)

                {

                    enabled = false;

                }

            }

        }


让人怀疑这个程序员写什么==

这样写的作用:

直接引用source的时候,未经初始化。null。

引用 Source的时候,source被初始化了,其实就是在使用source。相当于给source加了一个别名,但是必须在使用source之前调用一次Source。

并且这个bug导致了,debug.log()在这里,是会出现薛定谔的猫现象。

一旦log,调用了Source,就会影响结果,导致null pointer的Bug消失。








你可能感兴趣的:(holokit-LineRendererBase LineUnity的吊诡之处)