首页 > 其他分享 >限制Unity帧率的方式

限制Unity帧率的方式

时间:2024-02-06 17:44:18浏览次数:30  
标签:社区 限制 方式 texture 纹理 Unity var new UWA

1)限制Unity帧率的方式
2)只在编辑器内,纹理不开启Read&Write情况下,如何获取纹理所有颜色值
3)如何在FBX剔除Lit.shader依
4)如何在iPhone 12mini设备上禁止竖屏


这是第373篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

UWA社区主页:community.uwa4d.com
UWA QQ群:465082844

Platform

Q:目前我们想把游戏设置为30帧,是通过Application.targetFrameRate实现的;但是会有一些兼容性问题,比如一些设备会动态调整设备刷新率导致游戏帧率过低(比如设备从120HZ动态降为60HZ时,游戏就从30帧掉为15帧了),我们也尝试过跟进设备的刷新率变化动态调整Application.targetFrameRate,但是一些设备还是出问题,主要是一些支持高刷新的设备,如120HZ、180HZ,设备在标准模式下本身会动态调整刷新率的,节约能耗。

不知道大家有没有相关的经验或者更好的解决方案?

A:可以尝试挂一个Update脚本,估计可以跟上高刷新的设备120HZ、180HZ的动态调整刷新率。

感谢NG週@UWA问答社区提供了回答


Editor

Q:只想在编辑器内优化一些纹理图片,纹理不开启Read&Write。

目前方案如下,但是会有几个问题:
1. LoadImage只支持PNG、JPG格式,像TGA、PSD格式则返回为空。
2. 对于那些几十MB的PNG纹理,也是返回空。

请问有无其他方式?

代码如下:

var texture = AssetDatabase.LoadAssetAtPath<Texture2D>(assetPath);
var bytes = File.ReadAllBytes(assetPath);
var new_texture = new Texture2D(texture.width, texture.height);
var res = new_texture.LoadImage(bytes);
if (res == false)
{
    Debug.LogError($"错误提示:{assetPath}纹理资源LoadImage失败", texture);
    return null;
}
var colors = new_texture.GetPixels32();  // 获取到所需颜色数组

  

A1:可以试试以下方法:

Texture2D texture = AssetDatabase.LoadAssetAtPath<Texture2D>(assetPath); // 你的纹理
byte[] rawTextureData = texture.GetRawTextureData();

Texture2D finalTex = new Texture2D(texture.width, texture.height, texture.format, false);
finalTex.LoadRawTextureData(rawTextureData);
finalTex.Apply();

var colors = finalTex.GetPixels32();  // 获取到所需颜色数组

  

请注意,所有这些方法都是在绕过Read/Write Enable的限制时的替代品,而不是直接的解决方案。如果可能,最好还是在导入纹理时启用Read/Write Enable以获得更好的性能和更简单的纹理操作。

另外一个方法:可以设置一个Camera的TargetTexture为一个RenderTexture,接着使用Graphics.Blit将目标纹理渲染到这个RenderTexture上。然后,你可以通过ReadPixels函数将RenderTexture读取为Texture2D。这种方法不依赖于Read/Write Enable。

扩展阅读:《高效访问纹理数据,持续优化整体性能》

感谢NG週@UWA问答社区提供了回答

A2:我之前用过@NG週说的办法,是可行的,不过我当时只处理PNG图片。

另外离线处理纹理,可以考虑使用Job来并行化处理,效果很高。

感谢junbin.liu@UWA问答社区提供了回答


Asset

Q:测试发现只能通过后处理才能去掉Lit.shader依赖,尝试使用AssetDatabase.LoadAssetAtPath(fbxPath)然后执行下面代码,并不能去掉依赖。请问还有什么其他办法吗?

protected void OnPostprocessModel(GameObject model)
    {
        var renderers = model.GetComponentsInChildren<Renderer>();
        foreach (var renderer in renderers)
        {
            // 默认fbx会引用Lit.mat,会引起ab包冗余,导入时去掉
            foreach (var material in renderer.sharedMaterials)
            {
                if (material != null && material.name == "Lit")
                {
                    renderer.sharedMaterials = new Material[0];
                }
            }
        }

        // 去掉fbx默认自带的材质球
        ModelImporter importer = (ModelImporter)base.assetImporter;
        if (importer != null)
        {
            if (importer.materialImportMode != ModelImporterMaterialImportMode.None)
            {
                importer.materialImportMode = ModelImporterMaterialImportMode.None;
                importer.SaveAndReimport();
            }
        }
    }

  

A:可以试试在打包阶段,打AssetBundle之前,去掉Lit.mat对lit.Shader的依赖。

Cube.prefab,就是Unity默认的Cube做成的Prefab。

var prefabGO = AssetDatabase.LoadAssetAtPath<GameObject>(“Assets/Editor/Cube.prefab”);
var renderer = prefabGO.GetComponent<Renderer>();
renderer.sharedMaterial.shader = null;

  

感谢范世青@UWA问答社区提供了回答


iOS

