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尚未建立出来。

相关文章
相关标签/搜索