自定义材料
最終更新: 2017年9月19日
by Traitam
全体概述
将说明如何在Unity上使用Cubism模型。
之后,使用模型载入功能在实际示例中自定义材料。
直到Cubism模型在Unity上可用
以下是Cubism模型如何在Unity Editor上显示的说明。
概述
在Unity Editor上,通常使用名为Live2D/Cubism/Materials/Unlit*.mat的材料进行显示。
材料应用于模型的时间是模型载入的时间。
细节
在Unity上显示Cubism模型时,我们通常使用Live2D/Cubism/Materials/Unlit*.mat材料。
这使得显示类似于Cubism Editor上的显示。
材料应用于Cubism模型的时间是模型载入Unity Editor的时间。
因此,在将模型拖放到Unity Editor中时,会应用显示所需的材料。
当Cubism模型载入Unity时,会调用CubismImporter.cs中的OnPickMaterial。
这里使用了一个委托,并使用了CubismBuiltinPickers.MaterialPicker。
在此方法中,材料应用于Cubism模型的各Drawable。
之后,它将被预制并可以在UnityEditor上自由处理。
如果您想从脚本自定义材料,OnPickMaterial是一个委托,因此您可以通过创建单独的方法,并将该方法应用于OnPickMaterial来自定义材料。
下面作为实例,从脚本中自定义指定Drawable的材料,使其显示出来。
实例:自定义指定Drawable的材料
在从脚本载入模型时更改指定Drawable的材质。
概述
创建您要指定的材料,并参考指定Drawable的名称。
如果指定Drawable,则使用指定材料,否则不进行自定义,而使用通常材料。
编写一个执行上述处理的方法,并将其分配给OnPickMaterial。
细节
Unity Editor上指定的Drawable名称指定可以在Cubism Editor上确认的图形网格的ID。
Unity Editor的Drawable名称与可以在Cubism Editor中确认的图形网格ID相关联,因此在Unity Editor上无法变更。
如果要变更Drawable名称,您需要在Cubism Editor上变更ID名称。
这次将变更整个头发的颜色,所以使用头发的Drawable。
当您将材料应用于头发的Drawable时,将应用自定义材料。
接下来,在Unity Editor上创建一个Material文件夹,并创建一个新材料。
我们称这种材料为CustomMaterial。将此材质的着色器变更为Sprites/Default。
这里我们将Tint颜色变更为红色。
最后,创建一个Editor文件夹,并在该文件夹中创建一个新的C#脚本。
我们在这里将其称为MaterialCustomizer。
在脚本中,参考指定的Drawable,如果是同名的Drawable,则应用之前创建的材料。
对于其他Drawable,使用通常材质(Live2D/Cubism/Materials/Unlit*.mat)。
下面的代码包含该功能。
using UnityEditor; using UnityEngine; using Live2D.Cubism.Core; using Live2D.Cubism.Framework.Json; using Live2D.Cubism.Editor.Importers; using System.Linq; namespace TraitamTutorials { /// <summary> /// Customizes materials of Cubism models from code. /// </summary> public static class MaterialCustomizer { /// <summary> /// IDs of drawables to customize. /// </summary> private static string[] _drawablesToCustomize = { "D_PSD_01" ,"D_PSD_02" ,"D_PSD_03" ,"D_PSD_04" ,"D_PSD_05" ,"D_PSD_68" ,"D_PSD_69" ,"D_PSD_70" ,"D_PSD_71"}; /// <summary> /// Custom material to assign. /// </summary> private static Material _customMaterial; /// <summary> /// Make custom material available. /// And select <see cref="Material"/> as custom material or model default material. /// </summary> [InitializeOnLoadMethod] private static void RegisterMaterialInitialize() { _customMaterial = AssetDatabase.LoadAssetAtPath<Material>("Assets/TraitamTutorials/Materials/CustomMaterial.mat"); CubismImporter.OnPickMaterial = CustomizeMaterial; } /// <summary> /// When <see cref="CubismDrawable.name"/> and <see cref="_drawablesToCustomize"/> the same, use custom material. /// Otherwise, use model default material. /// </summary> /// <param name="sender">Event source.</param> /// <param name="drawable">Drawable to pick for.</param> /// <returns><see cref="Material"/> for using the model.</returns> private static Material CustomizeMaterial(CubismModel3Json sender, CubismDrawable drawable) { //use custom material. if (_drawablesToCustomize.Any(n => n == drawable.Id)) { return _customMaterial; } //use default material. return CubismBuiltinPickers.MaterialPicker(sender, drawable); } } }
现在可以在载入模型时自定义指定Drawable的材料。