Unity的Camera类——视觉掌控与深度解析(下)

这篇具有很好参考价值的文章主要介绍了Unity的Camera类——视觉掌控与深度解析(下)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

欢迎阅读本篇博客,这章我们将深入探讨 Unity 游戏引擎中 Camera 类的委托和枚举。摄像机在游戏开发中扮演着关键角色,它不仅定义了玩家视角的窗口,还影响着游戏的视觉表达和整体体验。理解和正确使用 Camera 类的枚举和委托,可以极大地提升你的游戏视觉效果和性能表现。


Camera的委托:

Camera.CameraCallback:

Camera.CameraCallback

Unity 中的一个委托类型,它用于定义一系列与摄像机相关的事件的签名。这些事件是上一章有说到的 onPreCull、onPreRender 和 onPostRender。当摄像机即将裁剪、渲染或完成渲染时,会触发这些事件。

 
定义:

public delegate void CameraCallback(Camera cam);

这个委托类型接受一个 Camera 类型的参数。这意味着,任何要作为这些事件处理函数的方法都必须接受一个 Camera 类型的参数。

要使用 CameraCallback,你首先需要定义一个符合这个委托签名的方法,然后将这个方法添加到对应的摄像机事件上。

示例:
如果你想在每次摄像机渲染后执行一些操作,你可以将方法添加到 Camera.onPostRender 事件上。

void OnPostRender(Camera cam)
{
    // 这里是在摄像机渲染完成后要执行的代码
}
void OnEnable()
{
    Camera.onPostRender += OnPostRender;
}
void OnDisable()
{
    Camera.onPostRender -= OnPostRender;
}

在这个例子中,OnPostRender 方法就是一个符合 CameraCallback 委托签名的方法。
同样的方式可以用于 Camera.onPreCull 和 Camera.onPreRender 事件,只需将方法添加到这些事件即可,可以参照上一章节的Camera事件示例。


Camera的枚举

Camera.FieldOfViewAxis:
Camera.GateFitMode:
Camera.MonoOrStereoscopicEye:
Camera.RenderRequestMode:
Camera.RenderRequestOutputSpace:
Camera.StereoscopicEye:

Camera.FieldOfViewAxis

用于确定摄像机的视场(Field of View, FOV)是围绕哪个轴进行调整。在 Unity 中,这通常涉及两个选项:Vertical和Horizontal

  1. Vertical (垂直轴): 当视场基于垂直轴时,无论屏幕的宽高比如何变化,摄像机视场的垂直部分保持不变。这是最常用的设置,特别是在需要保持垂直视角一致性的场景中,比如第一人称或第三人称射击游戏。
  2. Horizontal (水平轴): 当视场基于水平轴时,摄像机视场的水平部分保持不变,而垂直视场会根据屏幕的宽高比进行调整。这种设置在宽屏显示器上特别有用,因为它可以在不裁剪水平视野的情况下适应不同的屏幕尺寸。

Camera.GateFitMode

这个枚举控制摄像机视野如何适应画幅尺寸的变化,尤其重要于影视制作中的画幅比例适配

  1. Vertical: 垂直适配。在此模式下,摄像机的垂直视野保持不变,而水平视野根据画幅比例变化而自动调整。这常用于确保特定的垂直视觉元素不受画幅比例变化的影响。
  2. Horizontal: 水平适配。与垂直适配相反,此模式保持水平视野不变,垂直视野随画幅比例变化而调整。适用于水平视角更为重要的场景。
  3. Fill: 填充模式。摄像机的视野会扩展以填充整个画幅,但这可能导致画幅边缘的部分图像被裁剪。
  4. Overscan: 保留图像的全部内容。摄像机的视野会进一步扩展以确保画幅内的每个部分都被覆盖,可能会捕捉到通常不可见的场景部分。
  5. None: 摄像机不进行任何画幅适配。这意味着摄像机视野依赖于传感器尺寸,无视画幅比例。

Camera.MonoOrStereoscopicEye

