unity 摄像机矩阵 unity摄像机组件_UI

  • Clear Flags:摄像机的背景模式
  • Skybox:天空盒(默认选项),屏幕空白处显示当前摄像机的天空盒,没有天空盒则会显示背景色
  • Solid Color:空白处显示默认设置的背景色
  • Depth only:仅根据摄像机的深度(Depth的大小)来显示
  • Don’t Clear:不清除。每帧的渲染结果会叠加在下一帧上。
  • Background:背景颜色
  • Culling Mask:摄像机能看见的层
  • Projection:摄像机的投影模式
  • Perspective:透视 物体符合近大远小
  • Orthographic:正交
  • Field of view:选取透视模式时 视野范围
  • Size:选择正交模式时 视野大小
  • Clipping Planes:摄像机视野范围 最近和最远
  • Viewport Rect:用来实现分屏
  • Depth:深度
  • Rendering Path:选择摄像机的渲染模式
  • Target Texture:目标贴图 (可以用来实现小地图,把摄像机的画面打到一张贴图上)
  • Occlusion Culling:是否使用遮罩剔除
  • Target Display:最终显示在Game视图的哪个display层中

其他相关:
快速切换Camera视角与Scene视角一致 ctl+shift+f

Unity里面有一些坐标比较容易弄混淆

世界坐标系World Space 全局坐标:transform组件里面的坐标信息就是基于世界坐标系的

屏幕坐标Screen Space:就是硬件屏幕作为坐标系,和分辨率有关系。屏幕的左下角为(0,0),右上角为(screen.width, screen.height)

UI坐标系:左上角是(0,0) 右下角是(screen.width, screen.height)

视口坐标View Port:摄像机占据的视口大小,左下角是(0,0) 右上角是(1,1)

坐标之间的转换:

  • 全局坐标 屏幕坐标

Camera.ScreenToWorldPoint(Vector3 position):屏幕→全局

Camera.WorldToScreenPoint(Vector3 position):全局→屏幕

  • 屏幕坐标 视口坐标

Camera.ScreenToViewportPoint(Vector3 postion):屏幕→视口

Camera.ViewportToScreenPoint(Vector3 position):视口→屏幕

  • 全局坐标 视口坐标

Camera.WorldToViewportPoint(Vector3 position):全局→视口

Camera.ViewportToWorldPoint(Vector3 position):视口→全局

  • 全局坐标 局部坐标

transform.TransformPoint(transform.localPosition); 局部→世界

transform.parent.InverseTransformPoint(transform.position); 世界→局部

3D→UI方法:

3D→屏幕:RectTransformUtility.WorldToScreenPoint();

屏幕→UI:RectTransformUtility.ScreenPointToLocalInRectangle();

主摄像机:camera的tag标记为MainCamera,可以通过Camera.main直接访问,但是当有多个camera都标记为MainCamera的时候,就没有办法区分主摄像机了,所以不安全。

在UI上显示模型

UI上面是不能直接显示模型的,我们可以添加一个模型层,然后新建一个相机专门来看这个模型层,将模型层相机深度设置到最高,那么他就会显示到最上面。如何保持自适应呢?手动根据设定的分辨率和当前分辨率的比值来缩放模型。计算当前分辨率和设计分辨率的比值,如果当前分辨率小于设计分辨率,放大比值倍。

这种现实方法是由缺陷的,模型渲染顺序是跟着相机走的,只能在UI上面或者下面,如果想在两个UI之间显示怎么办?使用RenderTexture,创建Render Texture,将相机看到的内容渲染到纹理上,然后把纹理显示在UI的RawImage上。

LOD Group

我们知道物体实际上是存在远近关系的,如果某个物体离我们很远(比如吃鸡里面很远处的山头上的树、房子),我们还是将它正常渲染出来,效率会很低。这个时候我们使用该组件来提高渲染的效率。根据摄像机的远近来动态更换高、低精度的模型,或者剔除部分渲染。

Lod Bias:表示Lod偏移值,会影响剔除的距离

Maximum LOD Level:表示Lod的最大等级。运行时修改它可以优化低端机器

原理是给物体添加包围盒,摄像机发生移动后,计算与这个包围盒的百分比。可以添加任意数量的LOD并且设置每个等级显示或者不显示什么。本质上是用内存来换时间,预先加载好几个显示状态,然后根据摄像机与它的距离来切换不同的显示状态。