关于Unity中的模型描边与Shader切换(专题二)
模型描边
1: LOL里面的模型描边效果,点击防御塔会有描边的效果,被攻击的时候模型也要描边凸显一下
2: 网上可以找到模型描边的Shader,可以直接下载使用,一组第三方的Shader, 帮我们解决了模型描边的问题,叫Toony(第65)
Shader切换
1.被攻击的时候模型描边凸显一下,不被攻击的时候就描边隐藏,变成正常模型的样子
2.需要一个带模型描边的Shader和一个不带模型描边的Shader
代码里面切换Shader
材质是Shader的使用者,模型贴材质,材质决定了是用哪种Shader来进行绘制和渲染,所以切换Shader就是要先关联材质到Public
1: 关联要切换Shader的材质
2: 代码加载对应的Shader: Shader.Find(“Shader的名字”);,不是Shader的路径,这个名字可以打开对应的Shader在第一行就是
3: 切换材质对应的Shader; Matrix.shader = Shader
4: 将最常用的Shader, 放到Unity的Always Include里 --> 优化检查
5: Edit--> ProjectSetting --> Graphics --> Always-included Shaders

让这些Shader很重要,在开始的时候加载,常驻内存;
Shader切换实例
1.创建Unity项目和文件目录,保存场景
2.创建一个Shaders文件夹,把下载的Toony文件夹(第65)复制进去,Toony里面有4个shader。在Resources文件夹下面创建一个People文件夹,把人物模型文件复制进去(People.FBX和People.png)(第65)
3.点击People模型,Rig---->Animation Type设置为Legacy旧版动画模式---->Apply
4.进入Resources/Material,关联好材质球的纹理贴图,点击模型Animations---->Wrap Mode---->Loop---->Apply设置动画循环播放
5.把People拖进场景,设置它的材质的Shader---->Toon---->Basic,颜色设置为255,255,255,255,这是正常状态

设置它的材质的Shader---->Toon---->Basic Outline,Outline Color描边颜色设置为红色,这是有描边的状态,Outline width可以设置描边粗细

6.创建一个脚本Actor.cs挂载在People模型下来切换shader
打开Actor.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class Actor : MonoBehaviour {
public Material mat;//关联模型的材质,才能对它的Shader进行切换 //定义两个静态变量来保存Shader
static Shader normal=null;//正常状态的shader
static Shader outline=null;//描边状态的shader private bool is_normal = false;//判断当前是否处于正常状态 Shader get_normal()
{
if (normal)//当它第一次为空的时候,我们就创建一个,后面不为空就直接使用,但是这样优化还不够
{
return normal; } //之所以用静态变量,是因为在查找Shader的时候,也会编译shader包括生成GLprogam,生成一个程序放进去,是有开销的
//如果Shader没有人使用了,或者找到了Shader不使用,也会被游戏引擎卸载掉,如果设置为常驻内存就不会
normal = Shader.Find("Toon/Basic");
return normal;
} Shader get_outline()
{
if (outline)
{
return outline; }
outline = Shader.Find("Toon/Basic Outline");
return outline;
} // Use this for initialization
void Start () {
this.mat.shader = this.get_normal();
is_normal = true; //调用的函数,3秒后开始调用,每1秒调用1次
this.InvokeRepeating("change_shader",3.0f,1.0f); } //切换shader
void change_shader()
{
if (this.is_normal)
{
//切换到描边状态
this.mat.shader = this.get_outline();
is_normal = false;
}
else
{
//切换到正常状态
this.mat.shader = this.get_normal();
is_normal = true;
}
} // Update is called once per frame
void Update () { }
}
7.运行,发现3秒后开始切换,每隔1秒切换一次,但是其实还没有做完,还可以优化
//在运行的时候,去加载Shader,会消耗CPU,解决方法就是预先把Shader加载好
//Unity有一个机制,就是常用的Shader设置告诉它,它会帮你把这个Shader常驻内存
//常用的Shader,在游戏启动的时候预先加载好,就算Shader没有用了,也会常住内存
//启动的时候和运行的时候是不同的阶段
Edit---->ProjectSetting---->Graphics---->Always-included Shaders---->增加Size,关联新的Shader

