Camera可编辑参数:
一、常用
1.Clear Flags
①.skybox:天空盒(3D游戏)
②.Solid Color:颜色填充(2D游戏)
③.Depth only:只画该层,背景透明
④.Dont Clear:不移除,覆盖渲染
2.Calling Musk
选择性渲染部分层级,可以指定渲染对应层级的对象
3.Projection
①.perspective:透视模式(一般用于3D游戏制作)
FOV Axis:视场角轴,决定视野范围,一般不改变。
Field of view:视口大小
Physical Camera(没有特殊需求一般不设置)
Focal Length:焦距
Sensor Type:传感器类型
Lens Shift:透视移位
Gate Fit:闸门配合
②orthographic 正交摄像机(一般用于2D游戏制作)
Size:摄制范围
4.Clipping planes
裁剪平面距离:最近能看多近,最远能看多远。
5.Depth
渲染顺序上的深度,数字越小越先被渲染,数字越大越后被渲染。某些摄像机只渲染指定的内容,设置深度叠加显示。
6.Target Texture
渲染纹理:
①可以把摄像机画面渲染到一张图上,主要用于小地图制作。
②在Project右键创建Render Texture。
7.Occlusion Culling
是否启用剔除遮挡,默认勾选,不渲染被挡住的物体可以节约性能。
二、不常用
1.Viewport Rect
视口范围:
屏幕上将绘制该摄像机视图的位置,主要用于双摄像机游戏(如双人成行),0-1相当于宽高百分比。
2.Redering path
渲染路径。
3.Allow HDR
是否允许高动态范围渲染。
4.Allow MSAA
是否允许抗锯齿。
5.Allow Dynamic Resolution
是否允许动态分辨率呈现。
6.Target Display
用于哪个显示器,重要用来开发有多个屏幕的平台游戏。
Camera代码相关:
一、重要的静态成员
1.获取摄像机
// 获取场景中主摄像机的名称
Camera.main.name;
2.获取摄像机数量
Camera.allCamerasCount;
3.获取所有摄像机
// 获取场景中所有激活的摄像机组成的数组
Camera[] allCamera = Camera.allCameras;
// 打印场景中当前激活的摄像机数量
print(allCamera.Length);
4.渲染相关委托
摄像机剔除前处理的委托函数
Camera.onPreCull += (c) =>
{
// 这个匿名函数会在每个摄像机开始剔除之前被调用
// 参数c是当前正在处理的摄像机实例
};
摄像机渲染前处理的委托函数
Camera.onPreRender += (c) =>
{
// 这个匿名函数会在每个摄像机开始渲染之前被调用
// 参数c是当前正在准备渲染的摄像机实例
};
摄像机剔除后处理的委托函数
Camera.onPostRender += (c) =>
{
// 这个匿名函数会在每个摄像机完成渲染之后被调用
// 参数c是刚刚完成渲染的摄像机实例
};
二、重要成员
1.界面上的参数都可以在Camera中获取
2.世界坐标系转屏幕坐标系
转换后x和y对应的是屏幕坐标,z对应的是这个物体离摄像机有多远。
主要用来制作头顶血条的相关功能。
Camera.main.WorldToScreenPoint(this.transform.position);
3.屏幕坐标系转世界坐标系
// 将鼠标在屏幕上的像素坐标转换为世界坐标系中的3D位置
Camera.main.ScreenToWorldPoint(Input.mousePosition);
// 获取鼠标在当前屏幕上的像素坐标(x, y为像素值,z为0)
Vector3 v = Input.mousePosition;
// 设置Z值为10,表示距离摄像机10个单位远的平面
// 这个Z值决定了转换后世界坐标的深度(距离摄像机的远近)
v.z = 10;
// 将屏幕坐标(包含深度信息)转换为世界坐标系中的3D位置
// 并将该位置赋值给目标物体的position
obj.position = Camera.main.ScreenToWorldPoint(v);
之所以改变z轴是因为如果不改z默认为0,转换后的世界坐标系的点永远是一个点,相当于是视口相交的焦点。如果改变了z,那么转换后的世界坐标系的点就是相对于摄像机前方多少个单位的横截面上的世界坐标系的点。