Unity3D学习笔记(七) 类的基本函数学习

(2012-07-27 22:13:38)

1.unity3D中脚本类若不是MonoBehaviour子类,则不含回调函数,不可添加给游戏对象,即要自行在其他MonoBehaviour子类中实例化。
因此对于想要随场景载入自动实例化,且在场景中时时存在的类,就算不想用到update等回调函数最好也作为MonoBehaviour的子类。
 
2.unity3D的脚本类中即使是MonoBehaviour子类,如果不把其附加在GO身上,构造函数和Start()函数也不会被调用。
 
3.对于MonoBehaviour子类,其本身的构造函数最好不要用,而去用void Start()等回调函数去初始化!
问题:用写入和附加写入文件流测试过,脚本已经附在GO上。当VS中脚本修改后回到unity时,构造函数会被调用一次;当运行时,构造函数会被调用三次,文本出现三次附加字符串,但类中计数器却没连加三次;当发布(build)的时候又会被调用几次。假设脚本没有附在GO上,则以上问题不出现,且手动附上GO时会自动调用一次构造函数。
但上述问题包括运行时出现的三次连续调用,对发布出来的游戏并没有影响,不会出现连续乱调用。但由于可能会干扰调试过程,因此不推荐使用。用void Start()时以上4个问题都不会出现。
除了MonoBehaviour子类,在unity中出现的其他类,比如与所在文件同名的非MonoBehaviour子类还有MonoBehaviour子类所在文件的其他外部类,其构造函数并不会受到影响。
 
4.脚本中MonoBehaviour子类,其构造函数和Start()函数是不一样。start()函数和awake()函数是由主线程(main thread)调用的,构造函数是由载入线程(loading thread,载入场景时用的)调用的。有部分Unity3D函数只能由主线程调用,比如PlayerPrefs的静态函数。
 
5.Awake()函数先于Start()函数被调用,Update()在两者之后。
 
6.OnGUI,update和fixedupdate都会循环被调用。
①fixedupdate固定时间间隔被调用,可以在Edit->Project Setting->time下面的Fixed Timestep修改间隔时间。常用于刚体运动(更真实)。
   update在每次渲染新的一帧的时候被调用,机器不同其帧速率不同,会使每秒调用次数也会不同。即使在同一台机器,不同秒帧速率也会因为场景需要渲染的三角面数量不同,而update被调用次数不同。
   OnGUI每帧被调用至少一次,据说一般会有多次(官网说的)。
②Time.deltaTime在fixedupdate使用,返回的值是Fixed Timestep,但是在update和OnGUI内使用返回的是complete the last frame的时间。但由于OnGUI一帧常被调用多次,因此会使函数返回结果多次相同。
③Time.timeScale可以用来做运动速度缓慢或加速的特效(勉强也可以来做暂停功能),当其为0时fixedupdate不会被调用,官网建议当设置为0和1之间(不包括01)时调用以下语句去改变fixedupdate调用的间隔,Time.fixedDeltaTime=0.02* Time.timeScale;,0.02是默认的fixedupdate调用间隔,用Time.fixedupdate代替应该会更好。
7.Void OnMouseDown(){..}当鼠标在一个GUIElement或碰撞器(Collider)的游戏对象按下时执行内部代码。
  Void OnMouseOver(){..}当鼠标在一个GUIElement或碰撞器(Collider)的游戏对象按下动作抬起时执行内部代码。
  可以通过这个来改变显示颜色。

posted @ 2013-06-15 16:24  skipop  阅读(905)  评论(0编辑  收藏  举报