用于区分渲染单眼(Mono)和双眼(Stereoscopic)视图的设置。这对于虚拟现实(VR)和增强现实(AR)应用尤其重要。

  1. Left: 左眼。用于立体视觉渲染的左眼视图。
  2. Right: 右眼。用于立体视觉渲染的右眼视图。
  3. Mono: 单眼。标准的2D视觉渲染,不涉及立体视觉效果。

Camera.RenderRequestMode

与摄像机的渲染请求相关,允许开发者在高级渲染场景中进行更细致的控制,如在后期处理、图像分析或高级渲染技术中

  1. None: 默认值,表示没有特定的渲染请求模式。
  2. ObjectId: 输出一个对象的 InstanceID 缓冲区。这通常用于识别渲染场景中的特定对象。
  3. Depth: 输出深度值。这对于实现深度相关的效果,如景深、阴影等,非常有用。
  4. VertexNormal: 输出插值后的顶点法线。这对于实现某些类型的光照效果很重要。
  5. WorldPosition: 输出世界坐标位置缓冲区。这可以用于计算对象在世界空间中的位置。
  6. EntityId: 输出一个实体ID。这通常用于实现复杂的渲染效果,需要跟踪特定实体。
  7. BaseColor: 输出材质的基色(Albedo/Base Color)。这对于提取或修改对象的主要颜色非常有用。
  8. SpecularColor: 返回材质的镜面反射颜色缓冲区。用于实现高级的光照效果。
  9. Metallic: 输出材质的金属度值。这对于实现金属材质的渲染效果非常重要。
  10. Emission: 输出材质的发光值。用于渲染自发光材质。
  11. Normal: 输出每像素的法线。这对于实现复杂的光照和表面效果至关重要。
  12. Smoothness: 返回材质的光滑度缓冲区。这对于实现高质量的反射和光泽效果非常有用。
  13. Occlusion: 返回材质的环境遮蔽(Ambient Occlusion)缓冲区。这对于增强场景的深度感和细节非常重要。
  14. DiffuseColor: 输出材质的漫反射颜色。这对于分析或修改对象的漫反射颜色非常有用。

Camera.RenderRequestOutputSpace

这个枚举定义了渲染请求的输出空间,即渲染请求的数据将以哪种形式输出

  1. ScreenSpace: 渲染请求将在屏幕空间中渲染,从摄像机的视角出发。这意味着输出将是基于摄像机视角和屏幕坐标系统的。
  2. UV0 - UV8: 这些值表示渲染请求将输出在被渲染网格的特定UV空间中。UV空间是用于映射纹理到3D模型的坐标系统,每个UV值(从UV0到UV8)代表模型上不同的纹理坐标集。这使得开发者可以对模型上特定的纹理坐标进行高级渲染操作。
    UV0: 输出在UV0空间中。
    UV1: 输出在UV1空间中。
    UV2: 输出在UV3空间中。
    (剩余的同理)

这些选项允许开发者在不同的坐标系统中进行渲染操作,为渲染过程提供了更多的灵活性和控制。例如,选择屏幕空间可以用于实现与屏幕坐标相关的效果,如屏幕空间反射(Screen Space Reflections)。而选择UV空间可以用于实现复杂的纹理效果,如纹理映射、纹理变换等。这为在Unity中实现高级图形处理和自定义渲染技术提供了强大的工具。


Camera.StereoscopicEye

这个枚举用于指定立体视觉渲染中的眼睛类型

  1. Left: 左眼。用于生成立体视觉中的左眼图像。
  2. Right: 右眼。用于生成立体视觉中的右眼图像。

希望这篇博客能够帮助你更好地理解 Unity 的 Camera 类。
在下一篇文章,我们会继续深度解析Camera的实例对象,上面说到的枚举用法也会在之后的章节中使用。如有任何疑问或想要进一步讨论,欢迎在评论区留言。文章来源地址https://www.toymoban.com/news/detail-787325.html

