最终效果
shader是通过值拷贝的方式获取到顶点信息 所以是无法改变顶点的值 所以也无法实现碰撞效果
代码
Properties {
//_Color ("Color", Color) = (1,1,1,1)
//抬升半径
_R("R",Range(0,8)) = 1
//抬升的点的x坐标
_OX("OX",Range(-5,5)) =0
}
SubShader {
pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
float _Dir;
float _R;
float _OX;
struct v2f{
float4 pos:POSITION;
fixed4 color:COLOR;
};
v2f vert(appdata_base v)
{
//转化成世界空间坐标系
float4 worldPos = mul(unity_ObjectToWorld,v.vertex);
float2 xy =worldPos.xz;
//求物体xy平面上的点到点(_OX,0)的距离
//float d = sqrt((xy.x-_OX)*(xy.x-_OX)+(xy.y-_0)*(xy.y-0));
float d = length(xy-float2(_OX,0));
float higth = _R-d;
higth = _R > d ? higth:0;
float4 newPos = float4(v.vertex.x,higth,v.vertex.z,v.vertex.w);
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,newPos);
o.color = float4(newPos.y,newPos.y,newPos.y,1);
return o;
}
fixed4 frag(in v2f o):COLOR
{
return o.color;
}
ENDCG
}
}
FallBack "Diffuse"
}