正片叠底色/屏幕色

最終更新: 2022年5月19日

说明如何使用正片叠底色和屏幕色在模型中混合颜色并进行绘制。
这里介绍的功能是SDK for Unity 4 R5 beta 1或更高版本的功能。

例如Cubism Editor 4.2或更早版本中创建的模型等,即使在模型中没有设置正片叠底色/屏幕色,也可以无需任何追加编码使用它。
关于SDK for Unity的详细规格和使用方法,请参考SDK手册中的“正片叠底色/屏幕色”。

作为前期准备,请参考“SDK载入”载入模型数据并置入预制件。

在默认状态下,设置为始终参考模型中预设的正片叠底色/屏幕色,如果模型中没有设置正片叠底色/屏幕色,则使用以下值。

  • 正片叠底色为(1.0、1.0、1.0、1.0)
  • 屏幕色为(0.0, 0.0, 0.0, 1.0)

在检查器上使用

启用以下标志,以允许从SDK端操作正片叠底色和屏幕色。

正片叠底色:

OverwriteFlagForModelMultiplyColors或OverwriteFlagForMultiplyColors

屏幕色:

OverwriteFlagForModelScreenColors或OverwriteFlagForScreenColors

OverwriteFlagForModelMultiplyColors和OverwriteFlagForModelScreenColors是决定是否可以从SDK端对所有Drawable操作正片叠底色和屏幕色的标志。
这些标志也可以在UnityEditor中,从附加到模型预制根物体的[CubismRenderController]的检查器进行操作。

OverwriteFlagForMultiplyColors和OverwriteFlagForScreenColors是决定每个Drawable是否可以从SDK端操作正片叠底色和屏幕色的标志。
它也可以从附加到模型的各Drawable物体的[CubismRenderer]检查器进行操作。

如果上面提到的[CubismRenderController]的正片叠底色/屏幕色标志被启用,则它们优先。

正片叠底色和屏幕色设置不仅可以从脚本控制,也可以从[CubismRenderer]检查器控制。

在脚本上使用

当您需要在应用程序上使用等在脚本中进行控制时,以下代码很有效。

在下面的代码中,所有Drawable物体的屏幕色都会在一定的时间段内一次性改变。

您可以创建一个内容重写如下的C#脚本,并将其附加到模型的预制根物体中使用。

using UnityEngine;
using Live2D.Cubism.Rendering;

public class BlendColorChange : MonoBehaviour
{
    CubismRenderController RenderController { get; set; }
    float[] _colorValues;
    float _time;

    void Start()
    {
        _colorValues = new float[3];
        _time = 0.0f;
        RenderController = GetComponent<CubismRenderController>();
        RenderController.OverwriteFlagForModelScreenColors = true;
    }

    void Update()
    {
        if (_time < 1.0f)
        {
            _time += Time.deltaTime;
            return;
        }

        for (int i = 0; i < _colorValues.Length; i++)
        {
           _colorValues[i] = Random.Range(0.0f, 1.0f);
        }
        
        var color = new Color(_colorValues[0], _colorValues[1], _colorValues[2], 1.0f);
    

        for (var i = 0; i < RenderController.Renderers.Length; i++)
        {
            RenderController.Renderers[i].ScreenColor = color;
        }

        _time = 0.0f;
    }
}

从模型端接收正片叠底色/屏幕色更新的通知

如果模型参数与正片叠底色/屏幕色变更相关联,则可以在模型动画等时从模型端变更正片叠底色/屏幕色,而不是从SDK端操作。

[CubismDynamicDrawableData]中实装了IsBlendColorDirty,这个属性可以接收此时正片叠底色和屏幕色的变更。

该属性在模型侧变更正片叠底色或屏幕色时为true,并且不判断是否变更正片叠底色或屏幕色。

详情请参考SDK手册中的“正片叠底色/屏幕色”。

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