如何定位Unity死循环导致的完全卡死

2023-10-27

1)如何定位Unity死循环导致的完全卡死
​2)如何设定Unity AssetBundle单个包大小
3)MaterialPropertyBlock修改Stencil相关参数
4)线性空间中动作文件控制材质球颜色失真问题
5)DrawMeshInstancedIndirect在华为手机上失效


这是第240篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)

Script

Q:运行游戏时,在某些特定的情况下,Unity会突然卡死,看任务控制器里的Unity进程内存会持续飙升到很高的值。

由于目前游戏工程已经很大了,并且脚本众多(Lua+C#),出现这种情况时又没有异常日志,断点也断不到位置,也不知道是哪里出现的死循环异常了,这个问题卡了很久,没思路了,求解。

A1:经网友真木提示了这篇文章:https://www.cnblogs.com/lijiajia/p/10817407.html

通过debug.sethook这个函数来注册一个Hook的Handler,把每一行或者每个函数的调用都打印出来,就能知道死循环的位置了。这种方法可用于找Lua的死循环,假如是C#的死循环,需要其它方法。

感谢题主loy_liu@UWA问答社区提供了回答

A2:如果是C#的死循环,可以使用VS附加Unity调试,暂停整个游戏,然后切换到主线程,看看主线程当前运行到了哪一句。

感谢西元前的史莱姆@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/60346be9cfa35d5b53669644


AssetBundle

Q:Unity AssetBundle单个包大小多少比较合适?

A1:以前LZMA格式时,是建议小于1MB的,现在已经没有这个约束了。因为LoadFromFile+LZ4的加载速度已经非常快了。所以,文件大小更建议从热更新的角度出发,尽可能不要给热更新产生大麻烦即可。

该问答由UWA提供

A2:楼上说得对,读取速度已经不是问题,不要太小也不用太大,个人觉得1-10MB间差不多都可以,我个人是以使用的聚集性把每个包控制在几MB左右。

感谢徐军@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/6038b8a2cfa35d5b536696df


Material

Q:我在原生的Sprite-default Shader中加入了Stencil的相关设置,在编辑器状态下用MaterialPropertyBlock修改Stencil的Comp和Ref,在Inspector面板中该值已经被修改,但是在Frame Debugger中并未生效修改值,还是未修改前的设置,是不能用MaterialPropertyBlock改Stencil的相关参数吗?

 

 

A:可参考以下信息:

 

感谢羽飞@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/6035aee1cfa35d5b53669665


Rendering

Q:线性空间中动作文件控制材质球颜色失真问题。
以下是直接设置材质球的颜色显示:

以下是通过Animator动作文件设置材质球的颜色显示:

为什么不同呢?材质球是[HDR] Color有问题。(版本:Unity 2019.4.9f)

A:在线性空间中,写入到MaterialPropertyBlock的渲染颜色参数,在渲染时会转换到Gamma空间,即变成2.2次幂。

用动画修改材质的颜色,其实是向MaterialPropertyBlock中配置参数。所以在使用K材质球设计动画时,需要把颜色值的0.4545次幂写入到曲线中。

感谢张首峰@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/60336db2cfa35d5b53669632


Rendering

Q:Unity 2018.4.24的DrawMeshInstancedIndirect在华为手机上失效是为什么?我使用Testin的华为手机进行测试DrawMeshInstancedIndirect接口,试过的都是不行的,但是我用其他的手机就都可以。有遇到同样问题吗?

A1:贴上详细日志看看,然后把华为手机的设备信息贴上,最后问下是不是带麒麟CPU的华为机。

感谢Robot.Huang@UWA问答社区提供了回答

A2:由于驱动程序问题,对于仅具有OpenGL ES 3.0的Adreno GPU的Android设备禁用了GPU实例支持。

Graphics: GPU Instancing: Added support for Android with OpenGL ES 3.0 or newer. Note however that GPU instancing support is disabled for Android devices that have the Adreno GPU with only OpenGL ES 3.0, because of driver issues.

可以使用SystemInfo.supportsInstancing检测机器是否支持GPU Instancing,最保险的方式就是OpenGL ES 3.1及以上支持。

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

A3:最后发现是华为Mali不支持SSBO的原因。

感谢题主halm@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/60338a6bcfa35d5b53669636

封面图来源于网络


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何定位Unity死循环导致的完全卡死 的相关文章

  • Flutter(Dart):渲染引起的异常/RenderFlex溢出

    我遇到 Flutter Dart RenderFlex 像素溢出问题 渲染库的一个例外 如何管理或应用滚动功能到我的应用程序页面视图 并避免 Flutter 的渲染异常 并显示以下消息 RenderFlex 底部溢出了 28 个像素 如果您
  • 什么决定浏览器是否打开或下载 .txt 文件?

    首先我要说的是 我知道您可以在标头中指定内容处置并使用 附件 或 内联 这个问题是NOT关于这一点 至少不是直接 我有一个扩展名为 txt 的文件 我注意到不同的浏览器行为取决于该 txt 文件的内容 如果我的文件包含字母数字字符 并且我将
  • 行进立方体问题

    我目前正在编写一个程序来使用 C 和 Opengl 实现 Marching Cube 然而 我最好的参考仅来自http local wasp uwa edu au pbourke geometry polygonise http local
  • Skia 或 Direct2D 如何使用 GPU 渲染线条或多边形?

    这是一道了解2d矢量图形GPU加速渲染原理的题 使用 Skia 或 Direct2D 您可以绘制例如圆角矩形 贝塞尔曲线 多边形 还有模糊等效果 Skia Direct2D 提供基于 CPU 和 GPU 的渲染 For the CPU渲染
  • (React 和 Django)在主页上显示产品工作正常,但是当我单击任何特定产品时,呈现错误

    这篇文章是以下系列的第三部分 您可以跳过前两部分 但是 它可以作为参考 React Django Django REST 和 Axios 的大量问题 https stackoverflow com questions 66239527 a
  • CSS“clip”的 Safari 渲染错误

    我在使用 Safari 时遇到以下问题 http cl ly ZlJ8 http cl ly ZlJ8 现场演示 http drpdev de labs example html http drpdev de labs example ht
  • Unity 3D:资源包与资源文件夹与 www.Texture

    因此 我在论坛上阅读了一些有关 Unity 3D 中的 AssetBundles 和 Resources 文件夹的内容 但我无法找出我所面临问题的最佳解决方案 问题是这样的 我有一个专为独立设计的程序 可以加载充满 png 和 jpg 图像
  • 在车把的助手中渲染模板

    因为这个问题似乎没有答案 通过车把部分传递变量 https stackoverflow com questions 11523331 passing variables through handlebars partial然而 我目前正在研
  • 在 Node.js 中使用“网页”Phantom 模块

    我正在尝试将 PhantomJS 脚本包装在 node js 进程中 phantom 脚本从命令行提供的参数中获取 url 并输出 pdf 与 pahntom 安装中包含的 rasterize js 示例非常相似 我的幻像脚本工作正常 只是
  • Minecraft 如何进行光照? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我唯一熟悉的模型是漫射照明 但这看起来比那要复杂得多 每个方块的亮度级别从 15 到 0 每个级别都比其上方的级别低 20 如果一个正
  • Xvfb 多显示器并行处理?

    对运行多个 xvfb 显示器感到好奇 我有 10 50 个并行运行的脚本实例连接到 xvfb 显示器 运行相同数量的 xvfb 显示器并 1 对 1 连接是否有利 或者多个进程可以共享同一个显示吗 RAM 不是问题 处理能力也不是问题 一台
  • Box2D:如何手动渲染身体

    我成功地将 Box2D 安装到我的项目中 但我怎样才能渲染身体呢 假设我正在使用支持绘制多边形的东西 我只想找出主体多边形顶点的当前位置 以便用引擎绘制它 如果你能帮助我 我将非常感激 我找到了 void Box2DUtils DrawBo
  • 如何使用 django 仅渲染 html 的一部分和数据

    我正在使用 ajax 对来自搜索结果的数据进行排序 现在我想知道是否可以只渲染 html 的一部分 以便我可以这样加载 result html nbsp load sort sortid sortid 我正在这样做 但我得到了整个 html
  • 如何使用 Swift scenekit 在 IOS 上绘制摄像头视频作为背景?

    我正在尝试在 ios 上使用 swift 和 scenekit 开发一个增强现实应用程序 有没有办法将设备摄像头拍摄的视频绘制为场景背景 这对我有用 I used AVFoundation捕获设备摄像头的视频输入 let captureSe
  • 自定义绘制控件的糟糕性能

    我正在做简单的图形控制wpf 我无法解释也无法解决性能问题 与 winform 相比 它太慢了 也许我做错了什么 我准备了demo来演示这个问题 这是测试控制 public class Graph FrameworkElement priv
  • JavaFX 偶发渲染问题 - 按钮/控件消失

    我有一个 Java JavaFX 应用程序部署为 Windows 和 Mac 的本机安装 目前捆绑的运行时间为 8 121 您可以在此处找到安装程序和 Java 代码 乔治下载 http www george andante no down
  • Chrome SVG 网络字体在选择输入中出现奇怪的字符

    Windows 8 上的 Chrome 26 0 1410 64m 在渲染 WebFonts 时出现问题 这是一个已知问题 解决方案是首先提供字体的 svg 版本而不是 woff 版本 它修复了抗锯齿并使字体看起来再次漂亮 此方法的缺点是选
  • 在 Node 中渲染 HTML 字符串?

    好吧 我已经下载了 Express 设置端口process env PORT 8080 并设置应用程序变量var app express 现在 我想要完成的是不是通过文件渲染 HTML 我可以通过字符串来完成吗 var html n n n
  • Swing 主动渲染效率或如何将主动渲染与 GUI 小部件结合起来

    继续从上一个问题 https stackoverflow com questions 3256269 jtextfields on top of active drawing on jpanel threading problems 我一直
  • 在无头模式下独立运行 Unity,同时捕获屏幕截图

    我需要创建一个在无头模式下运行的统一项目 使用 batchmode 命令 但它必须捕获屏幕截图 例如每一秒并将它们写到一个文件中 我知道在无头模式下 您需要强制调用 Camera Render 才能渲染任何内容 在捕获第一个屏幕截图后 时间

随机推荐

  • UCGUI做汉字显示

    1 弄个包含中文的字体 在这里我借用大多数例子里的 C windows Font simhei ttf 文件 把这个文件拷贝到Datafiles文件夹的Font文件夹里 2 随便照着一个 Font文件 自己写一个simhei font文件
  • java/poi 调整Excel 列宽支持自适应中文字符宽度

    apache poi是apache旗下用于读写Microsoft Office 二进制文件和OOXML 格式文件的开源库 用它来进行excel文件的导出是很趁手的 一般来说可以直接使用 Sheet autoSizeColumn方法自动调整每
  • DGA深度学习相关论文

    一 基于 word hashing 的 DGA 僵尸网络深度检测模型 2017 主要贡献 基于word hashing 将所有 域名转用二元语法字符串表示 利用词袋模型把域名映射到高维向量空间 然后利用5 层深度神 经网络对转换为高维向量的
  • OV9281+RK3399Pro 双摄像头移植

    软件环境 Kernel版本 4 4 194 SDK版本 v1 4 2 Rootfs ubuntu18 04 编译环境 ubuntu1804LTS64位 硬件环境 CPU型号 RK3399Pro 双摄像头 OV9281模组 OV9281模组
  • du命令详解

    du命令介绍 du命令 disk usage 用来展示磁盘使用量的统计信息 du和df算是一对同门师兄弟 du侧重在文件夹和文件的磁盘占用方面 而df侧重在文件系统级别的磁盘占用方面 这两个命令都非常的基础 也是每位 Linux工程师都应该
  • 演讲者模式投影到幕布也看到备注_ppt备注怎么用在放映时怎么可以不在投影仪上显示...

    ppt备注怎么用在放映时怎么可以不在投影仪上显示 时间 2013 08 30 作者 snow 来源 互联网 我们在做投影展示的时候 会将电脑的内容给完全的显示到投影机上面 而如果你设置了备注页的话 那么你编写的备注里面的内容就只能自己 演示
  • 使用JConsole远程监控elasticsearch

    ES虽然有Bigdesk插件进行监控 但是JVM调优的时候 还是习惯了用JConsole监控 ES的JVM参数 可以在elasticsearch servicewrapper插件的elasticsearch conf配置文件里很方便的设置
  • double和int区别

    double所占存储空间更大 8字节 所以能表示的值的范围更大 int 四个字节 表示的范围是 int带符号 整数 1的原码为 0000 0000 0000 0000 0000 0000 0000 0001 2147483647原码为 01
  • Chrome插件:浏览器后台与页面间通信

    content js 与 background js和popup js 通信和 background js与popup js 这些通信都用 chrome runtime sendMessage 这个方法 background js和popu
  • 发送时延和传播时延计算

    一 时延计算公式 发送时延 传输时延 数据块长度 比特 带宽 带宽或发送速率或数据传输速率 比特 每秒 传播时延 距离 米 信号转播速率 米 每秒 二 换算公式 1kb 103bit 1Mb 106bit 1Gb 109bit 1s 106
  • Tomcat常见报错

    eclipse启动服务器部署项目之后 中间修改了一部分代码 导致eclipse卡死了 毫无反应 无奈之下 只好通过任务管理器关闭eclipse 但是重新打开之后 报错无法启动Tomcat 大致报错如下 Several ports 8005
  • AutoGPT 全功能API 接入指南 (云记忆、联网、语音朗读、图像生成)

    ChatGPT狂飙160天 世界已经不是之前的样子 新建了人工智能中文站https ai weoknow com 每天给大家更新可用的国内可用chatGPT资源 一 核心OpenAI API key 必备 点击 Create new sec
  • (二)移动端 Web 开发进阶

    文章目录 一 移动端事件 1 事件 2 移动端事件 1 touch 事件 2 touch 事件的 event 对象 3 其他触摸事件 二 移动端常见问题 1 浏览器兼容性 1 HTML5
  • 机械革命极光pro的win11进行更新后,双系统ubuntu开机选择界面消失的解决方法

    笔者为了学习 按照网上教程安装好了linux内核的第二操作系统ubuntu 一开始开机能够正常进入ubuntu双系统引导界面 但在一次进入windows之后 重启就无法进入ubuntu双系统选择界面了 如果使用ubuntu安装盘 在bios
  • JRE的下载安装

    一 JRE的下载地址 Java Downloads Oracle 二 选择要下载的版本 三 第一次登录需要注册 四 注册并下载 五 按流程安装 双击打开安装包 更改安装位置 建议把C盘改成D盘 选择下一步 等待安装完成 六 配置JRE的环境
  • Spyder可在线使用!?

    不同安装 如果想使用spyder进行编程 可以用其在线版 和本地版功能一样 就是有点慢 另外需要用chrome浏览器 用火狐没法正常访问 Spyder可以在线使用 所以在没有安装python环境的电脑上 想编写python代码 可以尝一下这
  • npm和yarn安装与更换国内源地址

    安装 https classic yarnpkg com en docs install windows stable 查询与更换源 yarn config get registry 国内淘宝源 yarn config set regist
  • mongoDB如何复制collection里的数据到另一个collection方法总结

    mongoDB的可以直接复制数据库 但是对于数据库里的表却没有直接的复制语句 在项目中遇到数据放错collection了情况就很棘手 现在将方法总结如下 1 利用foreach方法在shell里直接运行 db test 复制源表 find
  • 【每日一题】跳跃游戏 (来源leetcode 55)

    给定一个非负整数数组 nums 你最初位于数组的 第一个下标 数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标 示例 1 输入 nums 2 3 1 1 4 输出 true 解释 可以先跳 1 步 从下标 0
  • 如何定位Unity死循环导致的完全卡死

    1 如何定位Unity死循环导致的完全卡死 2 如何设定Unity AssetBundle单个包大小 3 MaterialPropertyBlock修改Stencil相关参数 4 线性空间中动作文件控制材质球颜色失真问题 5 DrawMes