我正在尝试创建一个 GameObejct,如果处于活动状态,它会反转它后面任何东西的颜色。理想情况下,当这个游戏对象出现/变得活跃时,它会从它的中心点扩展到一定大小的半径。
所以想象一个圆圈,它的比例在 1 或 2 秒内从 x=0 和 y=0 逐渐增加到 x=5 和 y=5,并反转后面任何东西的颜色。实际圆圈有多长或多大并不重要,只是这个想法的一个例子。我尝试使用我在网上找到的蒙版和着色器创建一个 GameObect,但根本不起作用,我仍然不确定如何为扩展设置动画。
有没有人知道我如何使我的这个梦想效果成为现实?
谢谢!
这是一个除了反转颜色之外什么都不做的着色器。
重要的部分是Alpha:Blend和Blend OneMinusDstColor Zero。
Shader "Custom/Invert"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Transparent" "Queue"="Transparent" }
LOD 200
Blend OneMinusDstColor Zero
PASS
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 3.0 Alpha:Blend
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
fixed4 _Color;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = float2(0,0);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
return _Color;
}
ENDCG
}
}
FallBack "Diffuse"
}
Run Code Online (Sandbox Code Playgroud)
至于动画,King 的回答很好很简单。或者,您可以通过代码为比例设置动画:
public class Scale : MonoBehaviour
{
void Update ()
{
var scale = Mathf.Sin(Time.timeSinceLevelLoad / 4f) * 20;
this.transform.localScale = new Vector3(scale, scale, 1);
}
}
Run Code Online (Sandbox Code Playgroud)
这个特殊的代码将使精灵“脉冲”。像这样:
我认为您应该能够从这个示例中制作自己的缩放脚本。