首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Unity在运行时设置材质的渲染模式

在Unity中,有些少数情况下我们需要用代码来创建材质。比如说在材质非常多,而仅仅是纹理不一样的时候。

而用代码创建的材质是没有对应的资源文件的,我们也就无法使用Inspector来设置它的Rendering Mode。

关于Rendering Mode,我稍作介绍:

材质(Material)的属性检视面板(Inspector)里的第一项为渲染模式(RenderingMode)。

渲染模式总共有四种:

有时候我们需要在程序代码(Script)中设置材质的渲染模式,这时候我们该怎么做呢?这时候可以通过添加以下代码来实现。

public enum RenderingMode

{

Opaque,

Cutout,

Fade,

Transparent,

}

public static void SetMaterialRenderingMode(Material material, RenderingMode renderingMode)

{

switch (renderingMode)

{

case RenderingMode.Opaque:

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;

break;

case RenderingMode.Cutout:

material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);

material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);

material.SetInt("_ZWrite", 1);

material.EnableKeyword("_ALPHATEST_ON");

material.DisableKeyword("_ALPHABLEND_ON");

material.DisableKeyword("_ALPHAPREMULTIPLY_ON");

material.renderQueue = 2450;

break;

case RenderingMode.Fade:

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 = 3000;

break;

case RenderingMode.Transparent:

material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);

material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);

material.SetInt("_ZWrite", 0);

material.DisableKeyword("_ALPHATEST_ON");

material.DisableKeyword("_ALPHABLEND_ON");

material.EnableKeyword("_ALPHAPREMULTIPLY_ON");

material.renderQueue = 3000;

break;

}

}

使用方法:

void Start()

{

// 设置材质的颜色为半透明的颜色才能看到效果,如果材质有贴图,那么贴图也必须是半透明的

GetComponent().material.color = new Color(1, 0, 0, 0.5f);

SetMaterialRenderingMode(GetComponent().material, RenderingMode.Transparent);

}

注意:测试前先在目标物体后放置一个其他物体,如果未添加代码前不可以看到后面物体,而添加之后可以了,那么就表示此代码设置RenderingMode成功。

成功和不成功的结果是这样的:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191020A0JG6400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券