分类:Unity、C#、VS2015

创建日期:2016-04-05

一、简介

组件(Component)在Unity游戏开发工作中非常重要,可以说是实现一切功能所必需的。

1、游戏对象(Game Object)

游戏对象(Game Object)包括空物体、基本几何体、外部导入的模型、摄像机、GUI、粒子、灯光、树木等各类元素。

凡是出现在层次视图中的元素都是游戏对象。

2、组件(Component)

组件是在游戏对象(Game Object)中的实现某些功能的集合。无论是模型、GUI、灯光还是摄像机,所有游戏对象本质上都是一个空对象挂载了不同类别的组件,从而让该游戏对象拥有不同的功能。

对于一个空游戏对象来说,如果为其添加一个摄像机组件,那么该对象就是一架摄像机;如果为其添加了网格过滤(Mesh Filter)组件,那么该对象就是一个模型;如果为其添加了灯光组件,该对象就是一盏灯光。

脚本在Unity中也是一种组件。

3、场景(Scene)

场景是包含组件的各种游戏对象的集合。

如果新建一个Unity工程,那么该工程会自动创景一个场景。

如果是游戏,那么可将一个场景看作是一个关卡。

你也可以通过菜单创建新场景:

同一个工程中可包含多个场景。

二、将组件添加到游戏对象中

将组件添加到游戏对象中基本设计步骤(示例)如下:

运行Unity,新建一个名为ch04Demos的工程,然后按下面的步骤操作即可。

1、添加文件夹

在工程视图中,创建一个Demo01文件夹。

2、添加空对象

向场景中添加一个空游戏对象(Create Empty)。

选中该游戏对象,可以发现该对象会自动拥有一个Transform(几何变换)组件。

所有游戏对象都必须有这个组件。

3、添加组件

先在层次视图中选择某个游戏对象,然后通过以下两种方式之一为该对象添加其他组件:

方式1:通过菜单的Component将其他组件添加到该游戏对象中。

方式2:通过检视器中的【Add Component】按钮添加其他组件。

这两种方式操作的结果完全相同。

4、保存场景

按<Ctrl>+S保存场景。

首次保存场景时,会让你输入场景名称以及保存的位置。这里将其保存到Demo01文件夹下(文件名:Demo01.unity):


三、组件类型

在 Unity 5.3.4 中,可添加的组件分为以下类型:

1、Mesh

网格。该类型的组件有:

(1)Mesh Filter

网格过滤器。该组件用于在工程资源中获取网格(Mesh),然后将真传递到所属的游戏对象中。如果获取的网格拥有蒙皮信息,Unity还会为该网格自动创建一个Skinned Mesh Renderer组件。

添加Mesh Filter组件后,还需要为该游戏对象添加一个Mesh Renderer (网格渲染器)组件,否则网格虽然实际存在于游戏对象中,但无法在场景中被渲染出来。

(2)Text Mesh

文字渲染器。该组件用于生成三维的字符串(文字)。

(3)Mesh Renderer

网格渲染器。该组件用于从网格过滤器中获得网格模型,在根据游戏对象的Transform组件中定义的位置,在场景视图中将其渲染出来。

2、Effects

特效。该类型的组件有:

(1)Particle system

粒子系统效果。该组件用于创作烟雾、气流、火焰、瀑布、喷泉、涟漪等效果。粒子系统的功能非常强大,后面还会专门用一章来介绍它。

(2)Trail Renderer

拖尾轨迹渲染效果。该组件用于渲染游戏对象的运动轨迹,即场景中的物体在运动状态下产生的轨迹、拖尾等效果。

(3)Line Renderer

线条渲染效果。该组件用于渲染3D空间中2个或更多点之间的连线。此连线支持定义宽度并可以被赋予材质贴图。其渲染算法与Trail Renderer组件相同。如果需要渲染出两条或更多的线,就需要使用多个游戏对象(Came0匀ect)并添加该组件。

如果需要渲染出两条或更多的线,需要使用多个游戏对象并添加该组件。

(4)Lens Flare

镜头光晕效果。该组件用于模拟真实摄像机镜头的光线折射效果。可以用来表现摄像机对准强烈光源(如日光)的效果,进而提高场景的真实性、趣昧性。

(5)Halo

光环(光晕)效果。该组件用于渲染游戏对象周围的光线区域,—股用于光源对象或自发光物体上,表现出光晕以及空气中细小的灰尘颗粒的效果。

(6)Projector

幻灯片投射效果。该组件用于将材质纹理投射到任意与其视锥相交的场景中的游戏对象上。注意,该组件所用的材质必须使用Projector类型的Shader(着色器)才能正常工作。该类型的Shader可以通过导入Unity自带的Projector资源包来获得。

(7)Legacy Particles

