NGUI外包開發總結一下今天的收穫

 先總結一下今天的收穫:在一個腳本類中對其成員變量進行初始化時,何時在Awake()中,何時在Start()中是有講究的。函數

    1)當成員變量會被外部腳本引用時,尤爲是該成員變量是一個本身定義的非腳本類必須用構造函數初始化的時候。而且,被外部腳本引用指的是 「引用該變量的內部成員函數或屬性被外部函數調用的時候」,該成員變量應該在Awake函數中進行初始化。設計

    2)若是該成員變量只在自身所在的腳本類被引用時,則應該在Start函數中進行初始化。orm

  今天遇到的第一個坑就是由於沒有注意以上兩點。我在Start函數中使用構造函數初始化了一個Poker類,可是這個類的實例在自身的公有方法中,被外部其餘腳本調用了。這倒不是最重要的,由於以前我遇到過一次。重要的是:在Update()函數中拷貝預設體,其Awake()函數在當前幀的Update中就會被當即調用,可是Start()函數則會在在下一幀執行。對象

  

  第二個坑是這樣的:我將一個共有函數綁定到NGUI的UIButton腳本里的OnClick事件中做爲事件處理函數,在這個共有函數中使用了兩個if語句,則當事件觸發時函數不會被執行,可是我改成 if(){} else if(){}就能夠執行,明明相同的邏輯卻又不同的結果,讓人匪夷所思呀。遊戲

   

  第三個坑是:在NGUI中有一個大坑,就是建立NGUI中的遊戲對象時,若是你使用Instantiate()函數,建立的控件會很是的大,可是使用NGUITools.AddChild()函數時生成的控件大小就會正好合適。【緣由還不祥】事件

  

一下我將以前遇到的問題說一下,也是空引用異常的問題,和第一個坑差很少,其實也不能說是坑,而是本身對本身的邏輯沒有考慮清楚,將各類類的相互引用考慮進來就會發生問題的。it

  

以前已經實現了跑道的動態生成,今天要是實現的是在動態生成的跑道上的路點處隨機產生提早準備好的陷阱預設體。form

         遇到的問題:由於以前在動態生成跑道時,順便實現了另外一個類,路點管理器類。咱們的陷阱就要在路點附近生成,因此,利用以前跑道上自帶的路點是很好的選擇。可是,將道具生成器腳本類順利加入到以前的代碼仍是比較繁瑣的。由於封裝的函數太依賴於動態生成跑道和記錄遊戲角色附近的路點這兩個邏輯,因此必須再次明白以前是如何設計生成跑道和如何計算路點的,而且這還不是最重要的。變量

         最重要的問題是:在ElementsGenerator腳本類中維護一個List<Transform> waypointList來負責在當前跑道上全部路點處生成障礙物、陷阱。因爲是腳本類,因此並不存在構造函數這個概念,因此我就在 Awake()這個函數中建立waypointList,可是我明明已經建立了該列表,可是老是報空引用這樣的錯誤。我百思不得其解,最後,我明白了爲何???date

         主要問題是:我在PlayMove這個腳本類中的Awake()函數中對做爲單例出如今整個遊戲場景中的跑道生成器進行了初始化:raceTrackGenerator.Init ()   這裏這個函數的初始化是在 waypointList以前執行的【不一樣腳本中的Awake函數執行順序我不知道如何肯定】。主要問題的產生就是由於跑道生成器初始化時須要調用ElementsGenerator腳本類的GetWaypointList()函數,可是此時該函數必須的waypointList尚未建立出來。

相關文章
相關標籤/搜索