当前位置: 首页 > article >正文

【基础】Unity中Camera组件知识点

一、投影模式 (Projection)

1. 透视模式 (Perspective)

  • 原理:模拟人眼,近大远小(锥形体视锥)

  • 核心参数

    • Field of View (FOV):垂直视场角

      • 典型值:第一人称 60°-90°,驾驶舱 30°-45°

      • 特效:FOV↑=视野变广(鱼眼效果),FOV↓=视野变窄(望远镜)

    • Clipping Planes

      • Near:近裁面(0.01-0.3,避免穿模)

      • Far:远裁面(100-1000,过大影响性能)

2. 正交模式 (Orthographic)

  • 原理:无视距离,物体恒定大小(立方体视锥)

  • 核心参数

    • Size:视口高度的一半(单位:世界坐标)

      • 计算:若想显示10单位高度区域 → Size=5

    • Clipping Planes同透视模式(控制Z轴范围)

二、清除与背景 (Clear Flags & Background)

1. Clear Flags(帧缓存清除策略)

模式清除颜色清除深度典型用途
Skybox开放世界(需设置天空盒)
Solid Color纯色背景(太空/抽象场景)
Depth Only×UI摄像机必选
Don't Clear××特殊效果(极少用)

2. Background

  • 仅当 Clear Flags = Solid Color 时生效

  • 建议用深灰色(RGB:30,30,30)替代纯黑避免色偏

三、渲染过滤 (Culling Mask)

  • 本质:32位图层掩码(对应Layer面板的32个层)

  • 操作逻辑

  • // 代码示例:只渲染UI层和Enemy层
    camera.cullingMask = (1 << LayerMask.NameToLayer("UI")) | (1 << LayerMask.NameToLayer("Enemy"));
  • 经典用例

    • 主摄像机:排除UI层

    • 小地图摄像机:仅显示Terrain层

    • 阴影摄像机:仅渲染Cast Shadows的物体

四、深度与渲染顺序 (Depth)

  • 核心规则:深度值大的摄像机后渲染(覆盖先渲染的画面)

  • 多摄像机协作模板

Camera_Main(场景渲染):  Depth = 0  Culling Mask = Everything & ~UI  // 排除UI层  Clear Flags = Skybox  Camera_UI(界面渲染):  Depth = 1  Culling Mask = UI  Clear Flags = Depth Only  // 保留场景颜色,只清深度

五、视口控制 (Viewport Rect)

  • 归一化坐标:[0,0]左下角 → [1,1]右上角

  • 参数详解

    • X:视口左下角起始X坐标

    • Y:视口左下角起始Y坐标

    • W:视口宽度(0~1)

    • H:视口高度(0~1)

  • 应用场景

    • 双人分屏:Player1: (0,0,0.5,1) + Player2: (0.5,0,0.5,1)

    • 小地图:(0.7,0.7,0.3,0.3)

六、目标纹理 (Target Texture)

工作流
  1. 创建Render Texture:Assets > Create > Render Texture

  2. 绑定到Camera:拖入Camera组件的Target Texture槽

  3. 应用输出:

    • 3D材质:赋给MeshRenderer的材质

    • UI显示:RawImage组件的Texture参数

高级技巧
// 动态创建渲染纹理
RenderTexture rt = new RenderTexture(512, 512, 16); 
camera.targetTexture = rt;
// 完成后释放资源
rt.Release(); 

七、坐标转换(核心API)

1. 屏幕坐标 → 世界坐标

// 转换到3D世界(z为摄像机前方距离)
Vector3 worldPos = camera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y,10) // z=10表示摄像机前方10单位
);

2. 世界坐标 → 屏幕坐标

// 用于UI跟随3D物体
Vector3 screenPos = camera.WorldToScreenPoint(enemy.transform.position);
uiElement.transform.position = screenPos;

3. 射线检测(物体拾取)

Ray ray = camera.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out RaycastHit hit, 100)) 
{Debug.Log("点击了:" + hit.collider.name);
}

八、高级功能

1. 物理摄像机 (URP/HDRP)

  • Focal Length:焦距(毫米)→ 控制FOV

  • Sensor Size:胶片尺寸 → 影响视野比例

  • Aperture:光圈 → 控制景深强度

2. 摄像机堆栈 (URP专属)

Base Camera(基础场景)
  ↓
Overlay Camera 1(特效层)
  ↓
Overlay Camera 2(UI层)

  • 优势:比传统Depth排序更节省性能

3. 回调事件

void OnPreCull() { /* 裁剪前调用 */ } 
void OnPreRender() { /* 渲染前调用 */ }
void OnPostRender() { /* 渲染后调用 */ }
http://www.lryc.cn/news/2399097.html

相关文章:

  • Tomcat优化篇
  • Temporal Fusion Transformer(TFT)扩散模型时间序列预测模型
  • 【LangServe部署流程】5 分钟部署你的 AI 服务
  • 攻防世界-unseping
  • 微软推出 Bing Video Creator,免费助力用户轻松创作 AI 视频
  • (13)java+ selenium->元素定位大法之By_partial_link_text
  • Xget 正式发布:您的高性能、安全下载加速工具!
  • [yolov11改进系列]基于yolov11使用FasterNet替换backbone用于轻量化网络的python源码+训练源码
  • 一周学会Pandas2之Python数据处理与分析-Pandas2数据绘图与可视化
  • 企业级安全实践:SSL/TLS 加密与权限管理(一)
  • 2025——》VSCode Windows 最新安装指南/VSCode安装完成后如何验证是否成功?2025最新VSCode安装配置全攻略
  • RabbitMQ如何保证消息可靠性
  • 【MATLAB代码】制导——三点法,二维平面下的例程|运动目标制导,附完整源代码
  • Spring Security用户管理机制详解
  • 如何爬取google应用商店的应用分类呢?
  • SQL Relational Algebra(数据库关系代数)
  • 如何安装huaweicloud-sdk-core-3.1.142.jar到本地仓库?
  • Electron桌面应用下,在拍照、展示pdf等模块时,容易导致应用白屏
  • 智能工业时代:工业场景下的 AI 大模型体系架构与应用探索
  • 【git stash切换】
  • React 18 生命周期详解与并发模式下的变化
  • 易语言使用OCR
  • C++和C#界面开发方式的全面对比
  • 监控 100 台服务器磁盘内存CPU利用率
  • Linux远程连接主机——ssh命令详解
  • 算法-集合的使用
  • 性能优化 - 理论篇:CPU、内存、I/O诊断手段
  • 算法:二分查找
  • Spring Boot3.4.1 集成 mybatis plus
  • Ubuntu 22.04 上安装 PostgreSQL(使用官方 APT 源)