游戏扫描效果(原理尝试)
前言:自从《古墓丽影9》里面用了生存本能之后,后来玩到的游戏只要是带扫描资源或者敌人功能的,我都有频繁的使用这个功能(强迫症?),除了能方便发现资源之外,还能快速扫敌。自己搞一个简单的试试,就用shader实现吧。
- 简单的搭个环境,就长这样吧
- 打算用深度值来模拟这条从近到远的线,或者叫扫描、脉冲什么的。写起来也很简单,就几句。把下面这个shader贴上去。
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.depth = UnityObjectToViewPos(v.vertex) * _ProjectionParams.w; // 相机的1/far 值
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}
fixed4 frag(v2f i) : SV_Target
{
float invert = 1 - i.depth;
if (abs(i.depth - _value / 2) < 0.03) // 线的宽度
{
return fixed4(invert * 2, 0.6, 0.6, 1);
}
else
{
fixed4 col = tex2D(_MainTex, i.uv);
return col;
}
}
- shader里面的value值需要用外部的脚本去控制,也是简单几行模拟一下完事
if(Input.GetKey(KeyCode.Mouse2))
{
flag = true;
}
if(script && flag)
{
if(script.slider <= -0.6f)
{
script.slider = 1.5f;
flag = false;
}
else
{
script.slider -= Time.deltaTime * moveSpeed;
}
}
-
然后是在camera里面把上面的脚本挂上去,再执行替换
SetReplacementShader
就行。 -
效果长差不多就行(- -)
-
对比一下原神里面的(其实我只是想说我有提纳里了)