Unity 代码动态勾选或取消材质球上的选项

标签: Unity3D、Material、Shader、Toggle 、Reflections 代码动态控制勾选或取消

通过本文你可以学到怎么用代码控制材质球Material(实则是Shader)上的Toggle状态

描述一下思路:
找到这个材质球对应的Shader→打开Shader源代码→根据关键字找到想修改的属性→使用Material.SetFloat这个API修改即可。

实际操作流程(假如我想动态修改Reflections 的状态,怎么做呢?)
Step1.找到Shader

如何找到Shander,请按图索骥

Step2. 进入Shader源码:

如何进入``Shader``源码

Step3. 获取属性值

通过搜索获取属性值

Step4. 代码动态控制(为便于观看效果,无脑代码走起!)
代码块:

using UnityEngine;
public class TestForShader : MonoBehaviour
{
    public Material tt;
    private bool ifActive = true;
    string[] msg = new string[] { "取消Toggle勾选!", "勾选Toggle!" };
    private void Start()
    {
        tt.SetFloat("_GlossyReflections", 0f);//为了便于观察,初始化为未勾选状态
    }
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            int index = ifActive ? 1 : 0;
            Debug.Log(msg[index]);
            tt.SetFloat("_GlossyReflections", index);
            ifActive = !ifActive;
        }
    }
}

Debug输出以及效果显示:

点击鼠标,Toggle开关切换

补充,有些则必须使用 EnableKeywordDisableKeyword方法处理,譬如 自发光 。

        private void SetEmission(Material mat, bool emissionOn)
        {
            if (emissionOn)
            {
                mat.EnableKeyword("_EMISSION");
            }
            else
            {
                mat.DisableKeyword("_EMISSION");
            }
        }

标签:Unity3D、脚本编程、Sharder初级编程、Material.SetFloat、_GlossyReflections


快捷访问:

  1. Unity3D 如何设置CubeMap
  2. UGUI Button OnClick事件统一管理
  3. UGUI Slider onValueChanged事件统一管理
  4. UGUI Toggle onValueChanged事件统一管理
  5. Unity3D监测按键输入(快捷键)的有效方法
  6. Unity3D Editor模式下的System.IO数据访问
  7. Unity3D 挂载的脚本取消勾选居然还会运行!!
  8. Unity 代码动态勾选或取消材质球上的选项 ←您在这里
  9. Unity SerializeField序列化字段导致Bug的跳坑笔记
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容