Unity Live2D Mask功能失效的解决

原因

在 Unity 中使用 Live2D 来进行动态角色的显示,遇到过当游戏进行一段时间后,角色的眼球随机消失不显示。查看眼球节点,可以看到其使用的是Mask遮罩
Unity Live2D Mask功能失效的解决_第1张图片
猜测应该是遮罩功能失效,查找到官方手册 https://docs.live2d.com/cubism-sdk-manual/unitysdk-nativesdk-compare/?locale=ja

Mask是进行共用的,当达到上限时,那么后面的遮罩功能就会失效。

解决

界面上同时显示的 Live2D 角色不会那么多,查看代码是 CubismMaskController 仅在 OnDestroy 的时候才从 Mask 里进行移除,导致了不够用。那么这里将 CubismMaskController 文件的代码函数 Start 和 OnDestroy 改成 OnEnable 和 OnDisable,仅在激活的时候,放到 Mask 里面。

        /// 
        /// Initializes instance.
        /// 
        private void OnEnable()
        {
            // Fail silently.
            if (MaskTexture == null)
            {
                return;
            }


            MaskTexture.AddSource(this);

            // Get cubism update controller.
            _hasUpdateController = (GetComponent<CubismUpdateController>() != null);
        }

        /// 
        /// Finalizes instance.
        /// 
        private void OnDisable()
        {
            if (MaskTexture == null)
            {
                return;
            }


            MaskTexture.RemoveSource(this);
        }

另外,在 CubismMaskTexture 里面,不需要当不显示 Live2D 角色的时候,就把贴图给释放了,在 RemoveSource 函数里面,注释掉 ReleaseRenderTexture();

        /// 
        /// Remove source of masks
        /// 
        public void RemoveSource(ICubismMaskTextureCommandSource source)
        {
            // Return early if empty.
            if (!ContainsSources)
            {
                return;
            }


            var itemIndex = Sources.FindIndex(i => i.Source == source);


            // Return if source is invalid.
            if (itemIndex == -1)
            {
                return;
            }


            // Return tiles and deregister source.
            TilePool.ReturnTiles(Sources[itemIndex].Tiles);
            Sources.RemoveAt(itemIndex);

            // releaseRT
            if (Sources.Count == 0)
            {
                //ReleaseRenderTexture();
            }
        }

以及CubismMaskTexture GlobalMaskTexture变量为全局存在,切场景的时候,不进行释放。

你可能感兴趣的:(3.3,Unity)