旧版粒子系统。该组件用于创作烟雾、气流、火焰、瀑布、喷泉、涟漪等效果。关于该类型组件的相关知识后续章节中再详细介绍。

3、Physics

物理组件。该类型的组件有:

Unity拥有内置的NVIDIA PhysX物理引擎,可以模拟真实的物理行为。该类型组件非常重要,后面还会专门用一章来介绍它。

4、Navigation

导航寻路。该类型的组件有:

(1)Nav Mesh Agent

导航网格代理。该组件用于寻路,是存放导航网格(NavMesh)中代理导航信息的地方。

(2)Off Mesh Link

断开网格链接。如果场景中存在静态网格模型断开的情况,此时就无法从场景的一部分导航/移动到完全分离的另外的部分。这种情况下,可以使用该组件将分离的网格进行设置,进而解决此类问题。

(3)Nav Mesh Obstacle

导航网格障碍物。—股来说,Unity的导航系统中对于位置固定的障碍物,可以通过烘焙进行计算。如果场景中有动态的障碍物,需要该组件来进行设置。

5、Audio

音频。该类型的组件有:

(1)Audio Listener

音频侦听器。该组件用于接收场景中输入的声源,并通过硬件设备的扬声器进行播放。在Unity中添加的摄像机对象默认不带该组件。对于大多数应用程序,经常会把侦听器贴在主摄像头(Main Camera)上。如果一个音频侦听器在混晌区(Audio Reverb Zone)内,混晌会自动应用到在场景中所有能听到的声音(仅Pro版支持此功能)。此外,如果将音频效果应用到侦昕器,它将被应用到场景中的所有听得见的声音。

(2)Audio Source

声源。该组件用于播放场景中的音频剪辑。如果音频剪辑是一个3D声源,则会根据距离产生衰减效果。如果侦听器是在1个或多个混晌区中,混晌效果会应用到声源。

(3)Audio Reverb Zones

混响区。该组件用于获取音频剪辑,并根据音频侦听器所在的混晌区进行失真处理。一般用于从不受环境影响的地点移动到受环境影响较大的地点。

6、Rendering

渲染。该类型的组件有:

(1)Camera

摄像机。该组件用于向玩家显示游戏世界的一切,类似人类的眼睛,它是Unity中是最要的组件之一。新建一个游戏场景时,Unity会在场景中默认添加一个摄像机(即:带有摄像机组件的游戏对象)。在同一个游戏场景中,摄像机的数量不受限制。

(2)Skybox

天空盒。该组件用于摄像机对象,可理解为包围在游戏场景之外的巨大的立方体。用于模拟天空的效果。关于天空盒组件请参考本章第10节的相关内容。

(3)Flare Layer

耀斑/光晕层。该组件用于摄像机对象,模拟镜头光晕的效果。在Unity中添加的摄像机对象会默认携带该组件。

(4)GUI Layer

用户界面层。该组件用于摄像机对象,可以使二维图形用户界面在游戏运行状态下渲染出来。在Unity中添加的摄像机对象会缺省携带该组件。

(5)Light

灯光。该组件用于照亮场景、对象。在Unity中添加的灯光对象会缺省携带该组件。通过灯光组件可以模拟太阳、燃烧的火柴、手电筒、枪火光以及爆炸等效。

(6)Light Probe Croup

动态光探头/灯光探测器。该组件用于添加一个或多个动态光探头/灯光探测器到游戏场景中。通过该组件可以为移动物体实时计算光照贴图。

(7)Reflection Probe

遮挡探头。

(8)Occlusion Area

遮挡区域(只有Pro版支持此功能)。该组件用于在运动的游戏对象上应用遮挡剔除功能,创建一个遮挡区域后修改其大小来适应运动物体的活动空间。

(9)Occlusion Portal

遮挡入口。该组件用于创建初始的闭塞功能,并可以对闭塞功能进行实时的开启、关闭控制。

(10)LOD Group

细节级别组。该组件用于管理LOD(细节级别)。可以方便地以可视化的方式为游戏对象指定相应的细节级别。

(11)Sprite Renderer

二维精灵渲染。

(12)Canvas Renderer

画布渲染。

(13)GUI Texture

用户界面纹理。该组件用于渲染用户界面所用的二维平面图像。例如按钮、界面背景等。在Unity中添加的GUI Texture对象会缺省携带该组件。该组件的定位、缩放通过修改屏幕坐标的X、Y值完成。

(注意Unity GUI脚本比GUI Texture功能更强大,后面的章节还会专门介绍Unity GUI)

(14)GUI Text

用户界面文本。该组件用于在屏幕坐标中显示所导入的任何字体的文本。在Unity中添加的GUI Text对象会默认携带该组件。该组件的定位、缩放依据屏幕坐标通过修改X、Y轴来完成。