到了这里,关于Unity的Camera类——视觉掌控与深度解析(下)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 论文解析-基于 Unity3D 游戏人工智能的研究与应用

    这段代码是一个重写了 AgentAction 方法的方法。以下是对每行代码解释: ①public override void AgentAction(float[] vectorAction) 这行代码声明了一个公共的、重写了父类的 AgentAction 方法的方法。它 接受一个 float 类型的数组作为参数。 ② float newAction0 = Mathf.Clamp(vectorAction[0], -1, 1); 这行代

    2024年02月03日
    浏览(52)
  • Unity3d:GameFramework解析:实体,对象池,资源管理,获取计数,引用计数,自动释放

    1.GF万物基于引用池IReference 2.ObjectBase : IReference类的m_Target持有unity中Mono,资源,GameObejct 3.AssetObject : ObjectBase类m_Target持有Assetbundle中的Asset,具有获取,引用两个计数管理释放 4.ResourceObject : ObjectBase类m_Target持有Assetbundle,具有获取,引用两个计数管理释放 5.EntityInstanceObject :

    2024年02月11日
    浏览(28)
  • 【Unity3D日常开发】Unity3D中协程的使用

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 最近有小伙伴问协程怎么用、怎么写,我也是会用会写,但是原理不是很明白。 学习了一下,总结出

    2024年02月12日
    浏览(55)
  • unity3D基础操作之01--unity3d窗口界面介绍

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 1、Scene场景编辑窗口; 2、Game游戏运行窗口; 3、Hierarchy场景物体列表窗口; 4、Project项目资源列表窗口; 5、Inspector属性编辑列表窗口; 6、其他常调节窗口 在屏幕左上方为场景编辑窗口Scene,在场景编

    2024年02月06日
    浏览(77)
  • 【Unity3D-01】 记录Unity3D调用外接摄像头

    最近想在Unity3D上调用一个摄像头,通过查找资料发现仙魁XAN和八哥快走开的博客符合我的想法,实现起来也不难就尝试了一下 2.1 在这个工程里新建Canvas 如下图所示 然后下设RawImage为载体 2.2 在Assets里面新建一个脚本命名为PlaneManager.cs 代码内容如下(参考八哥快走开的博客)

    2024年02月04日
    浏览(51)
  • 【Unity3D小功能】Unity3D中实现Text显示版本功能

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 在项目开发中,会遇到要控制版本的情况,比如说对比版本号,版本不对再更新版本的功能,这些就是

    2024年02月05日
    浏览(70)
  • 【Unity3D日常开发】Unity3D中实现单例模式详解

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 首先,说一下,什么是 单例模式(Singleton) 。 单例模式是设计模式中常见的一种设计模式,目的是为了

    2024年02月02日
    浏览(62)
  • 【Unity3D小功能】Unity3D中实现点击‘文字’出现‘UI面板’

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 QQ群:398291828 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 宠粉博主又来了,今天有粉丝问我如何实现点击一段文字然后出现的面板在那段文字附近显示: 深入了

    2024年04月13日
    浏览(77)
  • 【Unity3D】Unity3D 软件安装 ( 注册账号并下载 Unity Hub | 安装 Unity Hub | 获取个人版授权 | 中文环境设置 | 安装 Unity3D 编辑器 )

    Unity 官方网站 : 英文 : https://unity.com 中文 : https://unity.cn 进入 中文网站 https://unity.cn , 点击右上角的 \\\" 下载 Unity \\\" 按钮 ; 推荐下载 Unity3D 的长期支持版本 ; 点击界面中的 \\\" 下载 Unity Hub \\\" 选项 ; 根据你的系统 , 选择对应的 Unity Hub , 我在 Windows 上开发 , 因此选择 \\\" Windows 下载 \\\"

    2024年01月25日
    浏览(91)
  • 【Unity3D日常开发】Unity3D中实现不同脚本之间的执行顺序控制

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 首先,来了解一下事件函数的执行顺序,下图是官方给的脚本中事件函数的执行顺序: 众所周知,U

    2024年02月02日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包