unity3d - 内存访问越界 - WebGL
解决方案
我终于在我的项目中修复了同样的错误。这是我所做的:
缩小导致 WebGL 崩溃的代码行。 经历确定错误源代码行的痛苦过程。当我按下按钮并尝试在加法模式下加载 UIScene 时,我有这种“运气”。所以起初我在场景中找到了禁用时摆脱崩溃的脚本。然后我重复了这些步骤并深入挖掘了线条。经过 2 小时的构建、评论等,我发现代码不起作用正在为 UnityEngine.UI.Image 设置新颜色。这很奇怪,因为在游戏模式下一切正常。
寻找解决方案。我认为我的解决方案可能不是通用的,但我认为在运行 WebGL 时 Unity 游戏循环/生命周期中会发生一些事情。问题的根源是我在 Start 方法中设置了存储 UI.Image 的字段,然后在某些函数中我尝试更改颜色。
财产没有暴露在检查员身上。public class ModuleUI : MonoBehaviour { Image qualityBG; void Start() { qualityBG = GetComponent<Image>(); } ...
那么下面的这一行是崩溃的原因
public void Set(Module module)
{
...
qualityBG.color = module.Quality.ToColor();
}
- 修复- 所以我已将[SerializeField]属性添加到该字段并在 editor 中设置它,将 Image 拖到检查器插槽中。它修复了它。我怀疑 WebGL 构建可能会以不同的顺序执行某些方法,或者可能一起加载的 multipleScene 可能与它有关。我不确定,但该字段未使用以前的 WebGL 构建代码正确设置。
奖励:我还修复了一些不重要的问题(不破坏 WebGL 游戏),但在游戏模式下无法正常工作。这也与尝试在 Start() 方法中设置一些对象然后对它们执行某些操作有关。该集合未在 WebGL 中设置(可能为 null)。
EffectUI[] effects;
Start()
{
effects = GetComponentsInChildren<EffectUI>();
}
void HideAllEffects()
{
if (effects != null)
for (int i = 0; i < effects.Length; ++i)
effects[i].gameObject.SetActive(false);
}
当我将 [SerializeField] 添加到效果并将其连接到场景中时,这也开始起作用了......
希望这会对你们中的一些人有所帮助!
推荐阅读
- reporting-services - 在 SSRS 中,预览上的日期时间参数与部署的报告不匹配
- node.js - 由于“错误:‘class v8::ObjectTemplate’没有名为‘SetAccessCheckCallbacks’的成员”,npm 安装失败
- heroku - 在 Heroku 中使用带有 HTTP2 支持的 actix-web
- ios - 我的位置没有显示在 MapKit 的地图上
- javascript - 如何从对象数组中提取特定数据并将其发布到 Firebase
- flutter - SimpleDialog Flutter 中的 Snackbar
- jenkins - 如何限制詹金斯的“存档工件”最大尺寸?
- c# - c#实体框架动态表
- virtualbox - Virtualbox - Tails - 无法打开磁盘映像文件
- c# - Task.FromResult 的代码如何使用
带功能