内存访问超出限制-WebGL

时间:2020-03-12 14:13:53

标签: unity3d

当我尝试加载我的网络游戏时,我得到了这个错误: enter image description here

我的游戏已在以下域加载: Highest Flavor Website Link

这是构建导出时我的项目设置: enter image description here

请给我一些解决这个问题的建议。

3 个答案:

答案 0 :(得分:1)

我终于在我的项目中修复了同样的错误。这是我所做的:

  1. 缩小导致 WebGL 崩溃的代码行。 完成查明代码行的痛苦过程 是错误的根源。我有这个“运气”发生错误 当我点击按钮并尝试在添加模式下加载 UIScene 时。所以 起初我在场景中找到了禁用时摆脱的脚本 坠机事件。然后我重复了这些步骤并深入研究 线。经过 2 小时的构建、评论等,我发现代码 不工作是为 UnityEngine.UI.Image 设置新颜色。 这很奇怪,因为在游戏模式下一切正常。

  2. 寻找解决方案。我认为我的解决方案可能不是通用的,但我认为在运行 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();
    }
  1. 修复 - 所以我在字段中添加了 [SerializeField] 属性并在编辑器中设置,将图像拖入检查器插槽。它修复了它。我怀疑 WebGL 构建可能会以不同的顺序执行某些方法,或者加载在一起的 multipleScene 可能与它有关。我不确定,但该字段未使用以前的 WebGL 构建代码正确设置。

奖励: 我还修复了一些不重要的问题(不破坏 WebGL 游戏),但在游戏模式中没有按预期正常工作。这也与尝试在 Start() 方法中设置一些对象然后对它们做一些事情有关。该集合未在 WebGL 中设置(可能为空)。

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] 添加到 effects 并将其连接到场景中时,这也开始起作用了...

希望这会帮助你们中的一些人!

答案 1 :(得分:0)

由于使用了dynamic关键字,此错误发生在我身上。将我所有的dynamic类型替换为object后,错误消失了。显然,WebGL构建不支持dynamic关键字。

答案 2 :(得分:-1)

要在网络浏览器中运行此版本-我已删除了所有无法在网络版本中使用的与代码相关的东西,例如应用内购买,广告,页首横幅,本机共享等...

从项目中删除了这些代码之后,我将导出的构建内容上载到了主机中。然后,它开始正常工作。