(注意Unity GUI脚本比GUI Texture功能更强大,后面的章节还会专门介绍Unity GUI)

7、Layout

分层。该类型的组件有:

8、Miscellaneous

综合。该类型的组件有:

(1)Animator

动画生成器。该组件用来设置角色的行为。包括对状态机、动画混合树以及在脚本中控制的事件。只要包含Avatar的游戏对象,就会包含该组件。

(2)Animation

动画。该组件用来管理游戏对象上的动画文件。

(3)Network View

网络视图。该组件用于通过网络来共享/传输数据。理解这个组件非常重要。通过网络视图可以发起两种类型的网络通信:状态同步和远程过程调用(Remote procedure call)。

(4)Wind Zone

风域。该组件用于生成风力并模拟游戏对象受风力影响而产生的效果。

(5)Terrain

地形。

(6)Billboard Renderer

广告牌渲染器。

四、示例

本例子是将《Unity 4.x从入门到精通》的0403工程项目升级为Unity 5.3.4,然后导出资源包,再导入到ch04Demos,并将所有资源拖放到Demo01文件夹后,再继续修改实现的。

该项目包含很多资源,如音频、字体库、模型、材质、贴图、shader以及脚本等。这些资源都可以在顶目中反复应用于不同的场景。如下图所示:

1、打开场景

双击0403打开该场景:

2、添加游戏对象

在场景中添加一个空游戏对象:

为该游戏对象添加一个网格过滤器:

在检视器视图中,单击Mesh右边的小圆圈图标,在弹出的对话框中选择一个网格模型,双击将其添加到该网格过滤器中。如下图所示:

为选中的空游戏对象指定组件后,还需要为其添加一个Mesh Renderer,该网格模型才会在场景视图中被渲染出来。

选择要添加的游戏对象,在检视器视图中单击【Add Component】按钮,选择Mesh中的Mesh Renderer组件,将其添加到Mesh中。

此时,在场景视图中,所选游戏对象的网格模型已经被渲染出来,如下图所示:

如果看不到这个游戏对象,是因为该对象被真他网格模型遮挡或者在当前视野以外。这种情况下,可通过移动快捷工具将其拖动到合适的位置,或者直接按<Ctrl>+<Alt>+F将其移动到当前视野的中心。

3、贴图

游戏对象的网格模型被渲染出来之后,接下来需要为其指定材质贴图。

(1)创建材质

鼠标右击工程视图中Assets下的Demo01,在弹出的列表中,选择Material,为该项目添加一个材质。

顶目中所有的资源尽量根据相应的规范来命名,并且按类别放置在相应的文件夹内,这样便于项目的管理。

首先为创建的材质命名为xiaoche,然后为材质指定与之前在网格过滤器组件中指定的网格模型配套的纹理贴图,最后将其拖放到Material文件夹内。

(2)为材质贴图

具体操作如下:

选中xiaoche,将Shader改为Diffuse,如下图所示:

单击【Select】按钮,选择为该材质添加的纹理,如下图所示:

这就得到了一个带有贴图的材质:

将该材质拖放到Material文件夹下。

(3)为游戏对象贴图

选择层次视图中前面添加的游戏对象,在检视器视图中单击Mesh Renderer组件面板中的Material下的【Element 0】右侧的小圆圈图标,在选择材质对话框中选择刚创建的材质:

此时,在场景中就可以看到为该游戏对象添加组件后的效果了:

另外,可看出新添加的游戏对象的渲染结果和从其他资源中导入模型资源后的效果相似。

4、照亮刚添加的游戏对象

完成了游戏对象的网格类组件设置之后,还可以根据需要添加灯光,以便照亮这个游戏对象,让该对象的周围显得更明亮。

(1)添加光源

选择该游戏对象,单击检视器中的【Add Component】按钮,然后选择【Rendering】下的【Light】,为其添加一个光源组件:

此时该游戏对象就拥有了光源的属性,并增加了灯光图标,该灯光还可以照亮场景中其他的游戏对象。如下图所示:

(2)调整光源参数

另外,还可以根据需要在检视器视图中调节Light组件中Color(颜色)及Intensity (强度)等参数,以便让游戏对象的照明效果更具个性:

OK,添加组件的介绍就到这了。

