摄像机组件

Camera 说明
Clear Flags Skybox:天空盒
Solid Color:填充颜色,当有空白处,填充背景颜色
Depth Only:仅考虑深度;只渲染我需要渲染的层,而且不受其他不渲染层遮挡影响
Don’t Clear:不清除上一帧留下的渲染数据,类似残影效果
Culling Mask 裁剪层;这里面控制当前摄像机会渲染哪些层的游戏物体,是通过二进制的形式去控制的
Perspective 透视摄像机;一般渲染3D场景或者说是3D摄像机,能渲染出z轴值变化效果
Orthographic 正交摄像机,一般渲染2D场景或者2D游戏,游戏物体在z轴运动效果不能显示
Size/Field of view 摄像机渲染范围大小
Clipping Planes Near /far渲染最近/最远距离;所需要渲染的游戏物体必须在这个范围内,否则不会被渲
Depth 值越大越后渲染,后渲染的画面覆盖前面渲染的画面;所以值越大,显示越靠前
Target RenderTexturer 创建一个新的摄像机,作为渲染当前人物渲染摄像机,当给摄像机Target Texture赋值Rendertexture时,这个摄像机的Depth就会失效,不会跟其他摄像机进行对比渲染到主屏幕;将当前摄像机拍摄到的内容显示到RenderTexture上

1. Viewport Rect

视口坐标系的坐标是从左下角(0,0)到右上角(1,1)

XY:是以屏幕左下角为起始点,按比例来计算当前摄像机渲染画面的位置

WH:当前摄像机渲染的画面在整个屏幕中大小,比如设置W为0.5,则在游戏窗口,只会显示一般在游戏窗口。

对Target RenderTexturer的理解

【1】通过鼠标右键创建,创建Rendertexture
【2】新创建一个摄像头,将Rendertexture拖拽到这个新的摄像头的Target RenderTexturer属性上,这样Rendertexture就会实时显示这个新摄像机的内容。
【3】最后将Rendertexture文件拖拽到场景的图片当中中,即可显示。

应用场景:英雄展示等
texture2.gif

对深度优先Depth Only的理解

  • 摄像机的深度值越高,摄像机越后渲染,那么会把深度值低的摄像机渲染场景覆盖掉。

下图:很明显摄像机A将摄像机B部分场景覆盖了(因为我设置了摄像机A的显示区域大小)。因为摄像机A比摄像机B的深度值高。
image.png
【应用场景】小地图的显示

UGUI中Canvas渲染模式为摄像机模式的相关说明

【1】建立Canvas
【2】建立摄像机,命名为UI Camera,去掉音频监听器
【3】修改Canvas的渲染环境为相机模式,将UI Camera托给Canvas
UI相机清除填充改为深度优先Depth Only,渲染层改为唯一UI,相机层改为UI
将Canvas 到相机的距离,改为10米,将UI相机可视最远距离,调整为20米
将主相机不显示UI层的内容
【4】保持UI相机的深度比主相机的深度高
【5】Canvas子元素拉伸。设置参考分辨率,屏幕匹配方式改为高度或高度自适应。
【6】单元测试:测试UI元素和3D物体叠加正常显示

对Camera中Size的研究

首先在Unity2D中,坐标都会被固定的Unit所取代。每一个网格的宽高都是1Unit。
在Unity2D中,因为处理的都是平面游戏,所以摄像机的类型也要从透视(Perspective)切换为正交相机(orthogonality)。

我们在2D场景,摄像机的类型是正交模式,而控制显示的画面的大小就需要设置Camera的Size

我们找知道的是:一个是Camera Size 一个就是PPU(pixels per Unit)

比如说:我设置Camera的Size为15, 代表摄像机的视野为15,而视野是画面高度的一半,也就是说现在设置的游戏画面上下最多显示30格。宽就按照分辨率来计算。

所以我们可以通过Size来定义游戏画面的大小

那么如果我们导入一张图片进来,那么这张图片应该在unity中占几格?
这就要有图片设置的PPU来决定,我们打开图片设置,如下图所示,很容易看到PPU
image-1698484786333

PPU代表着是1个单位Unit,有多少个像素点
如上图所示:我设置的PPU为100,那么如果该图片的大小为100 * 100, 就可以在Unity中显示1格。如果我们的图片大小为 50 * 50,那么图片在Unity中显示为 1/4格,如下图所示
image-1698485168043