正片叠底色/屏幕色
最終更新: 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手册中的“正片叠底色/屏幕色”。