您的位置:首页 > 移动开发 > Unity3D

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

2016-03-30 13:41 495 查看
  

效果图如下:



 

投影器(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,图片的格式一定的设置正确



③ 编写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各个属性赋值如下:



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

 

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

链接:http://pan.baidu.com/s/1skTrodR 密码:q1ru
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: