效果图如下:
投影器(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