关于SDK for Unity中蒙版的使用上限
最終更新: 2023年5月25日
概述
默认情况下,在Cubism SDK for Unity中所有显示的模型共享一个蒙版纹理。
因此,即使每个模型没有超过蒙版的使用上限数量,如果在屏幕上置入多个模型,也会达到蒙版纹理的使用上限数量,并且剪切显示可能会损坏。
有三种方法可以避免这种情况,每种方法都有不同的特点。
- 为每个模型设置蒙版纹理
- 变更注册/删除分配给蒙版纹理的时间
- 增加蒙版纹理内的纹理数量
关于Unity中蒙版纹理的特点,请参见“各Cubism SDK的比较”。
为每个模型设置蒙版纹理
采用这种方法,通过为每个模型准备蒙版纹理,可以在不受其他置入的模型影响的情况下显示剪贴。
但是,由于将准备多个蒙版纹理,因此请注意性能可能会受到相应影响。
按照以下步骤为每个模型设置蒙版纹理。
- 创建专用的蒙版纹理
- 将创建的蒙版纹理设置为附加到模型预制件的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函数。
- 重写注册参考处理的Event函数
- 重写删除参考处理的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,则像以前一样在内部保留一个蒙版纹理。