原地址:http://blog.csdn.net/huutu/article/details/38231061?utm_source=tuicool&utm_medium=referral

在游戏中,怪物或者人受到攻击后,会有变白的效果。这个效果是Shader实现的。在判定被攻击的时候切换Shader。

[csharp]  view plain copy
  1. Shader shader = getBeAttackShader();
  2. material.shader = shader;
[csharp]  view plain copy
  1. static Shader s_BeattackShader = null;
  2. protected virtual Shader getBeAttackShader()
  3. {
  4. if(s_BeattackShader == null)
  5. {
  6. s_BeattackShader = Shader.Find("Custom/attack");
  7. }
  8. return s_BeattackShader;
  9. }

代码没有问题,但是在4S等低端设备上,被攻击时会明显卡顿,时间长达1S。

于是用Unity的性能分析器,在被攻击时暂停,可以看到:

在OpenGL中用过Shader的同学们看到下面的函数名字就知道问题所在了

Shader.CreateGPUProgram()

这个函数过程就是创建GLProgram链接Shader的一个过程,在Unity3d中的Shader.Find()是直接创建GLProgram的。

如果是自己去写引擎,GLProgram一般在初始化的时候就会创建完毕,然后用类似GLProgramManager管理。

Unity中的问题我们也可以用这个方法解决,但是Unity提供了简便方法。

点击Editor - Project Setting - Graphics

右侧 Always Included Shaders,把我们需要使用的Shader拖到里面去吧

unity里面动态的替换shader相关推荐

  1. (十九)unity shader之——————基于物理的渲染技术(PBS):中篇(Unity 5中的Standard Shader的实现和使用)

    一.unity 5中的standard shader 在unity5中新创建一个模型或是新创建一个材质时,默认使用的着色器都是一个名为standard 的着色器.这个standard shader使用 ...

  2. java.lang.Instrument 动态修改替换类代码

    java.lang.Instrument 动态修改替换类代码 | java.lang.Instrument包是在JDK5引入的,程序员通过修改方法的字节码实现动态修改类代码. 这通常是在类的main方 ...

  3. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | AMS 启动前使用动态代理替换掉插件 Activity 类 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  4. unity 2020 怎么写shader使其接受光照?_如何在Unity中造一个PBR Shader轮子

    之前有业界大佬建议我去了解下Unity的PBR.说来惭愧,我查找了下资料才发现自己在这方面的知识居然是一片空白.经过几周的学习与尝试我对这一块算是有了初步的了解,于是写了这篇文章,一方面对自己学到的东 ...

  5. Unity Tilemap动态生成2d地图

    Unity Tilemap动态生成2d地图 (参考链接) rule tile 动态生成地图:https://blog.csdn.net/mkr67n/article/details/108340749 ...

  6. Unity使用c#开发遇上的问题(六)(3dmax围绕指定中心旋转,unity中动态调用预制体并根据模型旋转指定角度)

    文章目录 前言 一.3dmax创建子弹.炮塔及武器库 1.相关模型 2.炮塔模型引入unity,无法绕旋转球旋转,重新调整 1.3dmax中默认炮管的中心点 2.选择层次界面 3.选择编辑工作轴 4. ...

  7. unity引用动态库的错误解决办法

    unity引用动态库的错误解决办法 引用动态库的错误 引用其他类库程序集 .NET Standard 2.0 配置文件 .NET 4.x 配置文件 引用动态库的错误 旧版unity编写的程序使用新版u ...

  8. Unity之动态加载播放外部mp3音频

    准备工作   由于Unity支持的外部加载的音频格式有限(wav.ogg等),因此本文使用支持.Net的NAudio库来完成MP3音频的加载与播放.   NAudio   下载NAudio动态库,然后 ...

  9. 使用Unity创造动态的2D水体效果

    者:Alex Rose 在本篇教程中,我们将使用简单的物理机制模拟一个动态的2D水体.我们将使用一个线性渲染器.网格渲染器,触发器以及粒子的混合体来创造这一水体效果,最终得到可运用于你下款游戏的水纹和 ...

最新文章

  1. 暑期集训3:几何基础 练习题G: HDU - 1052
  2. Oracle维护常用SQL语句
  3. cnn 反向传播推导_深度学习中的参数梯度推导(三)下篇
  4. MySQL—02—MySQL的操作
  5. 洪水填充算法_基于GIS的洪水淹没范围计算
  6. VTK:图像置换用法实战
  7. d3.js选择、插入、删除元素
  8. Xcode的SVN提示The request timed out.的解决方案
  9. vue/cli3 配置vux
  10. [css] 用css实现一个等腰三角形的小图标
  11. gitblit无法启动服务
  12. 黄聪:C#使用能够foreach对hashtable、List遍历时“集合已修改;可能无法执行枚举操作。”错误...
  13. javaweb JAVA JSP球鞋销售系统购物系统ssm购物系统购物商城系统源码(ssm电子商务系统)
  14. Manjaro Linux下使RIME支持86/98五笔输入法
  15. codeblock 设置背景颜色
  16. Unity【Live Capture】- 关于人脸捕捉的解决方案(一)
  17. Python练手项目:计算机自动还原魔方(5)最后一步
  18. Nacos+Gateway503错误,No servers available for service
  19. 第六次实验报告第二部分
  20. 折腾Transmission实现固定IP服务器BT做种教程

热门文章

  1. Realsense深度相机+pyqt5+应用案例(基础篇1)
  2. eclipse 抛 error: could not create the java virtual machine.Error: A fatal exception has occurred解决方法
  3. Unity Execution failed for task ‘:launcher:signReleaseBundle‘
  4. 绝对值公式fabs()—c语言练习(5)
  5. Ora2Pg 高级配置之导出指定模式
  6. c通讯录 :动态申请内存版本
  7. 跨平台应用开发进阶(二十九) :uni-app 实现Android原生APP-云打包集成神策详细教程
  8. Dataset之ApolloScape :ApolloScape Scene Parsing数据集的简介、下载、使用方法之详细攻略
  9. 深入理解防火墙的工作原理
  10. DELL 主板 电源开关跳线接法 DELL motherboard power switch