Bug描述:
使用holokit給出的example里的Lineunity (繼承了LineRenderBase的基類)+Bezier(繼承了LineBase的基類)實(shí)現(xiàn)曲線
但是出現(xiàn)nullpointer錯(cuò)誤
問題1:
lineunity里使用的defaultlinematerial 名字使用shader.find找不到該material
按理說(shuō),可以手動(dòng)規(guī)定linematerial,這樣不必使用default linematerial,也避免直接修改lineunity的代碼(這個(gè)畢竟是庫(kù)函數(shù))
但由于lineunity是直接新建Object, 然后addcomponent()得到的,
因此在生成lineunity之前,無(wú)法指定linematerial,
生成之后則自動(dòng)跑OnEnable(),
即在linematerial linecolor未經(jīng)初始化的時(shí)候,自己使用默認(rèn)值初始化并且使用了,
這種執(zhí)行順序改不了,并且感覺很吊詭
解決方案:
修改lineunity(這個(gè)是暫時(shí)的,最終要么換一個(gè)庫(kù)類,要么自己重寫一個(gè)類似的類)
問題2
定義了
[Tooltip("The source Line this component will render")]
protected LineBase source;
之后立即定義了
public virtual LineBase Source
? ? ? ? {
? ? ? ? ? ? get
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (source == null)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? source = GetComponent<LineBase>();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? return source;
? ? ? ? ? ? }
? ? ? ? ? ? set
? ? ? ? ? ? {
? ? ? ? ? ? ? ? source = value;
? ? ? ? ? ? ? ? if (source == null)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? enabled = false;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
讓人懷疑這個(gè)程序員寫什么==
這樣寫的作用:
直接引用source的時(shí)候,未經(jīng)初始化。null。
引用 Source的時(shí)候,source被初始化了,其實(shí)就是在使用source。相當(dāng)于給source加了一個(gè)別名,但是必須在使用source之前調(diào)用一次Source。
并且這個(gè)bug導(dǎo)致了,debug.log()在這里,是會(huì)出現(xiàn)薛定諤的貓現(xiàn)象。
一旦log,調(diào)用了Source,就會(huì)影響結(jié)果,導(dǎo)致null pointer的Bug消失。






