Unity Live2D Mask功能失效的解决

原因

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

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

解决

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

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


            MaskTexture.AddSource(this);

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

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


            MaskTexture.RemoveSource(this);
        }

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

        /// <summary>
        /// Remove source of masks
        /// </summary>
        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变量为全局存在,切场景的时候,不进行释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值