U1L10-2——Camera代码相关

本章代码关键字

1
2
3
4
5
6
7
8
9
10
Camera.main                            //获取主摄像机(有“MainCamera”Tag的摄像机)
Camera.allCamerasCount //获取摄像机的数量
Camera.allCameras //得到所有摄像机
Camera.onPreCull //摄像机 剔除前 处理的委托函数
Camera.onPreRender //摄像机 渲染前 处理的委托
Camera.onPostRender //摄像机 渲染后 处理的委托
.界面上的参数 //界面上的参数 都可以在Camera窗口中找到,参考可编辑参数相关
Camera.main.WorldToScreenPoint() //转换过后 x和y对应的就是屏幕坐标 z对应的 是 这个3D物体里屏幕所在的平面的距离
Camera.main.ScreenToWorldPoint() //屏幕坐标转世界坐标
Camera.aspect //得到游戏窗口的宽高比

重要静态成员

获取摄像机

获取主摄像机

1
print(Camera.main.name);    //一定要有 MainCamera Tag的摄像机才能被找到

获取摄像机的数量

1
print(Camera.allCamerasCount);

获取所有摄像机

1
2
Camera[] allcamera = Camera.allCameras;
print(allcamera.Length);

渲染相关委托

摄像机 剔除被挡住的东西之前 处理的委托函数

1
2
3
4
Camera.onPreCull += (c) =>
{

};

摄像机 渲染前 处理的委托

1
2
3
4
Camera.onPreRender += (c) =>
{

};

摄像机 渲染后 处理的委托

1
2
3
4
Camera.onPostRender += (c) =>
{

};

重要成员

界面上的参数

界面上的参数 都可以在Camera中找到
下面的这句代码 是获取了主摄像机对象 上的深度 进行设置

1
Camera.main.depth = 10;

世界坐标转屏幕坐标

转换过后 x和y对应的就是屏幕坐标 z对应的 是 这个3D物体里屏幕所在的平面的距离
用最多的例子是 头顶血条的大小的功能

1
2
Vector3 v = Camera.main.WorldToScreenPoint(this.transform.position);
print(v);

屏幕坐标转世界坐标

这个需要写在Update()里

1
2
print(Input.mousePosition);
print(Camera.main.ScreenToWorldPoint(Input.mousePosition));

这个z轴很重要,代表视锥横切面距离摄像机有多远
这里输出的点是固定的,鼠标在屏幕坐标的z是0,这意味鼠标在摄像机视锥的顶点,也就是该摄像机的世界坐标上,因此输出了摄像机的世界坐标
屏幕坐标的z代表视锥横切面距离摄像机有多远

1
2
3
4
Vector3 v = Input.mousePosition;
v.z = 10;
//这样处理就相当于让鼠标坐标放在了距离为10的视锥横切面上了,这样就可以得到鼠标所在的世界坐标系
print(Camera.main.ScreenToWorldPoint(v));

拓展内容——视口坐标系转换相关

Camera的视口坐标系转换相关

补充:获取Game窗口的宽高比

1
2
3
4
void Start()
{
print(Camera.main.aspect);
}

将宽高比设置为16:10:

image

输出:

image