Unity 3D 浅谈Shader 运行时状态及渲染模式遇到的问题

unity 中的 shader 有四种渲染模式,分别是:

——Opaque(不透明)——Cutout(镂空)——Fade(隐现)——Transparent(透明)

登录后复制

之前我遇到一个需求,需要给特定的游戏物体添加一个冰冻的效果,但是给我的 Shader
是一个完全冰冻的 Shader,而且无法通过参数调整它的颜色值。之后我的同事告诉我可
以通过修改渲染模式更改物体本身的Alpha值实现,所以第一步我寻找了网上关于修改运
行时 Shader 渲染模式的代码,如下。http://www.voidcn.com/article…

相关教程:C#视频教程

然后就是简单的代码操作,如下。

       //获取目标身上的渲染组件       var renderer = GetComponentsInChildren();       // 建立一个冰冻数组 第二个数组元素是事先找好的冰冻特效       Material[] frostMatetials = new Material[2] { renderer.material,        frostEffect };       //添加冰冻特效到人物身上的数组中       renderer.materials = frostMatetials;       //实例化一个渲染模式变量       var fadeMode = SetMaterialRenderingMode.RenderingMode.Fade;       //根据网上的方法更改你的 Shader 渲染模式为 Fade                 SetMaterialRenderingMode.SetMaterialRenderingModeMethod(      renderer.materials[0],fadeMode);

登录后复制

由于 Color 的 Alpha 值是只读的不能修改,但是 Color 是可以修改的,所以要获取目标
物体 Color 的 RGB 值,然后实例一个 Color 用构造函数更改为你想要的 Alpha 值。如下:

       Color currentcolor03 = new Color        {            a = 0.8f,            r = renderer.materials[0].color.r,            g = renderer.materials[0].color.g,            b = renderer.materials[0].color.b        };        //替换目标 Color 属性就可以实现了

登录后复制

其实这个方法不是很好,主要是因为所给的 Shader 不能修改属性值,后来我拿到了可以更改
属性值的Shader,事情就变得简单了许多。

111.png

这是我拿到的材料,可以通过材料找到材料中包含的 Shader,里面可以看到每个值所对应的参数。

222.png

这样的话修改就只需要通过调用方法 Material.SetFloat(); 及其类似方法,括号里面是两个
参数一个是 String 类型的参数,表示通过 String 获取想要改变的参数,第二个是更改的值。

这期间我遇到一个问题,最后找了很久发现是编译器的问题,我在用第一种方法的时候,如果正常
情况下可以修改渲染模式,并且我用了三个 Color 来依次替换实现了渐变效果,但是如果我在
 Hierarchy 面板中选中这个物体那么正在改变的物体就会突然变回更改之前的默认状态,或者如
 果你预先选中了这个将要更改的物体他也会出现同样的效果,就是不能在编译状态下选中这个游
 戏物体,不能在 Inspector 面板中查看他的渲染状态,最后我得出了一个运行时渲染的词语来
 描述这个行为,
如果你在运行时更改了游戏物体 Shader 的渲染模式,那么查看他的渲染模式会导致他的渲染模
式属性重置。

以上就是Unity 3D 浅谈Shader 运行时状态及渲染模式遇到的问题的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2436730.html

(0)
上一篇 2025年3月3日 10:46:25
下一篇 2025年3月2日 23:42:23

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • c语言 三种求回文数的算法

    今天小编和大家分享的文章是c语言的三种描述回文数的算法,具有一定参考价值,对c语言回文数有兴趣的可以来看看,希望对你有所帮助。 题目描述 注意:(这些回文数都没有前导0)1位的回文数有0,1,2,3,4,5,6,7,8,9   共10个;2…

    2025年3月3日
    200
  • C# 快速手动构建文件服务器

    今天分享一篇关于自己手动搭建文件服务器的文章,非常方便,想拥有属于自己的文件服务器的朋友可以学习一下。 如下图,下面是调用的一个测试使用的界面。 测试上传和下载的功能。 相关教程:C#视频教程 基本原理说一下: 1.客户端上传file,转换…

    2025年3月3日 编程技术
    200
  • C++学习之new()和malloc()函数

    熟悉c++++的朋友应该都知道,c++提供给了程序员与硬件打交道的可能性,比如说内存管理。一个高水平的c++程序员可以将c++程序的性能优化到极致,榨干硬件资源。而现在我想说说与内存管理有关的new 和 malloc()。   先说说mal…

    编程技术 2025年3月3日
    200
  • 怎么用dijkstra算法找到五一最省旅游路线

    明天就是五一了,大家准备好旅游攻略了吗?今天小编带大家了解一篇关于文章,用dijkstra算法帮你轻松搞定旅游路线,实惠又省心,快来看看吧! 案例: 五一快到了,小张准备去旅游了! 查了查到各地的机票  因为今年被扣工资扣得很惨,小张手头不…

    2025年3月3日 编程技术
    200
  • C#中的console是什么意思

    C#中的console表示控制台。console是一个类,它封装了控制台的一些基本操作,如【Console.Write】,表示向控制台直接写入字符串。 C#之Console Console.Write  表示向控制台直接写入字符串,不进行换…

    2025年3月3日
    200
  • c语言数组怎么输入?

    在C语言中,有两个函数可以让用户从键盘上输入数组数据,它们分别是gets()和scanf()。scanf()是通过格式控制符%s输入数组字符串,除了字符串,还能输入其他类型的数据;gets()是直接输入数组字符串,并且只能输入字符串。 但是…

    2025年3月3日
    200
  • c#用什么软件编程?

    c#可有的编程软件:Visual Studio、Visual Studio Code、MonoDevelop、SharpDevelop、Rider、SlickEdit、C# Pad、Jdoodle、.NET Fiddle、Scriptcs等…

    2025年3月3日 编程技术
    200
  • 怎么精通C语言?

    对于c语言,很多人都知道,可能也有很多人大学甚至中学也学习过,可能只是熟悉或者仅仅了解,能说自己精通的应该能在前面的基础上能砍掉大部分人,所以有人就想知道,那该怎样才能精通c语言呢? 一. 先具备一定的计算机基础,为后续提升做好准备 是科班…

    2025年3月3日
    200
  • c#如何防止sql注入?

    对于网站的安全性,是每个网站开发者和运营者最关心的问题。网站一旦出现漏洞,那势必将造成很大的损失。为了提高网站的安全性,首先网站要防注入。 下面我们给大家介绍C#防止sql注入的几种方法: 方法一: 在Web.config文件下面增加一个如…

    2025年3月3日
    200
  • c语言的代码是什么?

    C语言的代码指的是根据C语言编写规则所写出的程序语句、计算机指令;C语言代码的存储文件扩展名一般为“.c”文件或者是“.h”文件,分别对应C源文件(source file)和C头文件(header file)。 C语言是一门编程语言。C语言…

    2025年3月3日
    200

发表回复

登录后才能评论