码迷,mamicode.com
首页 > 其他好文 > 详细

unity3d 英保通公开课小结 1-38讲

时间:2014-07-01 07:40:04      阅读:338      评论:0      收藏:0      [点我收藏+]

标签:unity3d   公开课   英保通   小结   1-38讲   

  第二讲:Unity资源管理【持续更新中】

    2.1 Unity 资源及资源类型

    2.2  模型和角色动画的输出设置

    2.3  材质和着色器

    2.4  2D 纹理和 Moive纹理

    2.5  声音文件

    2.6  Asset Store( 资源 Store)

    2.7  Prefab( 预设 )

    2.8  Project视窗搜索功能

    2.9  资源输入原理( metadata 

第三、四讲:模型和角色动画的输出

【模型】

模型主要可以以两种方式进行输出:

1. 使用插件进行输出。并输出为指定的文件格式,如FBXOBJ

2. 直接输出为相应的3应用文件,如.maxBlend,Unity自身再进行转换。

使用3D软件自身格式进行输出:

优点:

1. 快速的输出过程,直接从3D文件到Unity

2. 简单的初始化过程

不足:

1. 文件中可能会包括不需要的数据;

2. 若输出文件过大,可能会妨碍Unity的更新过程;

3. 比较少的数据校验过程,可能会增加出错几率。

使用插件进行输出:

优点:

1. 仅仅输出你需要的数据;

2. 验证数据;(在导入Unity中之前,可以重新输入回3D软件对数据进行验证);

3. 产生比较小的文件;

4. 可以使用模块化的方法,即一模块可以用于碰撞,而另一输出的模块可以用于交互。

5. 对于其他Unity不支持的3D软件的专有格式,可以使用插件。

不足:

1. 整个输出导入过程可能会反复;

2. 输出版本不容易控制(比如输出多个版本的FBX)。

【动画】

两种动画的输入方式:

1.第一种方式:我们从三维软件中输出一个单个的模型文件,但此文件中包含有所有的动画片段,在输入到Unity中后,根据各个动画片段的帧范围来分割出动画片段;

2.第二种方式:在三维软件包中,我们不需要一次性创建所有的动画片段,而是输出为多个模型文件中,每个模型文件中只包含有一个动画片段,如IdleRunWalk等,此时不得不输出多个文件,这时要把这些动画片段输入到Unity中,还需要遵循一定的命名规范:例如,我们输出一个名称为Heroine_animate的不带有任何动画片段的基本的FBX模型文件,然后我们再输出一个包含有idle名称为Heroine_animate@idle的动画片段,以此类推,这样在Unity中才能恰当的使用它们。

第五讲:资源管理:材质和着色器

1. 纹理尺寸应该是2的幂次方;

2. 材质是基础,然后可以把纹理加载到材质上,然后加载到物体上;

3. 材质?---着色器模型?--纹理。

第六讲:资源管理:2D纹理和Movie纹理

2D纹理】

Gui纹理显示:Texture2D

1.Function OnGui()

{//绘制

}

2.Resources.Load(路径)Resources.LoadAll()方法//加载资源

3.GUI.DrawTexture()//绘制

Movie纹理】

Movie纹理的格式:

1. Movie纹理是从视屏文件中产生的一系列动画纹理,用户可以像平常资源一样将其放置在Asset资源文件夹中进行导入;

2. Movie纹理是通过Apple Quick Time导入的,因此凡是Quick Time支持的格式,Movie纹理都可以支持:.mov,.mpg,.mpeg,.mp4,.avi,.asf;

3. 当一个视频文件添加到项目中时,他会被自动输入并被Unity转换为Ogg Theora格式,然后可以像普通纹理那样进行使用。

第七讲:资源管理:声音文件

1. 声音文件可以直接拖拽添加;

2. 声音产生和监听要添加Audio Source组件(声源)Audio Listener组件(一般为摄像机)

3. 2D声源监听效果与距离无关,3D声源离声源越近声音越清晰;

4. audio.Play(Stop,Pause,PlayOneShot)函数操作。

第八讲 资源管理:Asset Store(外部资源库)

1. 关键字搜索资源;

2. 下载资源;

3. 查看、更新以前下载的资源;

4. 下载的资源路径:c/用户/AppData/Roaming/Unity/Asset Store

第九讲 资源管理:Prefab(预设)

1. 实例继承性:修改Assets中属性,实例化的物体中属性也会相应改变;

2. 实例重载:可以单个修改实例化的物体;

3. 选择实例:select

4. 取消重载:Revert

5. 预设,空的预设和资源图标不同,本质也不同。

6. 实例化:Instance()

第十讲:资源管理:Project视窗搜索功能

资源文件管理,创建资源,搜索资源。

Favorites 快速访问:

1. 拖拽文件夹;

2. 添加搜索结果。

搜索:

1. 搜索指定类型资源;

2. 搜索标签;

3. 保存搜索结果。

第十一讲 资源输入原理

资源使用和管理:

添加到文件夹中时,unity自动输入资源并管理:

1.对已有资源建立链表;

2.添加新文件时,自动对比链表以发现新文件,为新文件添加唯一id

3.处理是对文件做转换,放置于library文件夹中。

4.对文件的操作要在unity里边做,不能拿出来在windows文件夹中做,以防出现文件不符合的问题。

第十二讲 场景创建:游戏物体与组件

开始的游戏物体都是基础物体,将组件添加到基础物体上使其获得属性以成为可以使用的物体。

组件作用:为相应物体增加相应的功能效果。

组件属性:数值属性和引用属性。

组件顺序:影响影像效果。

第十三讲 场景创建:属性编辑器的使用

预设,层次,场景中的物体在属性编辑器中修改、

属性:数值属性,引用属性。

数值属性:直接修改文本框;动画曲线,颜色间层使用相应编辑器。

引用属性:直接用拖放的方式操作。

Ps

1.可以选择多个相同类型物体同时编辑共同属性,不同属性显示横线;

2.多个相同预设实例物体不可以多重编辑,但可以单个对预设重载;

3.编辑器模式:normaldebug[易于调试]lock[锁定]

第十四讲 场景创建:场景视图操作

场景浏览:

1.用箭头键移动摄像机,按住shift键加速移动速度;

2.层次视图中,选中物体,在场景视图中用F键,将其设为场景中心;

3.Alt+左键:旋转;Alt+中键:移动;Alt+右键:放缩。

4.飞行模式[透视]:按住右键,wsad上下作左右移动,qe上下移动,右键拖动旋转。

5.正交视图和透视视图切换

定位物体:

1.移动,旋转,缩放

2.单位吸附[snap]ctrl+移动

3.表面吸附:shift+ctrl+移动,会在表面移动

4.顶点吸附[顶点对齐]:按住v键,用鼠标左键选择要吸附的顶点并移动

5.设置图标:属性框中修改,可设置自定义图标

第十五讲 场景创建:灯光和摄像机

灯光:颜色和基调

1.可以将灯光当成一个组件

2.改变灯光颜色来改变场景基调

3.灯光:实时灯光、灯光贴图

4.根据不同平台不同需要设置相应的渲染路径

5.灯光:点灯光、聚光灯、方向灯、区域灯光[灯光贴图]

摄像机:

1.可以实例化;

2.多个摄像机处理

3.场景中空白部分的处理

第十六讲 unity脚本使用:脚本及变量

创建脚本:create edit-create

脚本内容:start()只执行一遍,update()实时循环操作[每一帧]

1.脚本必须依附在物体上;

变量:实时测试不同变量的效果,提高重用性;

1.播放时的数值修改不会保存,需要在停止播放后再次修改;

2.对不同物体中重用脚本,变量使不同物体产生不同的效果;

第十七讲 unity脚本使用:游戏对象组件访问

公共组件:transformrigidbody,摄像机,动画可以直接用“.

脚本:通过getcomponent()调用别的脚本

第十八讲 unity脚本使用:游戏对象访问操作控制

引用物体以及其他物体的脚本:

1.定义公有变量,在属性编辑器将对应的物体或物体所在的脚本拖动赋值;

2.GameObject.Find()函数:通过物体的名称,或路径来查找场景中的物体。

3.GameObject.FindGameObjectWithTag()函数:通过物体的标签获取物体

第十九讲 unity脚本使用:脚本时间控制

1.Time.deltaTime:根据时间固定变化,每秒改变,而不是每帧时间

2.Time.time:当前的时间

3.Time.deltaTime :上一帧所消耗的时间

4.Time.fixedTime :固定增量时间

5.Time.fixedDeltaTime :固定增量间隔时间

6.Time.smoothDeltaTime :平滑DeltaTime

7.Yield语句:Yield语句是一种特殊类型的Return(返回)语句,它可以确保函数在下一次被执行时,不是从头开始,而是从Yield语句处开始。

Egyield WaitForSeconds5.0;  后续部分延迟5s执行

第二十讲 unity脚本使用:随机数的使用

Random类:

1.Random.value0--1之间的随机数

2.Random.Range():指定的范围

第二十一讲 unity脚本使用:C#脚本编写

1.声明定义变量

jspublic var iint=0

C# public int i=0

2.使用函数

JsFunction SetInttempint

{

i=temp

}

Function getInt():int

{

return  i;

}

Var obj:GameObject ;

Obj=GameObject.Find(“Cube”);

Var script:jsTest=obj.GetComponent(“jsTest”);

 

Script.setint(50);

Debug.log(Script.getint());

C# :public void Setint(int temp )

{

I=temp;

}

Public int getint()

{

Return i;

}

cTest  script =obj.GetComponent<jsTest>();

第二十二讲 unity脚本使用:物体间通信方式

1.父物体和子物体间

GameObject.SendMessage:向自身的脚本中发送消息

GameObject.BroadcastMessage :向自身及子物体的脚本中发送消息

GameObject.SendMessageUpwards:向自身及父物体中发送消息

2.事件发送和接收

发送: 

委托:public delegate void EventHandler(GameObject e);  

事件:public event EventHandler MouseOver;  

对事件定义:

void OnMouseOver () {  

    if (MouseOver != null)  

        MouseOver (this.gameObject);  

  } 

接收:

EventDispatcher ev=GameObject.Find(“cube”).GetComponent<EventDispatcher>();

Ev.MouseOver+=ListeningFunction//注册监听器

//监听函数

void ListeningFunction (GameObject e) { 

        this.transform.Rotate(20, 0, 0); // ‘e‘ is the game object that dispatched the event 

    //    e.GetComponent<EventDispatcher>().MouseOver -= ListeningFunction; // Remove the listener 

Debug.Log("mouse is over: "+e);

第二十三讲 GUI图形用户界面:unityGUI原理介绍

 

OnGUI()

1.每帧执行一次

2.定义UI即为创建UI

3.可以像普通物体那样控制UI,例如Time

4.一般用Rect限制按钮的大小

5.可以在规定的按钮上添加指定文字,图片;甚至图片+文字+提示『GUIContent

Eg:

Function OnGUI()

{

If((Time.time %2<1

{

if(GUI.Button(Rect(10,10,120,110),GUIContent(“我的按钮”,“提示”)))

{

Print(“用户单击了按钮”);

}

}

}

第二十四讲 GUI图形用户界面:常用控件及使用

1.标签:显示信息

GUI.Label();

2.按钮:可以单击

GUI.Button();

3.重复按钮:按住后内容持续执行

GUI.RepeatButton();

4.文本输入框:可以输入变量并引用

GUI.TextField();

5.开关控件:表达是否选中『bool

GUI.Toggle();

6.滑块控件:

水平滑块:GUI.HorizontalSlider(Rect(),当前位置,开始位置,最远位置);

第二十五讲 GUI图形用户界面:复合控件及使用

1. 工具条控件:模拟工具栏效果,每次只一个按钮激活,且一直保持到激活其他按钮为止

参数变量:

标记工具条当前激活的按钮[int];

当前按钮数目以及按钮名称[string[]];

2. 选择网格控件[效果和工具条类似,但是可以分列]

参数变量:

标记工具条当前激活的按钮[int];

当前按钮数目以及按钮名称[string[]];

列数[int].

3. GUI.changed():若是某些控件发生了更新,可以对某些控件进行检测

第二十六讲 GUI图形用户界面:群组视图控件及使用

1. GUILayout:可以自动调整控件大小

2. 使用组:

GUI.BeginGroup(Rect());

GUI.EndGroup();

组可以互相嵌套,产生子组:可以实现类似能量条的效果

第二十七讲 GUI图形用户界面:GUI Skin及创建自定义风格组件

1. 使用默认显示风格:

2. 使用自定义的GUIStyle

GUI.Button(Rect(),”名称”,”box”);

3. 使用GUISkin:多个GUIStyle的集合

GUISkin skin=myskin;//直接在前边说明,后边控件的皮肤都是这个

GUISkin skin=null//此后的皮肤都为默认皮肤

第二十八讲 GUI图形用户界面:GUILayout控件及其使用

GUILayout控件:

1. 自动布局的控件

2. 可以创建GUI包含的控件

3. 默认垂直布局

4. 若要水平布局:GUILayout.BeginHorizontal();GUILayout.EndHorizontal();

5. 滑动条要与别的控件间产生间距:GUILayout.Space(120);并指定控件的固定宽度和固定高度。

 

GUILayout.HorizontalSlider(sliderValue,0.0,10.0,GUILayout.Width(100));

6. 控件组/容器:GUILayout.BeginArea();  GUILayout .EndArea();

第二十九讲 GUI图形用户界面:动态窗口添加及使用中文字体

1.创建窗口:

windowRect=GUI.Window(0,windowRect,DoMyWindowFunction,”我的窗口”);

Function DoMyWindowFunction(windowID :int )//窗口函数

{//创建窗口控件

GUI.DragWindow(Rect(0,0,10000,10000));//范围内可拖动

}

2.可以使用toggle控件控制窗口的显示或关闭

第三十讲 地形引擎介绍:地形创建

创建地形:create Terrain

第三十一讲  地形引擎介绍:地形绘制

1.第一项  抬高降低工具。选择地形样式,点击拖动鼠标,可以抬高地形;按着shift键,可以创建凹陷效果【在突起地形可以实现,也可以抬高地形,再实现凹陷效果】。

1.第二项  绘画高度选项。可以选择笔刷,绘制的高度不能超过hight参数,否则会平整掉。

2.第三项  平滑高度选项。对尖锐部分操作,可以产生平滑效果。

第三十二讲  地形引擎介绍:地形纹理绘制

1.第四项  绘制纹理。

① 导入标准地形资源

② 添加纹理,纹理同时平铺于整个地形中[基础纹理]

③ 添加其他纹理,在基础纹理上添加相应的效果。

第三十三讲  地形引擎介绍:添加树木,植被等地形元素

1.第五项  添加树木

1) 添加树木

2) 点击ctrl拖动鼠标,可以删除指定树木;点击shift拖动鼠标,将删除所有拖过的树木。

2.第六项  添加植被等细小的物体

1) 添加植被

2) 点击ctrl拖动鼠标,可以删除指定细节;点击shift拖动鼠标,将删除所有拖过的细节。

