1. 程式人生 > >CocosCreator腳本中向依賴的組件賦值後, 被依賴的組件沒有取到值的問題!

CocosCreator腳本中向依賴的組件賦值後, 被依賴的組件沒有取到值的問題!

一個 這也 pan mil 取值 reat get 依賴 ima

問題描述:

  兩個節點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腳本中向依賴的組件賦值後, 被依賴的組件沒有取到值的問題!