8.现在才算完成
关于Unity中的模型描边与Shader切换(专题二)的更多相关文章
- selenium中的元素操作之三大切换(二)
一.窗口切换 使用方法: 1.获取到打开的所有的窗口,句柄handles all_handles = driver.window_handles print(all_handles) 2.获取当前的窗 ...
- 在Unity中为模型使用表情
在游戏中让角色能够拥有表情,是我一直很想实现的一件事情,今天搜索了一下这方面的资料,找到两个解决方案. MMD For Unity GitHub:https://github.com/mmd-for- ...
- 关于Unity中常用的数据结构和JSON处理(专题三)
数据结构通俗来讲就是用某个对象去存储数据集合,比如要存储100个整数,要用什么样的数据类型能把它们存储好. Jason处理,服务器对接,配置文件的使用,Unity和Jason之间相互的转换. Arra ...
- Unity中的ShaderToys——将大神们写的shader搬到unity中来吧
http://lib.csdn.net/article/unity3d/38699 这篇文章翻译自国外的一篇文章(这里是原文链接),正在使用unity的你是否在shader toy上发现很多牛逼哄哄的 ...
- 解读Unity中的CG编写Shader系列八(多光源漫反射)
转自http://www.itnose.net/detail/6117338.html 前文中完成最简单的漫反射shader只是单个光源下的漫反射,而往往场景中不仅仅只有一个光源,那么多个光源的情况下 ...
- 解读Unity中的CG编写Shader系列八(镜面反射)
转自http://www.itnose.net/detail/6117378.html 讨论完漫反射之后,接下来肯定就是镜面反射了 在开始镜面反射shader的coding之前,要扩充一下前面提到的知 ...
- 解读Unity中的CG编写Shader系列三
转自http://www.itnose.net/detail/6096068.html 在上一个例子中,我们得到了由mesh组件传递的信息经过数学转换至合适的颜色区间以颜色的形式着色到物体上.这篇文章 ...
- 移植UE4的模型操作到Unity中
最近在Unity上要写一个东东,功能差不多就是在Unity编辑器上的旋转,移动这些,在手机上也能比较容易操作最好,原来用Axiom3D写过一个类似的,有许多位置并不好用,刚好在研究UE4的源码,在模型 ...
- 关于Unity中Shader的基础认识
Shader也叫着色器,是Unity里面比较难的一个点,网上有很多别人写好的shader,我们可以下载下来用或者修改学习. Shader可以做出很多非常不错的效果,因为它是插在渲染管道里面的程序,一来 ...
随机推荐
- R概率分布函数使用小结
记要 今天在计算分类模型自行区间时,用到了R中正太分布的qnorm函数,这里做简单记要,作为备忘. R中自带了很多概率分布的函数,如正太分布,二次分布,卡放分布,t分布等,这些分布的函数都有一个共性, ...
- [svc]NFS存储企业场景及nfs最佳实战探究
办公网络里人一般系统用共享,尤其是财务, 他们喜欢直接点开编辑. 而不喜欢ftp nfs在网站架构中的用途 注: 如果pv量少,则放在一台机器上速度更快,如果几千万pv,则存储分布式部署. 网站架构中 ...
- centos 7 五笔安装
# yum install ibus ibus-table-wubi 需要重启动
- 菜鸟调错(五)——jetty运行时无法保存文件
背景交代: 上一篇博客写的是用jetty和Maven做开发.测试.在使用的过程中遇到一个小问题,就是在jetty启动以后,修改了jsp.xml等文件无法保存. 错误信息: 解决方案: 到Maven库( ...
- 【小白的CFD之旅】19 来自计算网格的困惑
经过一年的忙碌,终于又到了寒假时间,小白又满状态复活了. 这一年小白学了很多的课程,但是一年下来,小白却感觉脑袋里没留下什么东西,貌似什么东西都在考完试的那一刹那全还回给老师了.这一年学习之余,小白仍 ...
- angular-resource版本差异问题
在 AngularJS v1.3.0-beta.14 这个版本里,使用query方法,如果传递进来的数据不是数组,会报错. 在 AngularJS v1.2.18 这个版本里,使用query方法,如果 ...
- angular学习笔记(三十)-指令(10)-require和controller
本篇介绍指令的最后两个属性,require和controller 当一个指令需要和父元素指令进行通信的时候,它们就会用到这两个属性,什么意思还是要看栗子: html: <outer‐direct ...
- [Windows Azure] Managing SQL Database using SQL Server Management Studio
Managing Windows Azure SQL Database using SQL Server Management Studio You can use Windows Azure SQL ...
- 一个更好的C++序列化/反序列化库Kapok
KapokFAQ1.Kapok的特点简单,易用,header-only,只需要引用Kapok.hpp即可:高效,初步测试性和messagepack相当.它是纯c++11实现,因此需要支持C++11的编 ...
- django rest_framework入门五-认证和权限
1.django User实体 django自带了用户验证模块,django/contrib/auth/models.py定义了用户实体,代码如下: class AbstractUser(Abstra ...