Q:使用的Unity引擎是2020.347f1,已经在打包时候设置了横屏,然后又使用了以下代码设置,其它机型没问题但对面的机器还是能竖屏。

        Screen.orientation = ScreenOrientation.AutoRotation;

        Screen.autorotateToLandscapeLeft = true;
        Screen.autorotateToLandscapeRight = true;
        Screen.autorotateToPortrait = false;
        Screen.autorotateToPortraitUpsideDown = false;

  

想要禁止竖屏,设置横屏在安卓和大部分苹果上没问题,但在iPhone 12mini上却可以竖屏,请问还有其它方法吗?

A1:先确定iPhone 12mini的出包工程跟其他苹果设备的是否是同一个,接着排除有没有不小心在Xcode工程里面设置了竖屏模式,还有就是给iPhone 12mini装一个同类型的游戏,看看能不能横屏,排除是不是手机装了强制竖屏插件问题。

感谢NG週@UWA问答社区提供了回答

A2:遇到过一次,是手机系统的Bug,打开任何游戏都能切换横竖屏,重启下手机然后好了。

感谢jj@UWA问答社区提供了回答

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:465082844

标签:社区,限制,方式,texture,纹理,Unity,var,new,UWA
From: https://www.cnblogs.com/uwatech/p/18010106

相关文章

  • 麒麟KYLINOS使用五种不同方式安装软件
    原文链接:麒麟KYLINOS使用五种不同方式安装软件hello,大家好啊!今天我要给大家介绍的是在麒麟KYLINOS操作系统上使用五种不同方式安装软件的方法。在Linux系统中,有多种方式可以安装软件,每种方式都适用于不同的场景和需求。今天,我们将探讨在麒麟KYLINOS上常用的五种软件安装方法,帮助您......
  • 【Unity】记一次卡顿优化(由3D资源面数过多引起)
    这个优化方法可能仅对我有效,我只是做一个记录条件:模型很大,并且shader中使用了Smoothness优化方法打开Mesh引用的模型修改模型Normal为calculate修改SmoothnessSource为fromAngle修改SmoothingAngle降到你可以接收的值,我设置的是20。在unity文档中说的是,通常SmoothingAn......
  • Unity Mono单例(MonoSingleton)C#脚本
    什么是单例模式?单例模式是设计模式的一种,一般来说,使用单例模式的类,在程序中全局只会存在一个实例,并且一般来讲其是全局可被访问的。在unity游戏开发中,单例模式广泛应用于GameManager和各种Controller这种只需要一个实例的脚本。以下就是UnityMono单例的泛用脚本usingSystem.......
  • 打造个性化日历:Python编程实现,选择适合你的方式!
    在本文中,我们将使用Python编写一个简单的日历程序。虽然市面上已经存在现成的日历功能,并且有第三方库可以直接调用实现,但我们仍然希望通过自己编写日历程序来引出我认为好用的日历实现。希望这篇文章能够对你有所帮助。在Python官方文档中,我们可以找到一个名为"calendar"的模块,它......
  • JS数组添加元素的三种方式
    JS数组添加元素的三种方式1、push()结尾添加数组.push(元素)参数描述newelement1必需。要添加到数组的第一个元素。newelement2可选。要添加到数组的第二个元素。newelementX可选。可添加多个元素。2、unshift()头部添加数组.unshift(元素)参数描述newelement1必......
  • 执行truncate时报错:ORA-00054:资源正忙但指定以NOWAIT 方式获取资源或者超时失效,怎样
    在执行TRUNCATE语句时出现错误,可能是由于以下原因之一:表正在被其他会话使用:如果表正在被其他会话使用,您将无法执行TRUNCATE操作。请确保没有其他会话正在使用该表,并尝试再次执行TRUNCATE。权限不足:如果您没有足够的权限来执行TRUNCATE操作,则会收到错误消息。请确保您具有足......
  • 八、多种登陆方式接口 短信验证码接口
     多种登陆方式接口#路由fromdjango.urlsimportpath,includefrom.importviewsfromrest_framework.routersimportSimpleRouterrouter=SimpleRouter()router.register('',views.LoginView,'login')urlpatterns=[path('',include(r......
  • Unity打包Android报错:Target Android SDK not installed Android SDK does not includ
    1.需要查看当前unity版本中安装的SDKVersion2.找到对应路径下的文件,打开build-tools文件,其中就是对应的SDKVersion4.修改Unity中对应的配置 ......
  • 鹏业云计价i20(四川):多种方式套用定额
    定额项目的套用,需根据清单项目、特征描述、工作内容来判定,鹏业云计价i20(四川)根据用户多年的操作习惯,为用户提供了多种方式便捷套用定额,让用户更快、更准的完成清单项目组价。方式一:清单标准指引选择根据清单工作内容及对应的定额条目,快速的对定额进行选择套用,适用于所有用户。①直......
  • 再测python3.13 —— python3.13是否移除了GIL的限制(续)
    前文:python3.13是否移除了GIL的限制x86_64ubuntu22.04环境下编译版本python3.13.0alpha0源码——python3.13.0alpha0的源码编译相关资料:PEP703–MakingtheGlobalInterpreterLockOptionalinCPythonhttps://github.com/python/cpython/issues/108223......