深入了解Unity的QualitySettings类:一份详细的技术指南(三)

这篇具有很好参考价值的文章主要介绍了深入了解Unity的QualitySettings类:一份详细的技术指南(三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当你正在开发一个Unity游戏时,理解如何管理和优化游戏的图形质量是至关重要的。Unity提供了一个强大的类,叫做QualitySettings,它允许你在运行时获取和修改游戏的图形质量设置。本文将对QualitySettings类进行深入解析,并提供每个属性的详细用法和示例。

QualitySettings概述

QualitySettings类提供了一种获取和修改Unity的图形质量设置的方法。这些设置包括抗锯齿,阴影,纹理,分辨率等方面。你可以用这个类动态地调整这些设置,来根据设备的性能提供最佳的游戏体验。

  1. 图形质量等级相关:
    names:一个包含所有预设图形质量等级名称的字符串数组
    GetQualityLevel():返回当前选择的图形质量等级的索引。
    SetQualityLevel(int index, bool applyExpensiveChanges = true):用于设置当前的图形质量等级
    IncreaseLevel(bool applyExpensiveChanges = true):提高一级当前的图形质量等级
    DecreaseLevel(bool applyExpensiveChanges = true):降低一级当前的图形质量等级
    GetRenderPipelineAssetAt():获取指定质量级别的RenderPipelineAsset

names:一个包含所有预设图形质量等级名称的字符串数组。你可以通过这个数组获取每个等级的名称

string[] qualityLevelNames = QualitySettings.names;
foreach (string name in qualityLevelNames)
{
    Debug.Log(name);
}

GetQualityLevel():这个方法返回当前选择的图形质量等级的索引

int currentQualityLevel = QualitySettings.GetQualityLevel();
Debug.Log("当前图像质量等级: " + currentQualityLevel);

SetQualityLevel(int index, bool applyExpensiveChanges = true):这个方法用于设置当前的图形质量等级。你可以用它来根据设备的性能动态地改变图形质量等级

QualitySettings.SetQualityLevel(3, true);

IncreaseLevel(bool applyExpensiveChanges = true)DecreaseLevel(bool applyExpensiveChanges = true):这两个方法用于提高或降低一级当前的图形质量等级。它们可以用来创建一个让玩家在游戏中动态调整图形质量的设置菜单

QualitySettings.IncreaseLevel(true);
QualitySettings.DecreaseLevel(true);

GetRenderPipelineAssetAt(int index):返回指定质量级别的RenderPipelineAsset。RenderPipelineAsset包含渲染管道的设置信息,可以用于配置如何渲染场景

// 获取当前质量等级的RenderPipelineAsset
RenderPipelineAsset renderPipelineAsset = QualitySettings.GetRenderPipelineAssetAt(QualitySettings.GetQualityLevel());
if(renderPipelineAsset != null)
{
    Debug.Log("当前质量等级的RenderPipelineAsset名称:" + renderPipelineAsset.name);
}
else
{
    Debug.Log("当前质量等级没有配置RenderPipelineAsset");
}


  1. 图形设置相关
    anisotropicFiltering:这个属性用于获取或设置各向异性过滤模式
    antiAliasing:这个属性控制全屏抗锯齿的质量级别
    billboardsFaceCameraPosition:这个属性决定了Billboard的朝向是否基于相机的位置。
    desiredColorSpace:这个属性获取期望的颜色空间,Linear或Gamma
    masterTextureLimit:这个属性用于获取或设置mipmap的最大级别
    realtimeReflectionProbes:这个属性确定是否启用实时反射探针
    pixelLightCount:这个属性用于获取或设置场景中可以使用的像素灯光数量的最大值
    softParticles:这个属性用于获取或设置是否启用软粒子
    vSyncCount:这个属性设置垂直同步的帧数间隔。
    resolutionScalingFixedDPIFactor:这个属性用于控制屏幕分辨率的缩放比例。用于设定在UI元素和文字渲染上,分辨率缩放时的固定DPI因子。其值在0.0 - 1.0之间,0代表低DPI,1代表高DPI。这个设置主要用于在不同分辨率和DPI的屏幕上,使UI元素和文字能够正确和清晰地渲染。
    renderPipeline:此属性获取或设置当前使用的RenderPipelineAsset
    softVegetation:用于确定是否启用“柔和植被”选项
    maxQueuedFrames:这是一个设置了Unity允许排队的帧数的属性。

anisotropicFiltering:这个属性用于获取或设置各向异性过滤模式。各向异性过滤是一种纹理过滤方法,可以提高纹理在斜面和远处的视觉质量。可以在视线接近水平时提高纹理的清晰度,此属性的值是AnisotropicFiltering枚举类型,有Disable(禁用)、Enable(启用)和ForceEnable(强制启用)三种选项。

QualitySettings.anisotropicFiltering = AnisotropicFiltering.Enable;
Debug.Log(QualitySettings.anisotropicFiltering); //输出:Enable

antiAliasing:这个属性控制全屏抗锯齿的质量级别。抗锯齿是一种图形技术,用于平滑像素边缘,减少"锯齿"效果。取值可以是0(禁用)、2、4、8等,代表使用的抗锯齿级别。

QualitySettings.antiAliasing = 2;
Debug.Log(QualitySettings.antiAliasing); //输出:2

billboardsFaceCameraPosition:这个属性决定了Billboard的朝向是否基于相机的位置。当此属性为真时,Billboard将始终面向相机。当为假时,Billboard将面向相机的方向,但不考虑相机的高度位置。

QualitySettings.billboardsFaceCameraPosition = true;
Debug.Log(QualitySettings.billboardsFaceCameraPosition); //输出:True

desiredColorSpace:这个属性获取期望的颜色空间,Linear或Gamma

Debug.Log(QualitySettings.desiredColorSpace); //输出:Gamma(默认值,具体输出取决于当前设置)

masterTextureLimit:这个属性用于获取或设置mipmap的最大级别。更高的限制会使用更小的纹理,节省显存,但会降低纹理质量。

QualitySettings.masterTextureLimit = 1;
Debug.Log(QualitySettings.masterTextureLimit); //输出:1

realtimeReflectionProbes:确定是否启用实时反射探针。

QualitySettings.realtimeReflectionProbes = true;
Debug.Log(QualitySettings.realtimeReflectionProbes); //输出:True

pixelLightCount:这个属性用于获取或设置场景中可以使用的像素灯光数量的最大值。增加这个值会提高视觉质量,但会增加性能开销。
softParticles:这个属性用于获取或设置是否启用软粒子。软粒子是一种渲染技术,用于消除粒子和地面之间的硬边缘。

QualitySettings.pixelLightCount = 4;
QualitySettings.softParticles = true;

vSyncCount:获取或设置垂直同步计数

    QualitySettings.vSyncCount = 1;
    Debug.Log(QualitySettings.vSyncCount); //输出:1

softVegetation:用于确定是否启用“柔和植被”选项。当此选项启用时,玩家视角接近植被(如草和小树)时,它们会变得半透明,从而避免了植被完全阻挡视线的情况

// 开启或关闭 Soft Vegetation
QualitySettings.softVegetation = true;
// 检查是否开启 Soft Vegetation
if(QualitySettings.softVegetation)
{
    Debug.Log("Soft Vegetation 选项已开启");
}

maxQueuedFrames:是Unity中用于指定帧队列大小的属性。它决定了Unity在渲染时能够存储多少帧的数据。在实际应用中,如果你的游戏渲染的帧率高于显示刷新率,那么这个属性可以帮助你控制帧队列的大小。
这个属性比较难理解,下面举个例子
如果你的显示器的刷新率是60Hz,但是你的游戏的渲染帧率是300FPS,这意味着在一秒内,你的游戏可能会渲染出大约300帧的数据,但实际上显示器只能显示60帧。这样的话,多余的帧会被存储在帧队列中,等待显示器刷新时再进行显示。

maxQueuedFrames的值就是指定这个帧队列可以存储多少帧的数据。如果你把它设置得太大,那么会消耗大量的内存来存储这些未显示的帧。如果你把它设置得太小,那么可能会导致画面撕裂,因为帧队列中没有足够的帧来填充显示器的刷新间隙。

// 设置帧队列大小为2
QualitySettings.maxQueuedFrames = 2;

上面的代码将帧队列大小设置为2。这意味着Unity会在内存中保存最多2帧的渲染数据,等待显示器刷新时进行显示。多于这个数量的帧将被丢弃,不会进行渲染。
注意,这个属性的默认值是2,通常情况下,你不需要修改它。除非你有特殊的需求,比如你需要在特定的硬件上进行优化,或者你需要解决特定的渲染问题。


  1. LOD和粒子系统设置
    lodBias:这个属性用于获取或设置LOD距离
    maximumLODLevel:这个属性用于获取或设置最大的LOD等级
    particleRaycastBudget:这个属性用于设置每个frame用于粒子碰撞检测的最大射线投射数量。

lodBias:这个属性用于获取或设置LOD距离。LOD技术能够根据物体与相机的距离动态调整物体的模型复杂度和纹理大小,从而优化游戏性能。更高的值会导致从更远的地方看到高细节等级的物体,这可能会影响性能。
maximumLODLevel:这个属性用于获取或设置最大的LOD等级。将其设置为较低的值可以提高性能,但可能会降低视觉质量。

QualitySettings.lodBias = 2.0f;
QualitySettings.maximumLODLevel = 1;

particleRaycastBudget:这个属性用于设置每个frame用于粒子碰撞检测的最大射线投射数量。

QualitySettings.particleRaycastBudget = 3000;
Debug.Log(QualitySettings.particleRaycastBudget); //输出:3000

  1. 角色和皮肤设置
    skinWeights:用于控制蒙皮网格的混合权重。
    blendWeights:角色渲染时使用的混合权重。

skinWeights:用于控制蒙皮网格的混合权重

 QualitySettings.skinWeights = SkinWeights.OneBone;
 Debug.Log(QualitySettings.skinWeights); //输出:OneBone

blendWeights:确定在角色渲染时使用的混合权重

QualitySettings.blendWeights = BlendWeights.FourBones;
Debug.Log(QualitySettings.blendWeights); //输出:FourBones

  1. 渲染阴影相关属性
    shadows:这个属性允许你设置阴影的类型
    shadowResolution:这个属性用于获取或设置阴影分辨率
    shadowDistance:这个属性用于获取或设置阴影渲染的最大距离
    shadowmaskMode:这个属性用于控制阴影遮罩模式
    shadowNearPlaneOffset:这个属性用于控制所有光源的阴影近裁剪面的偏移量
    shadowProjection:这个属性用于控制阴影投影方法,可以选择Close Fit或者Stable Fit。
    shadowCascades:这个属性用于控制平行光源使用的阴影级联数量,阴影级联技术能够在不同的距离级别提供不同的阴影质量。
    shadowCascade2Split:这个属性决定了在使用2级阴影级联时,两个级联阴影的分隔位置
    shadowCascade4Split:这个属性是一个Vector3,它决定了在使用4级阴影级联时,四个级联阴影的分隔位置

shadows:这个属性允许你设置阴影的类型,如硬阴影或软阴影,或者完全关闭阴影。
shadowResolution:这个属性用于获取或设置阴影分辨率。更高的分辨率会产生更清晰的阴影,但会增加性能开销。
shadowDistance:这个属性用于获取或设置阴影渲染的最大距离。减少这个距离可以提高性能,但会降低游戏视觉质量。

QualitySettings.shadows = ShadowQuality.All;// 设置阴影的类型
QualitySettings.shadowResolution = ShadowResolution.High;
QualitySettings.shadowDistance = 100;

shadowmaskMode:这个属性用于控制阴影遮罩模式,可以是Shadowmask或者Distance Shadowmask。

QualitySettings.shadowmaskMode = ShadowmaskMode.DistanceShadowmask;
Debug.Log(QualitySettings.shadowmaskMode); //输出:DistanceShadowmask

shadowCascades:这个属性用于控制平行光源使用的阴影级联数量。阴影级联技术能够在不同的距离级别提供不同的阴影质量。

QualitySettings.shadowCascades = 2;// 改变阴影级联数量为2
Debug.Log(QualitySettings.shadowCascades); //输出当前的阴影级联数量:2

shadowCascade2Split: 这个属性决定了在使用2级阴影级联时,两个级联阴影的分隔位置。它的值范围是0到1,表示距离摄像机的百分比。例如,如果它的值是0.25,那么第一个级联阴影会延伸到视野的25%,而第二个级联阴影会延伸到剩余的75%。
shadowCascade4Split: 这个属性是一个Vector3,它决定了在使用4级阴影级联时,四个级联阴影的分隔位置。Vector3的每一个分量都在0到1之间,它们分别表示第一、第二和第三个级联阴影与摄像机的距离的百分比。例如,如果它的值是(0.2, 0.3, 0.5),那么第一个级联阴影会延伸到视野的20%,第二个级联阴影会延伸到接下来的10%,第三个级联阴影会延伸到接下来的20%,最后一个级联阴影会延伸到剩余的50%。

注意,当QualitySettings.shadowCascades的值为2时,使用shadowCascade2Split;当QualitySettings.shadowCascades的值为4时,使用shadowCascade4Split。

// 设置使用2级阴影级联
QualitySettings.shadowCascades = 2;
// 设置两个级联阴影的分隔位置
QualitySettings.shadowCascade2Split = 0.25f;

// 设置使用4级阴影级联
QualitySettings.shadowCascades = 4;
// 设置四个级联阴影的分隔位置
QualitySettings.shadowCascade4Split = new Vector3(0.1f, 0.2f, 0.3f);

  1. 异步上传相关
    asyncUploadBufferSize:这个属性设置异步数据上传的缓冲区大小(以MB为单位)
    asyncUploadPersistentBuffer:是否保留异步上传的缓冲区
    asyncUploadTimeSlice:这个属性设置异步数据上传每帧可以使用的最大时间片(以毫秒为单位)

asyncUploadBufferSize:这个属性设置异步数据上传的缓冲区大小(以MB为单位)。当Unity需要将数据(例如纹理或网格数据)上传到GPU时,它可以选择使用异步上传,这意味着数据上传可以在后台进行,不会阻塞主线程。增加此缓冲区的大小可能会减少数据上传对主线程的影响,但也会增加内存的使用。

    // 输出当前异步数据上传的缓冲区大小
    Debug.Log("当前异步数据上传的缓冲区大小: " + QualitySettings.asyncUploadBufferSize + "MB");
    // 改变异步数据上传的缓冲区大小为512MB
    QualitySettings.asyncUploadBufferSize = 512;   
    // 再次输出当前异步数据上传的缓冲区大小
    Debug.Log("更改后的异步数据上传的缓冲区大小: " + QualitySettings.asyncUploadBufferSize + "MB");

asyncUploadPersistentBuffer:当此属性设置为true时,Unity将保留异步上传的缓冲区,即使在它们不再需要时也是如此。这可以减少Unity需要创建和销毁缓冲区的次数,从而可能提高性能。然而,这也会增加内存的使用,因为缓冲区会被保留而不是被销毁。

    QualitySettings.asyncUploadPersistentBuffer = true;   
    // 输出当前异步数据上传的缓冲区是否被保留
    Debug.Log("更改后异步数据上传的缓冲区是否被保留: " + QualitySettings.asyncUploadPersistentBuffer);

asyncUploadTimeSlice:这个属性设置异步数据上传每帧可以使用的最大时间片(以毫秒为单位)。减少这个值可以防止异步数据上传占用过多的CPU时间,但可能会使数据上传需要更长的时间。

    // 改变异步数据上传每帧可以使用的最大时间片为4ms
    QualitySettings.asyncUploadTimeSlice = 4;
    // 输出当前异步数据上传每帧可以使用的最大时间片
    Debug.Log("更改后的异步数据上传每帧可以使用的最大时间片: " + QualitySettings.asyncUploadTimeSlice + "ms");

请注意,这些属性的使用和效果可能会受到你的具体硬件和Unity版本的影响。如果你打算更改这些设置,最好先进行测试,以确保它们的改变会产生你希望的效果。


  1. Mipmap 流处理相关
    streamingMipmapsActive:这个属性用于检测流媒体mipmap是否已激活。
    streamingMipmapsAddAllCameras:是否所有的相机都应对mipmap的流媒体进行贡献。
    streamingMipmapsMemoryBudget:用于控制流媒体mipmap的内存预算。
    streamingMipmapsRenderersPerFrame:用于设置每帧能够开始加载流媒体mipmap的渲染器的数量。
    streamingMipmapsMaxFileIORequests:设定Unity一次可以发送的最大的mipmap流文件I/O请求的数量。
    streamingMipmapsMaxLevelReduction:这个属性可以让你设置mipmap的最大降级级别。

streamingMipmapsActive:获取或设置流式Mipmap是否激活

    QualitySettings.streamingMipmapsActive = true;
    Debug.Log(QualitySettings.streamingMipmapsActive); //输出:True

streamingMipmapsMemoryBudget:获取或设置流式Mipmap的内存预算

    QualitySettings.streamingMipmapsMemoryBudget = 512;
    Debug.Log(QualitySettings.streamingMipmapsMemoryBudget); //输出:512

streamingMipmapsMaxFileIORequests:这个属性设定了Unity一次可以发送的最大的mipmap流文件I/O请求的数量。

    // 设置Unity一次可以发送的最大的mipmap流文件I/O请求的数量
    QualitySettings.streamingMipmapsMaxFileIORequests = 10;

streamingMipmapsMaxLevelReduction:当内存吃紧时,这个属性可以让你设置mipmap的最大降级级别。

    // 设置内存吃紧时,mipmap的最大降级级别
    QualitySettings.streamingMipmapsMaxLevelReduction = 2;

结论

Unity的QualitySettings类是一个强大的工具,它可以帮助你根据设备性能动态调整游戏的图形质量。通过深入理解这个类的所有类成员和用法,你可以更好地优化你的游戏,提供最佳的玩家体验。文章来源地址https://www.toymoban.com/news/detail-584843.html

到了这里,关于深入了解Unity的QualitySettings类:一份详细的技术指南(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 深入了解Unity的PlayerPrefs类:一份详细的技术指南(五)

    在Unity游戏开发中,一个重要的需求就是管理玩家的偏好设置。有很多方法可以实现这个目标,但Unity内置的PlayerPrefs类是最简单和快速的一种。PlayerPrefs类为我们提供了一种方便的方式来存储和检索读取玩家的数据,包括游戏设置,进度等。 PlayerPrefs类是一种轻量级的,用于

    2024年02月15日
    浏览(38)
  • 深入了解Unity的Physics类:一份详细的技术指南(七)(上篇)

    Unity的Physics类是Unity物理系统的核心,提供了一套用于处理和控制物理模拟的API。这个类提供了用于控制物理系统的全局属性和方法,以及检测和施加力到游戏对象,处理碰撞和触发器事件等。为了让开发者都能更好理解这个Physics类,它的属性都 狠详细解释 ,导致篇章过长

    2024年02月10日
    浏览(35)
  • 深入了解Unity的Physics类:一份详细的技术指南(七)(下篇)

    碰撞检测和忽略: (这些方法和属性涉及查询和处理物体之间的碰撞) Physics.CheckBox : 检查给定位置的盒子是否与任何碰撞器接触或者位于任何碰撞器内部。 Physics.CheckCapsule : 检查给定位置的胶囊是否与任何碰撞器接触或者位于任何碰撞器内部。 Physics.CheckSphere : 检查给定位置的

    2024年02月11日
    浏览(39)
  • Kubernetes日志查看指南:深入了解容器日志管理技术

    简介: Kubernetes(简称K8s)已成为现代容器化应用程序管理的主要平台之一。了解如何有效地查看和管理Kubernetes集群中的容器日志对于故障排除、性能优化和安全监控至关重要。本文将向您介绍一些基本的技术和工具,帮助您在Kubernetes环境中查看和分析容器日志。 查看单个

    2024年02月12日
    浏览(39)
  • 推荐系统[一]:超详细知识介绍,一份完整的入门指南,解答推荐系统相关算法流程、衡量指标和应用,以及如何使用jieba分词库进行相似推荐,业界广告推荐技术最新进展

    搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目

    2024年02月13日
    浏览(55)
  • 【HTML】深入全掌握 iframe:了解 its 技术原理、优缺点、最佳应用场景及实战指南

    Web 应用开发中,包含其他网页的框架是很常见的需求。HTML 标签 iframe 提供了一个容器,可以用来嵌入其他页面,并且它自带了一些有用的特性,如调整大小、滚动等。 本文将深入介绍 iframe 技术原理、优缺点、最佳应用场景及实战指南,希望能帮助您更好地运用 iframe,提升

    2024年02月08日
    浏览(50)
  • 深入探索Apache ZooKeeper:关键技术学习与实践指南

    Apache ZooKeeper,作为一款广受认可的分布式协调服务,为大型分布式系统提供了强大的数据一致性、服务注册与发现、分布式锁、配置管理等基础服务。本文将深入剖析ZooKeeper的技术内核,梳理其关键学习点,并结合实践场景给出学习与应用建议,帮助读者全方位掌握这一重要

    2024年04月28日
    浏览(40)
  • Git入门图文教程(深入浅出,详细了解Git,以及操作)

    Git是当前最先进、最主流的 分布式 版本控制系统,免费、开源!核心能力就是版本控制。再具体一点,就是面向代码文件的版本控制,代码的任何修改历史都会被记录管理起来,意味着可以恢复到到以前的任意时刻状态。支持跨区域多人协作编辑,是团队项目开发的必备基

    2024年02月08日
    浏览(57)
  • 【Linux技术宝典】深入理解Linux基本指令:命令行新手指南

    📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构冒险记 ✅Linux技术宝典 🌅 有航道的人,再渺小也不会迷途。 1. ls 指令 语法 : ls [选项][目录或文件] 功能 : 对于目录 ,列出目录的内容,即显示当前目录中的文件和子目录列表。 对于文件 ,将列出文件名以及其他信息。

    2024年02月21日
    浏览(36)
  • 带你深入了解spark(重生之最牛逼最详细版)

    Spark 是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一。 spark官网:Apache Spark™ - Unified Engine for large-scale data analytics  spark概述 第一阶段:Spark最初由美国加州伯克利大学( UC Berkelcy)的AMP实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于

    2024年04月14日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包