关于SDK for Unity中蒙版的使用上限

最終更新: 2023年5月25日

概述

默认情况下,在Cubism SDK for Unity中所有显示的模型共享一个蒙版纹理。
因此,即使每个模型没有超过蒙版的使用上限数量,如果在屏幕上置入多个模型,也会达到蒙版纹理的使用上限数量,并且剪切显示可能会损坏。

有三种方法可以避免这种情况,每种方法都有不同的特点。

  1. 为每个模型设置蒙版纹理
  2. 变更注册/删除分配给蒙版纹理的时间
  3. 增加蒙版纹理内的纹理数量

关于Unity中蒙版纹理的特点,请参见“各Cubism SDK的比较”。

为每个模型设置蒙版纹理

采用这种方法,通过为每个模型准备蒙版纹理,可以在不受其他置入的模型影响的情况下显示剪贴。

但是,由于将准备多个蒙版纹理,因此请注意性能可能会受到相应影响。

按照以下步骤为每个模型设置蒙版纹理。

  1. 创建专用的蒙版纹理
  2. 将创建的蒙版纹理设置为附加到模型预制件的CubismMaskController的Mask Texture

创建专用的蒙版纹理

创建模型专用的蒙版纹理的副本。

创建方法有多种。
请通过以下方法之一进行创建。

  • 复制Cubism SDK for Unity附带的GlobalMaskTexture
  • 生成CubismMaskTexture类的副本
  • 使用载入模型时生成的内容

复制Cubism SDK for Unity附带的GlobalMaskTexture

模型共享的蒙版纹理可以在SDK载入项目的以下位置找到。

/Assets/Live2D/Cubism/Rendering/Resources/Live2D/Cubism/GlobalMaskTexture

请选择并按Ctrl + D进行它。

生成CubismMaskTexture类的副本

Cubism SDK for Unity附带一个Editor扩展,可创建CubismMaskTexture类的副本。
如需生成,请右键单击Unity的Project视窗、或通过+按钮单击[Create] > [Live2D Cubism] > [Mask Texture]

使用载入模型时生成的内容

在Cubism 4 SDK for Unity R7或更高版本中,载入模型时,会在与.model3.json相同的位置生成专用的蒙版纹理。

将创建的蒙版纹理设置为附加到模型预制件的CubismMaskController的Mask Texture

选择模型预制件并将蒙版纹理拖放到Inspector视窗中的Mask Texture。

变更注册/删除参考给蒙版纹理的时间

当画面上显示的模型数量较少,且即使蒙版总数未达到上限但显示损坏时,请使用此方法。

在Cubism SDK for Unity中,当在场景中生成模型预制件时,会注册自己对蒙版纹理的参考,蒙版纹理会使用从注册模型获得的信息来生成蒙版。
删除该蒙版纹理中注册的参考的时间就是删除该模型的时间。

因此,即使模型被隐藏,参考仍保留在蒙版纹理中。
即使画面上显示的模型数量很少,如果存在多个隐藏模型,则可能会超出蒙版使用上限,并且显示可能会损坏。

此方法会在显示/隐藏时变更模型对蒙版纹理注册/删除参考的时机。
与其他增加纹理数量的方法相比,该方法负载最小。

但如果显示模型的蒙版总数已达到上限,则无法处理。
在这种情况下,请尝试其他方法。

对蒙版纹理注册/删除参考时,需要重写CubismMaskController的Event函数。

  1. 重写注册参考处理的Event函数
  2. 重写删除参考处理的Event函数

重写注册参考处理的Event函数

CubismMaskController类的Start()重写为OnEnable()

        private void OnEnable()
        {
            // Fail silently.
            if (MaskTexture == null)
            {
                return;
            }
            MaskTexture.AddSource(this);
            // Get cubism update controller.
            HasUpdateController = (GetComponent<CubismUpdateController>() != null);
        }

重写删除参考处理的Event函数

CubismMaskController类的OnDestroy()重写为OnDisable()

        private void OnDisable()
        {
            if (MaskTexture == null)
            {
                return;
            }
            MaskTexture.RemoveSource(this);
        }

增加蒙版纹理内的纹理数量

在Cubism SDK for Unity R7或更高版本中,您可以任意增加蒙版纹理内部保存的纹理数量。
由于可以在规格允许的范围内增加,因此即使一个模型超过了可以使用的蒙版数量上限,剪贴也可以正常显示。
该方法也可以与上述其他两种方法结合使用。

要增加蒙版纹理保存的纹理数量,请选择蒙版纹理并将Inspector中的RenderTextureCount值设置为任意数字。
如果该值设置为0,则像以前一样在内部保留一个蒙版纹理。

请问这篇文章对您有帮助吗?
关于本报道,敬请提出您的意见及要求。