当前位置: 首页 > article >正文

[Unity] ShaderGraph动态修改Keyword Enum,实现不同效果一键切换

上次更新已然四个月前,零零散散的工作结束,终于有时间写点东西记录一下~  


实际使用中,经常会碰到同一个对象需要切换不同的材质,固然可以通过C#直接替换材质球。

或者在ShaderGraph中使用Comparison配合Branch实现切换,如下简单演示。

不过最近还发现了另一种实现方法,即是Keyword Enum,官方示释意如下。

如何创建?

使用方法也很简单,如下所示创建一个Enum。 

这里只做最简单的颜色切换演示,实际只要把不同效果的终端链接给对应的enum项即可。 

* 注意EntryName最好对应修改,后续会用到。

切换效果如下,不知道为什么OBS录不出下拉框,大家明白就好

如何使用?

除了以上手动切换,如果需要动态控制转变,则需要通过 Material.EnableKeyword()Material.DisableKeyword() 来启用或禁用 Shader 中的关键字,从而控制 Enum 的效果。

using UnityEngine;

public class KeywordEnum : MonoBehaviour
{
    public enum EnumTest
    {
        red,
        blue,
        green
    }

    public EnumTest enumTest;
    public Material material;

    void Update()
    {
        // 禁用所有相关关键字,避免叠加
        material.DisableKeyword("_ENUMCOLOR_RED");
        material.DisableKeyword("_ENUMCOLOR_BLUE");
        material.DisableKeyword("_ENUMCOLOR_GREEN");

        switch (enumTest)
        {
            //应用对应效果
            case EnumTest.red:
                material.EnableKeyword("_ENUMCOLOR_RED");
                break;
            case EnumTest.blue:
                material.EnableKeyword("_ENUMCOLOR_BLUE");
                break;
            case EnumTest.green:
                material.EnableKeyword("_ENUMCOLOR_GREEN");
                break;
        }
    }
}

其中"_ENUMCOLOR_RED"这个名字取自  _枚举名_枚举变量名  。

如果不清楚的话,可以切换至Debug模式进行复制。

* 注意代码中DisableKeyword()一定要有,不然就会出现效果叠加而不显示。


最终效果和手动切换也没差,就不录演示了。

通过这种方式就可以用 Enum 来控制 Shader 中的多个效果,灵活地根据游戏状态或其他条件切换不同的渲染效果。


http://www.kler.cn/a/451685.html

相关文章:

  • 【批量生成WORD和PDF文件】根据表格内容和模板文件批量创建word文件,一次性生成多个word文档和批量创建PDF文件
  • Springboot + vue3 实现大文件上传方案:秒传、断点续传、分片上传、前端异步上传
  • 本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——12使用YOLO-Bin
  • 保护模式基本概念
  • 模型的多GPU并行训练,DDP
  • 【项目实战】NGINX 实现会话保持
  • PaddlePaddle飞桨Linux系统Docker版安装
  • js的eval
  • Chromium GN 目标指南 - view_examples 自定义Button示例 (六)
  • 【es6复习笔记】let 和 const 命令(1)
  • Django models中的增删改查与MySQL SQL的对应关系
  • leetcode hot100 环形链表2
  • 深度学习环境安装
  • 内网穿透玩法之京东云亚瑟路由器刷神卓互联教程
  • 树莓集团:以产教融合助力人才培养
  • yii2 手动添加 phpoffice\phpexcel
  • 开放世界目标检测 Grounding DINO
  • 机器人C++开源库The Robotics Library (RL)使用手册(一)
  • CentOS7下的vsftpd服务器和客户端
  • 基于推理的目标检测 DetGPT
  • Python选择题训练工具:高效学习、答题回顾与音频朗读一站式体验
  • 如何将excel表格内的日期自动更新为当天,一个公式就OK了
  • Docker服务发现新纪元:探索Consul的无限魅力
  • Flink SQL Cookbook on Zeppelin 部署使用
  • 赛灵思ZYNQ系列的启动过程分析
  • AIA - IMSIC之二(附IMSIC处理流程图)