美术部分:
Unity的话主要还是分两块吧,第一块是美术(自己都不懂~这里允许我稍微带过一下吧~),美术的话主要包括3d模型、材质、纹理(贴图)这几部分吧,当然你也可以说还有shader(着色器),Unity本身拥有几十种shader,也可以根据自己的需要使用shaderLab语言来编写shader,这个对我来说相当有难度,所以一般只用Unity自带的和网上“流传”的。
程序方面:
基本组成:
Scene场景,类似于Flash中的stage,用于放置各种对象。
GameObject,可以携带各种Component(每个GameObject至少带有Transform组件,所有的组件都可以从顶部菜单Component里面找到并添加给游戏对象)。
Component组件,附加在GameObject上,不同的组件可以使GameObject具有不同的属性,Transform、碰撞器、刚体、渲染器等都是组件,脚本也是组件的一种,对象所表现出来的行为都是由组件实现的。
脚本语言:
C#、Javascript、boo(前两者使用较为广泛,网上教程以前两者为主,个人推荐c#),一般的继承MonoBehaviour类的脚本都需要依附的场景中的对象上才能被执行。
用户图形界面部分(GUI):
- 用于制作按钮、文本显示、滚动条、下拉框等常用图形操作界面元素,使用GUISkin和GUIStyle可以自定义样式)
- 系统自带GUI
- 各类GUI插件,NGUI、EZGUI等。
预制:
- 用于程序运行时,动态实例化对象的“母体”,比如,在射击类游戏中,子弹的生成就可以使用实例化预制的方式来实现,这就好比是Flash中的各种Display类,你可以定义它的各种属性方法,然后在使用的时候直接实例化一个实例。
- 在project面板右击选择Creat——Prefab新建一个预制,将Hierarchy面板中要制成预制的对象拖到这个新建预制上即可。
标签和层:
标签(tag)用于辨别物体,与name类似,使用对象的tag和name都可以找到对应的物体(GameObject.Find(“Name”)、 GameObject.FindWitnTag(“Tag”))。默认是Untagged,可以通过Inspector面板里面Tag的下拉菜单选择Add Tag项来添加新的标签,
在tagmanager中点开Tags左侧的小三角
通过size来增加标签的数量,每个Element内都填入新标签的名字
层(layer),在使用某些功能的时候,可以通过层来过滤不需要运用该功能的对象,也就是把该功能运用到特定的层,比如,相机的Culling Mask属性,通过选择特定层可以实现只显示位于被选中的层的对象。层的添加也是在标签管理器中,Unity已经设置了8个层,你是不能对这8个层进行修改的,你可以从第9个(也就是user layer8)开始添加你定义的层。
![]()
资源:
- .unitypackage格式的文件可以直接import到unity中,记住最好是在打开unity的情况下,在project面板里右击,然后在import packages中选中你要导入的资源。注:Unity不识别中文路径,因此要导入的资源千万不要放在中文目录下!!!还有你的工程也不要新建在中文目录下!!!(你新建工程的时候选择中文路径的话,也建不起来~)
- 也可以把你的场景打包,导出.unitypackage资源包,然后可以在其他项目中导入使用。(在project面板里右击, export package)
- 另外,利用工程面板(project)右键菜单中的import new assets可以导入其他形式的资源,如,模型、音频、视频等,当然也可以直接将外部文件夹中的资源拖到project中的方式完成导入。
物理引擎:
unity使用NVIDIA PhysX物理引擎
- 碰撞器:各种基本体的碰撞器(box、sphere、capsule、cylinder),网格碰撞器(mesh collider)、车轮碰撞器(Wheel collider)、地形碰撞器(terrain collider)——碰撞器组件在你选中对象的时候会以绿色线框显示。
- 碰撞检测:碰撞器碰撞检测、光线投射(射线)、触发器碰撞检测,通过碰撞检测可以得到与当前对象发生碰撞的对象信息,使用碰撞的相关函数OnCollisionEnter(碰撞器碰撞检测)、OnTriggerEnter(触发器碰撞检测)、Physics.Raycast(光线投射)获取。
- 刚体:模拟物体物理现象的基础,加了刚体组件才能模拟重力、阻力等。
- 力:作用于刚体,你只要通过添加各种力,就可以使刚体表现出跟现实中一样的受力情况。
粒子系统:
两种形式,一种以物体携带粒子系统组件的形式实现,另一种是直接使用粒子系统GameObject(3.5以后)
- 粒子系统GameObject:GameObject——Creat other——Particle system
- 粒子系统组件:粒子发射器(ParticleEmitter,有Ellipsoid Particle Emitter和Mesh Particle Emitter两种类型的粒子发射器,主要有粒子产生、数量、速度、大小、存活时间等参数设置)、粒子动画器(Particle Animator,主要负责粒子产生后直至粒子消亡的行为变化的控制,包括运动过程中的旋转、受力等)、粒子渲染器(Particle Renderer,主要是负责给予粒子的渲染,阴影、材质等设定)
抽空可以用粒子组件调一个火焰效果,把所设置的参数值分享给大家~
粒子系统组件参数浅析+火焰粒子demo(http://bbs.9ria.com/forum.php?mo ... 1&extra=#pid1577455)
相机(camera):
- 相机视角:透视(可以调整透视角度)、正交(没有透视效果)
- Skybox:只在Game窗口可见,需要skybox类型的shader,以及附在其上的六面贴图纹理。
- 第一人称视角:角色不出现在视野中,相机看到的就像角色双眼看到的一样,如,常见的FPS射击类游戏。第三人称视角:能在视野中看到角色,相机一直跟随者角色运动。(可以导入Unity自带的CharacterControllers资源包,里面有第一人称和第三人称的原型)
光照系统:
创建灯光GameObject——creat other
- 常用灯光类型:平行光(Directional light,无衰减,模拟太阳光)、聚光灯(spotlight,从一点向某一方向发射锥形光束,有衰减,聚光效果)、点光源(Pointlight,从一点向外辐射,有衰减)
- 烘焙:将静态光影效果渲染到纹理上,减少灯光和阴影带来的开销(free版的Unity不支持阴影,因此烘焙是free版实现阴影的方式)。
- 阴影:只有pro版才支持,分为hard shadows和soft shadows两种,前一种阴影比较重,后一种相对柔和。但是默认情况下,你会发现只要directional light类型的灯光才可以使用阴影,别急,咱们来改一个设置,让其他两种灯光也能使用阴影,打开edit-project settings-player,然后将rendering path改为deferredlighting(延迟光照),这下你的电光源和聚光灯也能产生阴影了~(要产生阴影,还需要将投射阴影的对象的Cast shadows(投射阴影)勾选,将接受阴影的对象的Receive shadows(接受阴影)勾选
-
- 举个例子,你要让树在地面上产生阴影,那就得让树投射阴影,然后让地面接受阴影才行)。
地形系统:
选择顶部菜单Terrain——creat terrain创建一个地形。
地形有一组地形工具用来绘制地形的高度、生成各种地貌,并且可以对地表运用纹理,还可以添加树、草等地表植被。当然在使用纹理绘制地形以及添加地表植被之前需要导入相关的纹理资源和植被资源,另外还可以导入unity自带的水的资源包,使用它里面的水面来模拟地形中的湖泊、河流等。
发布:
- 关于Player settings播放器设置的话这里暂且不多说,发布的时候通过player setting进行发布设置,每个平台都有对应的设置参数,根据需要来设置,主要是关于程序图标、分辨率、渲染等设置,大家可以自己试试(有些参数只有pro版才能设置)。
- 下面我们来看看build settings对话框,左侧是可发布的平台(Unity跨平台性很强大,4.0已支持发布至10种平台:IOS、Andriod、Windows、Mac、Linux、Webplayer、Flash、PS3、Xbox360、Wii u),右侧是对应平台的发布设置,一般初学的话,只要会发布单机版的和webplayer的就差不多了,这两个的话,右侧的发布选项按照默认的设置就可以,当然单机版要在Target Platform中选择对应的操作系统,webplayer的话这里我给大家介绍前两个参数,Streamed顾名思义就是在网络上下载的时候以流的形式,Offline Deployment,这个是可以在离线(断网)状态下本地运行你的webplayer程序(这里需要注意的是,默认情况下你每次打开webplayer程序的时候,浏览器都会自动去访问官网更新webplayer插件,如果你没勾选这个选项而又在没有联网的状态下运行webplayer的话是无法运行的)