爱站工具包的模块有哪些,ppt模板免费下载免费,wordpress live2d换装,中国移动生活app下载安装前言
欢迎阅读本篇博客#xff0c;这章我们将深入探讨 Unity 游戏引擎中 Camera 类的委托和枚举。摄像机在游戏开发中扮演着关键角色#xff0c;它不仅定义了玩家视角的窗口#xff0c;还影响着游戏的视觉表达和整体体验。理解和正确使用 Camera 类的枚举和委托#xff0c…前言
欢迎阅读本篇博客这章我们将深入探讨 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
Vertical (垂直轴): 当视场基于垂直轴时无论屏幕的宽高比如何变化摄像机视场的垂直部分保持不变。这是最常用的设置特别是在需要保持垂直视角一致性的场景中比如第一人称或第三人称射击游戏。Horizontal (水平轴): 当视场基于水平轴时摄像机视场的水平部分保持不变而垂直视场会根据屏幕的宽高比进行调整。这种设置在宽屏显示器上特别有用因为它可以在不裁剪水平视野的情况下适应不同的屏幕尺寸。 Camera.GateFitMode
这个枚举控制摄像机视野如何适应画幅尺寸的变化尤其重要于影视制作中的画幅比例适配。
Vertical: 垂直适配。在此模式下摄像机的垂直视野保持不变而水平视野根据画幅比例变化而自动调整。这常用于确保特定的垂直视觉元素不受画幅比例变化的影响。Horizontal: 水平适配。与垂直适配相反此模式保持水平视野不变垂直视野随画幅比例变化而调整。适用于水平视角更为重要的场景。Fill: 填充模式。摄像机的视野会扩展以填充整个画幅但这可能导致画幅边缘的部分图像被裁剪。Overscan: 保留图像的全部内容。摄像机的视野会进一步扩展以确保画幅内的每个部分都被覆盖可能会捕捉到通常不可见的场景部分。None: 摄像机不进行任何画幅适配。这意味着摄像机视野依赖于传感器尺寸无视画幅比例。 Camera.MonoOrStereoscopicEye
用于区分渲染单眼Mono和双眼Stereoscopic视图的设置。这对于虚拟现实VR和增强现实AR应用尤其重要。
Left: 左眼。用于立体视觉渲染的左眼视图。Right: 右眼。用于立体视觉渲染的右眼视图。Mono: 单眼。标准的2D视觉渲染不涉及立体视觉效果。 Camera.RenderRequestMode
与摄像机的渲染请求相关允许开发者在高级渲染场景中进行更细致的控制如在后期处理、图像分析或高级渲染技术中。
None: 默认值表示没有特定的渲染请求模式。ObjectId: 输出一个对象的 InstanceID 缓冲区。这通常用于识别渲染场景中的特定对象。Depth: 输出深度值。这对于实现深度相关的效果如景深、阴影等非常有用。VertexNormal: 输出插值后的顶点法线。这对于实现某些类型的光照效果很重要。WorldPosition: 输出世界坐标位置缓冲区。这可以用于计算对象在世界空间中的位置。EntityId: 输出一个实体ID。这通常用于实现复杂的渲染效果需要跟踪特定实体。BaseColor: 输出材质的基色Albedo/Base Color。这对于提取或修改对象的主要颜色非常有用。SpecularColor: 返回材质的镜面反射颜色缓冲区。用于实现高级的光照效果。Metallic: 输出材质的金属度值。这对于实现金属材质的渲染效果非常重要。Emission: 输出材质的发光值。用于渲染自发光材质。Normal: 输出每像素的法线。这对于实现复杂的光照和表面效果至关重要。Smoothness: 返回材质的光滑度缓冲区。这对于实现高质量的反射和光泽效果非常有用。Occlusion: 返回材质的环境遮蔽Ambient Occlusion缓冲区。这对于增强场景的深度感和细节非常重要。DiffuseColor: 输出材质的漫反射颜色。这对于分析或修改对象的漫反射颜色非常有用。 Camera.RenderRequestOutputSpace
这个枚举定义了渲染请求的输出空间即渲染请求的数据将以哪种形式输出。
ScreenSpace: 渲染请求将在屏幕空间中渲染从摄像机的视角出发。这意味着输出将是基于摄像机视角和屏幕坐标系统的。UV0 - UV8: 这些值表示渲染请求将输出在被渲染网格的特定UV空间中。UV空间是用于映射纹理到3D模型的坐标系统每个UV值从UV0到UV8代表模型上不同的纹理坐标集。这使得开发者可以对模型上特定的纹理坐标进行高级渲染操作。 UV0: 输出在UV0空间中。 UV1: 输出在UV1空间中。 UV2: 输出在UV3空间中。 剩余的同理
这些选项允许开发者在不同的坐标系统中进行渲染操作为渲染过程提供了更多的灵活性和控制。例如选择屏幕空间可以用于实现与屏幕坐标相关的效果如屏幕空间反射Screen Space Reflections。而选择UV空间可以用于实现复杂的纹理效果如纹理映射、纹理变换等。这为在Unity中实现高级图形处理和自定义渲染技术提供了强大的工具。 Camera.StereoscopicEye
这个枚举用于指定立体视觉渲染中的眼睛类型。
Left: 左眼。用于生成立体视觉中的左眼图像。Right: 右眼。用于生成立体视觉中的右眼图像。 希望这篇博客能够帮助你更好地理解 Unity 的 Camera 类。 在下一篇文章我们会继续深度解析Camera的实例对象上面说到的枚举用法也会在之后的章节中使用。如有任何疑问或想要进一步讨论欢迎在评论区留言。