CocosCreator腳本中向依賴的組件賦值後, 被依賴的組件沒有取到值的問題!
問題描述:
兩個節點parent&child(其中都包含腳本組件), parent腳本組件依賴了child組件, 節點關系如下圖:
parent腳本內容如下:
child腳本內容如下:
預覽時報錯如下:
核心錯誤:
由於properties中依賴的child類型為 cc.Component (之前我一直錯誤的認為只有 腳本組件 是cc.Component類型的, 所以引入的就是child的腳本組件), 然而事實上 屬性檢查器中所有的組件都是繼承於 cc.Component 的, 當child節點有多個組件時, parent將會引入child節點上的第一個組件, 而從我的child屬性檢查器來看, 節點的第一個組件為cc.Sprite組件, 所以hello就被賦值到了 Sprite組件上, script組件自然就拿不到了.
解決方案:
一. 將script組件移動至節點的最上方, 這樣引入的就是腳本組件了, 賦值後, 也能成功取到
二. 將引入類型修改為 cc.Node, 腳本至取值時這樣寫 this.node.hello(); 這樣就可以了
總結:
1. 所有渲染組件(Sprite等), 碰撞組件(Collider等), UI組件(Mask等), 腳本組件(script) 都繼承於 cc.Component類, 所以本質上, 他們都可以被認為是 cc.Component (這也是導致上面問題的關鍵所在)
2. 組件(Component)與節點(Node)的關系: Node中可以包含0個或多個Component, Node中可以包含0個或多個Node
3. 腳本中可以通過 this.node獲取當前腳本組件所在的Node, 隨後可通過 node.getComponent(name); 來獲取到此Node節點下的任意組件
CocosCreator腳本中向依賴的組件賦值後, 被依賴的組件沒有取到值的問題!