【Unity】4.1 创建组件的更多相关文章

  1. Unity TextMeshPro替代Text组件创建简体中文字体纹理集

    Unity原生的Text组件有一个毛病,只要文本放大字体放大就会有毛边或锯齿,一个更好的解决方案是用TextMeshPro替代ugui中的Text组件. TMPro采用SDF文字渲染技术,可以使文字放 ...

  2. 动态创建组件TEdit

    //动态创建组件TEdit procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftSt ...

  3. Delphi动态创建组件,并释放内存

    开发所用delphi版本是xe2,效果图如下: 代码如下: ---------------------------------------------------------------------- ...

  4. Angular4.0用命令行创建组件服务出错

    之前使用cnpm创建的angular4.0项目,由于cnpm下载的node_modules资源经常会有部分缺失,所以在用命令行创建模板.服务的时候会报错: Error: ELOOP: too many ...

  5. Angular动态创建组件之Portals

    这篇文章主要介绍使用Angular api 和 CDK Portals两种方式实现动态创建组件,另外还会讲一些跟它相关的知识点,如:Angular多级依赖注入.ViewContainerRef,Por ...

  6. react创建组件的几种方式及其区别

    react创建组件有如下几种方式 ①.函数式定义的无状态组件 ②.es5原生方式React.createClass定义的组件   ③.es6形式的extends React.Component定义的组 ...

  7. 使用Angular cli创建组件报错: Unexpected token / in JSON at position....

    之前为了熟悉流程一直都是手动创建组件,今天试着用cli创建组件,居然报错了,报错大致为: Unexpected token / in JSON at position.... ,并且错误指向了.ang ...

  8. react用class关键字来创建组件

    创建组件之前,首先学习一个ES6的写法,叫做展开运算符. 比如我这里有两个数组.如何将第二个数组o2中的所有属性导入到数组o1中呢?一个个输太麻烦,所以就用到了展开运算符. var o2={ age: ...

  9. react用构造函数创建组件

    有两种方法,一种是通过构造函数创建,一种是通过class创建 1.构造函数创建组件 用function+组件名的方式创建,创建好了,在render里面以标签的形式一丢就可以啦!但是这种方式必须要ret ...

  10. Spring boot+Thymeleaf+easyui集成:js创建组件页面报错

    开发工具:Ideal 使用场景:Demo 前提:       环境:Spring boot +Thymeleaf+easyui 引入thymeleaf模板引擎 <html lang=" ...

随机推荐

  1. Android M 动态权限获取

    新的权限获取方式除了要求像之前版本号一样在AndroidManifest文件里静态申请之外,应用还需依据须要请求权限,方式採用向用户显示一个请求权限的对话框. 这些被动态申请的权限能够在系统设置中被手 ...

  2. 〖Linux〗Linux的smb地址转换Windows格式(两者互转)

    因为个人常用办公PC是Linux,打开文件共享什么的是 smb:// 的,而不是Windows的 \\ 需要复制文件路径给别人的时候,发smb://给一个使用Windows办公的用户不算很得体的方法 ...

  3. NTCPMSG 开源高性能TCP消息发送组件

    https://www.cnblogs.com/eaglet/archive/2013/01/07/2849010.html 目前的.net 架构下缺乏高效的TCP消息发送组件,而这种组件是构建高性能 ...

  4. 编程算法 - 迷宫的最短路径 代码(C++)

    迷宫的最短路径 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 给定一个大小为N*M的迷宫. 迷宫由通道和墙壁组成, 每一步能够向邻接的上下 ...

  5. 【公众号】微信第三方登录(静默授权和非静默授权)(具体代码:U盘 新浪云SAE)

    一.微信联合登录是怎么登录的,有几种登录方式:微信联合登录和微信授权登录[授权登录(非静默授权)与静默授权] [主动授权]:需要用户确认登录,这样可以通过用户的个人确认,获取用户全面的信息,无论是否关 ...

  6. ios中uitableview上拉刷新和下拉刷新(1)

    在一个项目开发过程中为了更好的体验经常会用到下拉刷新更新数据,当然也伴随一些上拉加载更多数据的情况:当前比较火的EGOTableViewPullRefresh只实现了下拉功能,而没有上拉的功能.这里介 ...

  7. 实现iOS序列化与反序列化(runtime)

    一.变量声明 为便于下文讨论,提前创建父类Biology以及子类Person: Biology: @interface Biology : NSObject { NSInteger *_hairCou ...

  8. iOS 组件化方案

    概述 近一年iOS业界讨论组件化方案甚多,大体来说有3种. Protocol注册方案 URL注册方案 Target-Action runtime调用方案 URL注册方案据我了解很多大公司都在采用,蘑菇 ...

  9. 【DeepLearning】Exercise:Sparse Autoencoder

    Exercise:Sparse Autoencoder 习题的链接:Exercise:Sparse Autoencoder 注意点: 1.训练样本像素值需要归一化. 因为输出层的激活函数是logist ...

  10. k8s实战读书笔记

    一.概述 kubernetes中Service是真实应用的抽象,将用来代理Pod,对外提供固定IP作为访问入口,这样通过访问Service便能访问到相应的Pod,而对访问者来说只需知道Service的 ...