-
Notifications
You must be signed in to change notification settings - Fork 4
Description
Unity新建场景后,场景中自带的Camera和Light组件。
一、Camera组件简介
将Camera想象成一台摄像机,摄像机拍下的画面,就是玩家所看到的画面。一个场景中至少要有一个相机,这样玩家才能看到画面。但是也可以有多个相机,利用多个相机可以创建很多特殊效果,最常见的如分屏效果。
1、创建Camera
创建一个新的Camera有三种方式:
1、菜单栏GameObject > Camera
2、Hierarchy窗口左上角的菜单Create > Camera
3、直接在Hierarchy窗口的空白处右键Create > Camera;如果在任一GameObject上右键Create > Camera,Camera会创建为这个GameObject的子物体
2、Camera位置的编辑
Camera的位置可以像编辑其他物体一样,用常用的Move Tool、Rotate Tool编辑。除此之外,还有一个非常快捷的方式进行设置。
1、在Scene视图中调整好视角
2、选中Hierarchy中的相机,点击菜单栏GameObject > Align With View(Ctrl+Shift+F),相机就会设置到对应的视角了!

3、Camera的属性

3.1 Clear Flags
Clear Flags中包含四个选项:Skybox、Solid color、Depth only、Don’t clear。
Skybox:相机的最远处会显示天空
Solid color:相机的最远处会显示下面Background属性中的颜色

3.2 Background
当Clear Flags不是Skybox时,相机的最远处会显示Background属性中的颜色。
当Clear Flags是Skybox时,这个属性不会生效。

3.3 Culling Mask
之前课程中讲的Layer

Culling Mask属性的下拉框中显示了所有的Layer,选中即代表这个相机会显示标记为这一Layer的物体,不选即代表相机不会显示标记为这个Layer的物体。
比如将线面场景中红框圈中的物体Layer设置为Player

当Culling Mask不选Player这一层后,刚才的物体在Game窗口中不显示了。

3.4 Projection
Projection有两个选项,Perspective和Orthographic。
Perspective(透视)
3D工程的相机默认是Perspective,即透视相机。在透视相机下有近大远小的效果。
选中Perspective时,下方会有Field of View(FOV)属性:视野的角度范围。
Orthographic(正交)
正交相机,2D工程的相机默认会是这个选项。正交相机下没有近大远小的效果。
选中Orthographic时,下方会有Size选项:视野的大小。
3.5 Clipping Planes
Clipping Planes有两个值,Near和Far,代表了相机开始渲染的点和结束渲染的点距离相机的距离。
如果Far太小,会导致远处的物体被相机截断;如果Near太大,会导致近处的物体被相机截断。
但是Far设置的太大也不好,如果你的游戏世界场景很大,会导致相机需要渲染更多的东西,影响游戏整体的性能。
Near设置的太小也不好,可能会导致物体重叠闪烁等问题(这是深度缓冲区的精度引起的)。
所以在适合你的项目情况下,Near应该尽可能大,Far应该尽可能小。
3.6 Viewport Rect
Viewport Rect属性决定了相机在屏幕上显示的位置和大小。设置Viewport Rect属性,可以创建一些效果,如分屏:

赛车游戏的后视镜效果
以屏幕左下角为0,0点,右上角为1,1,x和y表示位置,w和h表示宽度和高度:

3.7 Target Display
还记得Game窗口上有一个Display的选项么?那个选项就是和这个Camera的Target Display属性对应的。
这个选项代表了摄像机会渲染到哪个显示器上。如果你的游戏为多显示器进行了特殊设计,记得设置这个选项。
调试时,可以在Game窗口设置对应的Display。
小提示
Game窗口是可以打开多个的,有多个Display时可以打开多个Game窗口来同时查看效果。

二、Light(灯光)
灯光是每个场景的重要组成部分,就像现实世界的太阳和电灯一样。虽然模型、贴图决定了场景的形状和外观,但是灯光决定了3D环境的颜色和氛围。
每个场景可以使用多个灯光来达到更好的效果。使用多个灯光时,调节参数相对会难一些,需要你多亲自动手。
1、创建Light
和创建其他GameObject类似,从GameObject或Hierarchy的Create菜单可以创建Light。

2、Directional Light(平行光)
新建工程的场景中会有一个Directional Light,我们也可以自己添加多个平行光。
平行光类似现实世界的太阳,可以认为它的光源在无限远处,所以平行光的位置不会影响光照的效果,只有它的旋转会影响光照的结果。因此平行光可以放在场景中的任意位置,它的亮度也不会衰减。在游戏中,一般会用一个平行光作为主光源,可选几个平行光作为辅光源。
2.1 平行光的参数

• Type 类型:即灯光的类型,平行光是Directional
• Color 光源颜色:光源发射的光的颜色
• Mode 类型:Realtime(实时), Mixed(混合) 或 Baked(烘焙)。
• Intensity 亮度:光源的亮度,比如20W的灯泡和100W的灯泡亮度就不同。
• Indrect Multiplier 反射系数,光影烘焙模块时会详细讲解。
• Shadow Type 阴影类型,光影烘焙时会详细讲解。
• Cookie 遮光片:可以通过一张图片来实现遮住光源的效果,类似手影的效果。

• Draw Halo :设置是否显示光源的光晕,颜色和光源颜色一致。也可以通过单独的Halo组件设置光晕的颜色和大小。

• Flare 光斑:设置这个可以设置如太阳的光斑、路灯的光斑等。

太阳的光斑效果Settings > Quality)自动确定渲染方式
○ Important 重要:重要模式下,灯光会以像素光的方式渲染(效果好),但是会非常消耗计算资源,建议仅在最重要的效果下使用Important模式。
○ Not Important 不重要:始终使用顶点光渲染(速度快)
• Culling Mask 剔除掩码:设置光源会照射到的Layer,选中的Layer会被灯光影响,没选中的不会被灯光照到
3、Point Light(点光源)
点光源类似现实世界中的一盏灯,均匀地向各个方向发出光线。亮度会随着距离光源的距离而降低。亮度与距光源距离的平方成反比,与光在现实世界中的表现类似。

3.1 点光源的属性

点光源的属性和平行光基本一致,多了一个Range属性。
Range 光照的范围,光照的亮度会随着与光源的距离减弱,距离为Range时衰减为0。
4、Spot Light(聚光灯)
聚光灯类似现实世界的手电筒、汽车大灯、舞台追光,有半径和范围,亮度在该范围内衰减。

聚光灯是一个锥形的照明区域。锥体的中心指向灯光物体的正前方(local的Z轴方向)。灯光的锥体边缘亮度也会减弱。

Spot Light有两个特殊的属性:
Range 锥形区域的半径
Spot Angle 锥形区域的角度
5、Area Light(区域灯)
Area Light不能用于实时渲染,只能用于烘焙光照贴图,这是因为Area Light计算量非常大,实时运算会严重影响性能。具体用法会在光影烘焙模块讲解。