(本人也是刚接触unity,以下文字是看完视频以及研究完代码后写的,有错误的话请在下面评论中指出,谢谢!)
代码链接:http://pan.baidu.com/s/1bnBGc0Z 密码:t4qz(代码只是一部分)
视频链接:http://www.taikr.com/course/65(视频只讲了一部分,后续服务器的开发,电脑的ai都没有涉及。。)
1.在导入视频文件之前(包括导入的包内有视频文件),一定要先安装quickTime再导入,否则导入的视频文件也无法作为MovieTexture类型文件使用。
2.视频上的声音问题:用MovieTexture这个类型变量存储视频纹理之后,在该脚本所在的物体上添加AudioSource组件,添加视频的声音文件(导入的视频有个小三角点一下会有quickTime分离出来的音频文件),视频播放时,声音文件会随着视频的播放而播放,结束时候,音频文件也会结束,就是这么神奇。
3.awake一般来讲是在最前面调用,而start在awake之后update之前调用。(一般来讲)
4.NGUI菜单栏里有一个Reset Prefab ToolBar,里面有很多NGUI的工具。NGUI因为是一个外部插件的问题,所以有时候会出现意想不到的错误,重启之后应该就行了。
5.预置物体的作用,第一个就是凭空产生的物体先预置,第二个就是当某一群精灵都需要同一个组件时候,可以先创建一个精灵,把他弄为预制物体,然后ctrl+d进行复制,当改变预制物体时候(例如添加了某个组件),就给所有复制的物体添加了某个组件。
预置物体如果创建了脚本(相当于给所有复制的物体创建了一个相同的脚本),里面有public变量,不能进行拖拽控件赋值,只能分别到每个物体中的public变量中拖拽复制,或者在预制物体的脚本里用代码给变量赋值(this.transform.parent.getCompment等等方法)
6.NGUI中Atlas Maker的作用相当于一个合图软件,把多张小图片拼合成一个大的图片,创建精灵的时候选择合图,再选择里面的某一张小图片创建精灵,这样有利于减少内存的消耗,类似于cocos用TP。
7.在开发过程中,在一个场景中一定要设置好物体的depth,在Widget组件里面的属性,用来设置物体和物体的叠放顺序。类似于cocos中的第几层。
8.所谓c#的单例类就是可以在任何地方用类型._instance来调用里面的成员函数和访问里面的静态成员变量,不用再去查找脚本控件去调用类的方法或者访问类的属性值,注意所有需要直接访问的函数以及变量都要设置成为public访问修饰符,不仅单例类是,你如果要在组件中添加的事件是脚本中的函数,那么脚本中的函数也一定要弄为public修饰(至于为什么,好好复习c#j基础去吧)
9.在edict->prefence里面可以修改编辑器的类型,可以换成熟练的vs进行开发,还必须下载unityVS插件并且导入到项目中,这样就可以在vs中调试unity游戏了。(至于具体,百度吧。)
10。关于unity中的协程,他是异步的,相当于又开了一个线程。StartCoroutine(startGame()),IEnumberator startGame(){ yield new WaitForSeconds(3f) ..},他在执行startGame中的语句时候,会同时执行StartCoroutine函数所在的函数中剩下的语句,即是异步的。(有的地方说实际上是不异步的,但是我们作为初学者,可以这么理解)
11.所有能看到的东西都是纹理,包括视频。
12.面板锁住的时候,没有办法在Scene面板里使用右键菜单。
13.一般来说,Awake函数要比Start函数执行的早,Start函数在Update之前调用。Awake函数在脚本实例化之后立即调用。一般来讲,初始化变量的工作放在Start函数中,因为有时候你用引用的变量的值初始化另外一个变量的时候,放在Awake函数里面执行的话,有些太早,那些引用还没引用到位。
14.写生成物体代码时候,Instantiate(gameObject,Vector3(0,0,0),Rotate())第一个参数在脚本中类型为GameObject,再拖预制物体到脚本附引用。
15.有时候使用NGUI字体显示不能显示中文,需要切换成其他字体才能显示。
16.NGUI的事件函数,注意要在物体上绑定BoxCollider
void OnHover (bool isOver):当鼠标移出或者悬停在某个碰撞器上的时候返回布尔值.在触摸设备上不会有作用.
void OnPress (bool isDown):当鼠标或者触摸到碰撞器发生布尔值返回.
void OnSelect (bool selected):当鼠标或者触摸从OnPress发生后的释放将会返回这个布尔值.
void OnClick():和OnSelect的产生条件相同,当点击或触摸碰撞器并且没有发生拖拽时候触发.
void OnDrag (Vector2 delta):当移动鼠标或者触摸按下时候位移超过特定阀值时触发.
void OnDrop (GameObject drag):当鼠标或触摸释放于从发生OnDrag的不同碰撞器伤触发.传递的参数是产生OnDrag的游戏对象.
void OnInput (string text):当一个OnSelect发生后在同一个碰撞器上触发输入.一般只有UIInput用它.
void OnTooltip (bool show):当鼠标悬停超过tooltipDelay时间后触发该命令.触摸设备上不会有作用.(直接从script中写就行)
17.ob.transform.parent = this.transform;//改变他的父亲
18.让有BoxCollider的物体添加脚本类中集成UIDragDrogItem,该物体就能进行拖拽了,拖拽完成松手后,会执行OnDragDrogRelease这个函数。可以用override重写这个函数来进行拖拽完成后的处理工作。
19.禁用某个gameObject上的脚本,GetComponent<>().enabled =false;
20.this.tranform.Find()只能查找他所在物体的子物体,效率还低,如果要手动查找其他物体,用this.transform.parent.parent一级一级过度查找。直接拖拽物体到引用是效率最快的方法。
21.http://www.cnblogs.com/holyknight-zld/archive/2012/08/30/delegateEvent.html (介绍c#事件委托比较好的一篇文章)