3) 可以添加纹理,也可以添加实体

4) 拉近摄像机镜头才可以看到草的效果

第三十四讲  地形引擎介绍:地形设置及公路效果创建

1.第七项 地形设置

① 基础地形

② 树及细节纹理

③ 风的设置

④ 地形碰撞器

2.公路创建  easyRoads3D插件

1) 添加公路标记shift+鼠标左键

2) 插入公路标记

第三十五讲  输入与控制:输入管理器与虚拟轴定义

1.输入管理器

Edit->Project Settings->Input.

2.获取虚拟轴

Input.GetAxis ("Vertical")   上下箭头,ws按键

第三十六讲  输入与控制:虚拟轴应用及键盘事件

汽车驾驶效果

1. var translation : float = Input.GetAxis ("Vertical") * speed;

键盘事件

2. if (Input.GetKey ("a")) {

        print ("a键被按下");

    }

3. if (Input.GetKeyDown ("b")) {

        print ("b键被按下一次");

}

4. if (Input.GetButton ("Fire1")

Print(“按下开火按钮”);

第三十七讲  输入与控制:鼠标事件与GUI系统双击检测

鼠标事件

1.if(Input.GetMouseButtonDown(0))

         Debug.Log("您在_"+Time.time+"时,按下了鼠标左键");

  if(Input.GetMouseButtonDown(1))

         Debug.Log("您在_"+Time.time+"时,按下了鼠标右键");

  if(Input.GetMouseButtonDown(2))

         Debug.Log("您在_"+Time.time+"时,按下了鼠标中键");

2. if(Input.GetMouseButton(0))

        Debug.Log("您一直按着鼠标左键");

3.   if(Input.GetMouseButtonUp(0))

        Debug.Log("您在_"+Time.time+"时,抬起了鼠标左键");

    if(Input.GetMouseButtonUp(1))

        Debug.Log("您在_"+Time.time+"时,抬起了鼠标右键");

    if(Input.GetMouseButtonUp(2))

        Debug.Log("您在_"+Time.time+"时,抬起了鼠标中键");

GUI系统双击检测

function OnGUI()

{

var e : Event = Event.current;

    if (e.isMouse&&(e.clickCount==2)) {

        Debug.Log("用户双击了鼠标");

    }

}

第三十八讲  角色控制组件:第一人称角色控制器及CharacterController组件

第一人称角色控制器:

1.CharacterController:设置角色爬坡的角度,步高[每步可以抬高的高度]

2.Mouse Look:调节视角

3.Character Motor:实现更精确功能:移动物体上运动,滑动等

4.FPSInput Controller:获取输入

 

unity3d 英保通公开课小结 1-38讲,布布扣,bubuko.com

unity3d 英保通公开课小结 1-38讲

标签:unity3d   公开课   英保通   小结   1-38讲   

原文地址:http://blog.csdn.net/ly209/article/details/36014827

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!