unity3d学习记录Word文档下载推荐.docx
《unity3d学习记录Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《unity3d学习记录Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
Xnview图片浏览软件
备注3:
ProceduralMaterials
备注4:
下载quicktime,.fbx安装程序下载
5、.fbx可以用3dsmax直接输出旧版本的。
但也可以自己下载FBX。
网络搜索FBX,链接到autodesk下载,2012版本都是支持。
6、导入视频格式可以支持.mov,到苹果网站下载quicktime
7、在项目管理和层级管理面板(场景管理面板),选中物体,按f2键可快速重命名
8、在层级管理面板(场景管理面板)中可设置物体间的父子关系
9、在场景面板中,按住鼠标右键可进入飞行模式,同时配合w\a\s\d\Q\E可以进行自由平移,w前进\a左平移\s后退\d右平移\Q上移仰视\E下移俯视;
按住鼠标右键动鼠标控制视野;
按住鼠标alt键和鼠标左键控制场景旋转;
按住鼠标alt键和鼠标中键控制场景平移;
按住鼠标alt键和鼠标右键控制场景推拉;
10、场景面板中的center/Pivot是控制几个物体组合后的坐标中心位置,center是这个群体的中心为坐标中心位置,Pivot是以第一个选择的物体作为坐标轴中心位置。
Local/Global是物体的个人坐标系和全局坐标系,个人坐标系是选择物体后包围物体的线条围绕此线条方向旋转。
全局坐标系是场景面板右上角的坐标,物体沿此坐标系旋转。
脚本部分
1、Unity3D脚本的选择:
C#只能在.net环境下使用/Boo/Javascritp这三种都可以使用,Unityscript脚本开发用上述语言
2、Unity3D脚本的编写
脚本代码文件为文本文件,可以用任意的文本编辑软件编写
FunctionStart()
{
Print(“hello”);
}
3、“编辑”菜单->
参数Preferences面板中,选择externaltools选项下的外部脚本编辑工具externalscripteditor,可指定脚本编辑工具。
4、旋转脚本
gameObject.transform.rotate(x轴,y轴,z轴);
5、声明变量
#pragmastrict
Var变量名称:
数据类型;
//变量名称用字母、数字、下划线作为变量名,以字母开头
6、变量数据类型
//byte:
字节类型250-0;
//short:
短整32767--32768
//int整型
//long长整型
//float单精度浮点型
//double双精度浮点型
//Boolean布尔值true/false
//char字符型
//string字符串型
7、输入状态(Input
输入设备接口
通过接口可以读取输入设备状态
Staticvaranykey:
Boolean//任意键状态
StaticvarmousePosition:
Vector3//鼠标位置
StaticfunctionGetKey(Key:
KeyCode):
bool//获取按键状态
StaticfunctionGetMouseButton(button:
int):
bool//获取鼠标按钮
【
varn:
GUIText;
vari:
boolean;
functionStart(){
n=gameObject.GetComponent(GUITExt);
//n.text=”abcv”;
functionUpdate(){
i=Input.anyKey;
n.text=”按键状态:
”+i;
】
8、数组:
Javascipt里可以使用两种数组,分别为内建数组和Array数组。
内建数组速度最快,并旦可以在Inspector视图里编辑,但是不能动态调整大小。
Array数组可以调整大小,且提供了常用的台并、排序等功能,但是不能在lnspector视图里编辑,速度较内建数组慢。
第三部分javascript
1、Unity中的javascript和浏览器中的区别:
在Unity里,一个js文件就是一个类。
从前基于浏览器的JavaScript是通过prototype来实现类(我一直用的是prototype.js框架)。
在Unity,比如要写一个Hello的类,里面有一个方法叫sayHello,建立一个Hello.js,然后在里面写
functionsayHello(){
//dosomething
就可以了。
而从前用浏览器的JavaScript实现类,实际就是写个function,比如
varHello=function(){
this.sayHello=function(){
如果用prototype.js框架,就这么写:
varHello=Class.create();
Hello.prototype={
initialize:
function(){
},
sayHello:
};
继承
在Unity里,这么写:
新建一个MyHello.js文件,然后写
classMyHelloextendsHello{
而从前基于浏览器的继承,我一般都是用prototype里的bind()方法来做。
还有虚拟函数的写法之类的,可以在那篇文章里找到。
数据类型
在Unity的JavaScript里,string叫String(S大写)。
字符串必须用双引号,不能用单引号,而在从前基于浏览器的JavaScript里,单引号或者双引号随便写,也可以引号套引号。
变量必须先声明
主要可能是因为Unity里的JavaScript需要编译,所以在Unity里,变量必须事先声明才能使用,否则会出错。
变量的类型的写法
定义变量的时候,前面写var,表示是变量,然后写名字,后面跟冒号,冒号后面跟数据类型。
比如
vara:
String;
写函数带的参数时也这么写,比如
functionTest(param1:
String,param2:
Object){
//functionbody
另外,如果直接定义了变量的类型,后面就不能改了,除非开始不定义变量类型。
vara="
test"
;
a=5;
这样就会出错。
但是如果这么写
vara;
a="
就没问题。
对象
在从前基于浏览器的JavaScript里,这么写是没问题的:
vara=newObject();
a.myField=22;
不过在Unity里就完全不行,要想这么做,参考这个文章(不翻译了,都是代码)
早期Unity不支持switch()或者eval_r()函数
2.0之后就支持switch了,另外不建议用eval……不过我比较习惯用eval,虽然不是个好习惯。
每行后面必须写分号
基于浏览器的JavaScript里,不写分号也没什么问题,在Unity里,必须写。
不能写匿名函数
大概的意思就是不让用这种写法:
varbar=function(){}
我之前基于浏览器的JavaScript里总习惯这么写,因为经常会function里面套function。
不过这么写倒是可以的
functionfoo(x){print(x);
}
varbar=foo;
bar("
);
Math在Unity里叫Mathf
基本一样,就是后面加个小写的f。
从前怎么用现在还怎么用就行了。
常用的比如Math.round(),Math.ceil(),Math.floor()之类的……
调用Mono
Mono里面很多东西都可以拿来在JavaScript里用,想用就直接import:
importSystem;
importSystem.IO;
调试
可以用print()函数,也可以用Log()函数或者Debug.Log()函数。
如果想设置断点,用Debug.Break()函数。
从前log这种东西还要自己写,然后显示在一个div里,现在用Unity倒是方便了。
项目制作流程
1、
保存好所需图片,背景、按钮、各类用图。
2、建一个空Project,将屏幕分辨率改为800*600.
File--->
BuildSettings...---->
PCandMacStandalone--->
PlayerSettings...--->
ResolutionandPresentation
3、Project面板中创建文件夹pic。
导入图片。
4.在场景中创建一个GUITexture,重命名为Logo,然后Logo图片放到这个GUITexture上,修改其参数如下:
5、创建一个Scene,命名为PlayScene。
然后把Scene都加入到build中
6、我们来写个脚本实现界面切换功能。
vartimeInterval:
int=4;
varlevel:
int;
privatevartimeUpdate:
float;
functionStart(){
functionUpdate(){
timeUpdate+=Time.deltaTime;
//deltaTime时间增量
if(timeUpdate>
timeInterval){
Application.LoadLevel(level);
7、将这个脚本赋给LogoScene中的camera,将Level值改为1.
8、OK,运行试试吧!
项目延续1_背景滚动
1.利用GUITexture搭建背景。
利用2个GUITexture拼接。
拼完就建立一个空的GameObject,把那些Texture组合起来,方便统一管理。
标题文字再新建一个GUITexture。
不添加移动的代码
注意:
修改Z轴数值可以改变各个Texture的前后显示,比如,让Texture1显示在Texture2前面,就使Texture1的Z轴数值大些就可以了
2.写脚本使背景循环移动
原理很简单,就是利用两张背景图循环切换就行了。
如果在两张背景图循环切换时发现有空隙,可以使每张背景图的宽度稍微大于屏幕显示宽度就行了。
varmoveSpeed:
float=0.1;
transform.Translate(Vector3.left*moveSpeed*Time.deltaTime);
if(transform.position.x<
=-1){
transform.position.x=1;
3、OK,将代码赋给背景GameObject,运行下试试!
NGUI使用
一、NGUI安装
二、NGUI
1、UIROOT(2D):
界面根节点、入口点。
2、Camera:
NGUI生成的摄像机对象,它将直直的照射在锚点面板。
3、Anchor:
界面的锚点,影响UI的显示位置。
它下面会挂着面板。
4、Panel:
面板,摄像机照射着它,它下面会挂一些控件,比如标签、按钮、精灵、拖动条等等。
5、UI脚本说明:
(1)UIButtonScale:
用于缩放按钮,可以设置鼠标经过按钮变大变小,或者鼠标点击按钮变大变小
三、NGUI图集制作
1、在PS里面设计好要做的UI,然后切片成很多个png的图片
2、在Unity中
Project下新建一个Folder,F2重命名为ResUI,以后就用来存放所有的UI,在ResUI里面重新新建一个Folder,我们这次以开始界面为例,因此F2重命名这个Folder为StartUI,这个StartUI用来存储关于开始界面的所有资源。
3、找到工程文件的根目录,把刚刚切好的png图片拷贝到StartUI文件夹里面(也可以在Unity里面用ImportNewAsset的方式导入,但是这种导入方式只能一张一张进行,比较慢),再打开Unity,鼠标选中StartUI文件夹中所有图片,在Unity上方点击NGUI中的AtlasMaker选项(快捷键为Shift_Alt_M),出现如图所示窗口:
给图集命名为StartUI-Atlas,如图:
然后鼠标选中StatUI文件夹下的所有png图片(这个就不用说怎么做了吧,哈哈),会在窗口中显示选中的图片,点击Create按钮,那么这个图集开始界面的图集就制作好了·
·
4,制作图集会自动生成一张图集,一个prefab文件,一个material文件和一张贴图,点击这个prefab,在Inspector窗口会显示图集信息,刚刚有几个png图片,图集里面就会有几个sprite,在这里可以调节sprite的大小和位置,width和length用来调节大小(宽度和长度),Border是用来制作SliceSprite时才会用到的,除SliceSprite外四个值都调为0.
SliceSprite是一个可以拉伸的sprite,通过border中设置的值,它扩大的时候只会扩大中间的部分,边缘的不会有变化,因此对于有发光边缘的但内部无渐变无图片的背景,可以将发光部分设置为边缘,可以无限的扩大也没有任何视觉影响,这样极大的节省了资源。
5,在show里可以选择显示整张图集还是只显示一个sprite,
同时在这里也可以删除或者添加sprite,
也可以给Sprite改名字,
6、在工程面板中,将新定义的图集New…整理到font&
Atlas文件夹中,如下图。
四、背景引入和自适应分辨率背景缩放
1、利用NGUI菜单创建create->
widget。
层级面板会生成UIroot
2、继续创建一个create->
panel,默认参数设置即可,panel下创建一个sprite,sprite可添加背景图片(前提是事先做好了NGUI图集),参数如下。
选择图集中的背景图片bg
选择自定义的图集,即自己制作的图片集合,看上一点说明
其中size默认即可,Anchors下的Type选择Unified,并设置Target为UIroot,left,Right,Bottom,Top均设置为+0
五、字符集制作——引入中文字符
在进行Unity项目中我们使用了NGUI进行UI模块的开发。
那么我们如何使用自定义的字库呢?
这里Forward就对NGUI自定义字体制作流程做一个小结。
1、我们在自己的测试场景TestScene中添加一个空的GameObject,这里我们把它命名为FSFont,如下图所示:
图1
2、为FSFont中添加UIFont组件:
图2
3、在FSFont中需要注意的一点是FontType要选定为Dynamic类型,如图3:
图3
4、提前将我们的目标字体添加到工程中的font&
Atlas,这里我们选择使用微软雅黑。
图4
5、为我们创建的FSFont选择字体ttf文件,如下图所示:
图5
6、将我们编辑好的FSFont生成Prefab留待项目使用(2种方法,第一种是直接将设置好的FSFont拖动到左侧的工程面板中;
第二种是在工程面板中右键create->
prefab,会在工程面板生成newprefab对象,将左侧FSFont拖动到此Prefab对象上即可):
图6
好了,有了上面的简单操作,我们就得到了目标字体的Prefab,那么到底效果如何呢?
我们使用NGUI在场景中创建一个Label,在Label的Font中选择自己的FSFont:
图7
运行效果如下:
图8
备注,如果出现字符错误,则重新加载下字符集
GUI控件
1、GUI代码需要在OnGUI函数中调用才能绘制,如果放在Update函数中会有错误提示。
2、Rect参数:
GUI的控件-般都需要传入Rect参数来指定屏幕绘制区域。
例Rect(0,10,300,200)对应的屏幕矩形区域左上角的坐标为(0,10),宽度为300,高度为200。
3、屏幕坐标:
在UnityGUI中,屏幕坐标系以左上角为原点(0,0),右下角为(screen.Width,
screen.Height),其中screen.Width为屏幕宽度,screen.Height为屏幕高度,以像素为单位。
这点与Input.mousePosition的鼠标位置不太一样。
对于mousePosition,屏幕左下角为原点(0,0),屏幕有上角为(screen.Width,screen.Height)。