用Unity的Projector制作基地范围效果

  

效果图如下:

用Unity的Projector制作基地范围效果_第1张图片

 

投影器(Projector)可以将任意与它的平截头体相交的材质投影到场景上。该材质必须使用特殊类型的着色器的才能正常工作。所以shader的编写非常重要.

Projector的属性:

Near Clip Plane 近裁剪面          :比这个距离更近的物体将不会被投影

Far Clip Plane 远裁剪面            :超出这个距离的物体将不会受到影响。

Field Of View 视野                    : 该投影的视野,以度为单位。当投影器是正交时fieldOfView被忽略 

Aspect Ratio 宽高比                 :投影的宽高比。这允许你来调整投影器的高度与宽度的比

Is Ortho Graphic 正交               :如果启用,投影器将用正交替代透视投影。

Ortho Graphic Size正交大小    :投影器正交大小,仅在Is Ortho Graphic启用后才可用

Material材质

Ignore Layers忽略层                :在忽略层里的物体不会被投影到

 

①首先,创建一个空物体GameObject,然后Components-->Effects-->Projector创建投影器

②导入图片baiquan,图片的格式一定的设置正确

用Unity的Projector制作基地范围效果_第2张图片

③ 编写shader

Shader "TK_Shader/TexProj" {
 Properties {
  _MainTex ("MainTex", 2D) = "white" {}
  _Color ("Tint", Color) = (1,1,1,1)
 }
 Subshader {
  Tags {"Queue"="Transparent"}
  Pass {
   ZWrite Off
   ColorMask RGB
   Blend SrcAlpha One
   //Offset -1, -1

   CGPROGRAM
   #pragma vertex vert
   #pragma fragment frag
   #pragma multi_compile_fog
   #include "UnityCG.cginc"
   
   struct v2f {
    float4 uv0 : TEXCOORD0;
    UNITY_FOG_COORDS(2)
    float4 pos : SV_POSITION;
   };
   
   float4x4 _Projector;
   
   v2f vert (float4 vertex : POSITION)
   {
    v2f o;
    o.pos = mul (UNITY_MATRIX_MVP, vertex); 
    o.uv0 = mul (_Projector, vertex);
    UNITY_TRANSFER_FOG(o,o.pos);
    return o;
   }
   
   sampler2D _MainTex;
   fixed4 _Color;
   
   fixed4 frag (v2f i) : SV_Target
   {
    fixed4 res = tex2Dproj (_MainTex, UNITY_PROJ_COORD(i.uv0));
    
    res = res * _Color;

    UNITY_APPLY_FOG_COLOR(i.fogCoord, res, fixed4(1,1,1,1));
    return res;
   }
   ENDCG
  }
 }

④创建材质TexProj,挂载贴图,选刚刚写好的shader。

Projector各个属性赋值如下:

用Unity的Projector制作基地范围效果_第3张图片

注意:这儿的Ignore Layers要设置忽略除了地面外的所有Layer,这样才会出这样的效果

 

用到的shader代码及贴图资料下载:

链接:http://pan.baidu.com/s/1skTrodR 密码:q1ru

你可能感兴趣的:(unity)