material 渲染模式现在默认设置为"不透明".
到目前为止,我做到了:
if (g.GetComponent<SkinnedMeshRenderer>() != null)
{
Material[] mats = g.GetComponent<SkinnedMeshRenderer>().materials;
}
material 位于索引0处只有一种material ,但我不确定如何访问material 的渲染模式以及如何将其更改为淡入淡出.
到目前为止我所做的try :
我创建了一个新的公共静态类:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public static class MaterialUtils
{
public enum BlendMode
{
Opaque,
Cutout,
Fade,
Transparent
}
public static void SetupBlendMode(Material material, BlendMode blendMode)
{
switch (blendMode)
{
case BlendMode.Transparent:
material.SetOverrideTag("RenderType", "Transparent");
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
material.SetInt("_ZWrite", 0);
material.DisableKeyword("_ALPHATEST_ON");
material.EnableKeyword("_ALPHABLEND_ON");
material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent;
material.SetFloat("_Mode", 3.0f);
break;
case BlendMode.Opaque:
material.SetOverrideTag("RenderType", "");
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
material.SetInt("_ZWrite", 1);
material.DisableKeyword("_ALPHATEST_ON");
material.DisableKeyword("_ALPHABLEND_ON");
material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = -1;
material.SetFloat("_Mode", 0.0f);
break;
default:
Debug.LogWarning("Warning: BlendMode: " + blendMode + " is not yet implemented!");
break;
}
}
}
然后返回编辑器脚本:
Inside OnGUI :
if (GUILayout.Button("Start"))
{
allChildren = new List<Transform>();
foreach (Transform g in transform.GetComponentsInChildren<Transform>())
{
var level = ObjectLevel(g);
names.Add(" Level " + level.ToString());
if (g.GetComponent<SkinnedMeshRenderer>() != null)
{
Material[] mats = g.GetComponent<SkinnedMeshRenderer>().sharedMaterials;
Material mat = mats[0];
MaterialUtils.SetupBlendMode(mat, isOpaque ? MaterialUtils.BlendMode.Fade : MaterialUtils.BlendMode.Fade);
mats[0] = mat;
allChildren.Add(g);
}
}
}
但我在编辑中得到警告:
警告:BlendMode:尚未实现淡入淡出!
在线:
MaterialUtils.SetupBlendMode(mat, isOpaque ? MaterialUtils.BlendMode.Fade : MaterialUtils.BlendMode.Opaque);
渲染模式仍然不透明.