博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
11. 鼠标移到物体上高亮显示轮廓
阅读量:4353 次
发布时间:2019-06-07

本文共 3342 字,大约阅读时间需要 11 分钟。

1. 新建一个Cube,新建一个Material并拖到Cube上

 

2. 新建一个Shader,重命名为“Outline”,修改Shader代码如下:

Shader "Outline" { Properties  {  _Color ("Main Color", Color) = (.5,.5,0.5,1)  _OutlineColor ("Outline Color", Color) = (0,1,0,1)   _Outline ("Outline width", Range (0.0, 0.03)) = .005    _MainTex ("Base (RGB)", 2D) = "white" { }    _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5    }    SubShader {    Tags    { "Queue"="AlphaTest+1" "IgnoreProjector"="True" "RenderType"="TransparentCutout" }    LOD 500    // outline pass    Pass {     Cull Off     ZWrite Off      AlphaTest Greater [_Cutoff]      CGINCLUDE       #include "UnityCG.cginc"        ENDCG         CGPROGRAM         #pragma vertex vert          #pragma fragment frag           struct appdata {            float4 vertex : POSITION;            float3 normal : NORMAL;             float2 texcoord : TEXCOORD;             };              struct v2f {               float4 pos : POSITION;                float4 color : COLOR;                 float2 texcoord : TEXCOORD;                  };                  uniform float _Outline;                   uniform float4 _OutlineColor;                   uniform sampler2D _MainTex;                   v2f vert(appdata v) {                    v2f o;                    o.pos = mul(UNITY_MATRIX_MVP, v.vertex);                    float3 norm = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal);                     float2 offset = TransformViewToProjection(norm.xy);                     o.pos.xy += offset * o.pos.z * _Outline;                      o.color = _OutlineColor;                       o.texcoord = v.texcoord;                        return o;                         }                          half4 frag(v2f i) :COLOR {                           float4 c = i.color;                           c.w *= tex2D(_MainTex, i.texcoord).w;                           return c;                            }                            ENDCG                             }                              // main pass                              Pass {                              ZWrite On                              AlphaTest Greater [_Cutoff]                              Material {                               Diffuse [_Color]                               Ambient [_Color]                                }                                Lighting On                                SetTexture [_MainTex] {                                ConstantColor [_Color]                                Combine texture * constant                                }                                SetTexture [_MainTex] {                                Combine previous * primary DOUBLE                                }                                 }                                  }                                  Fallback "Transparent/Cutout/Diffuse"                                   }

 

3. 新建一个脚本test.cs,并拖到Cube上

using UnityEngine;using System.Collections;public class test : MonoBehaviour{    private void OnMouseEnter()    {        foreach (Material m in renderer.materials)        {            m.shader = Shader.Find("Outline");        }    }    private void OnMouseExit()    {        foreach (Material m in renderer.materials)        {            m.shader = Shader.Find("Diffuse");        }    }}

 

4. 运行后当鼠标移到Cube上可以看到效果如图所示

 

转载于:https://www.cnblogs.com/code1992/p/3653826.html

你可能感兴趣的文章
78,90,Subsets,46,47,Permutations,39,40 DFS 大合集
查看>>
在Static控件上显示图片
查看>>
ORACLE 数据库基本参数查询
查看>>
iOS - CAReplicatorLayer 的运用
查看>>
iOS 8自动调整UITableView和UICollectionView布局
查看>>
哈佛精神
查看>>
c++
查看>>
微信开发
查看>>
《代码整洁之道》
查看>>
基于框架的应用系统开发的质量属性
查看>>
noip普及组考纲+样题合集——初级篇(OIer必看)
查看>>
windos下安装pgAdmin
查看>>
1.Hello World - Console
查看>>
基于jquery判断浏览器版本过低代码
查看>>
因式分解
查看>>
Java获取随机数的3种方法
查看>>
AJAX发送参数到后台,前台火狐debug报undefine
查看>>
luogu4240 毒瘤之神的考验(毒瘤乌斯反演)
查看>>
Setting Ruby on Rails Environment in MacOSX
查看>>
C#中数据的批量插入和更新 转载自21教程网
查看>>