前提・実現したいこと
シェーダを使って円の枠の色を変えたい
↓実現したいこと
![
該当のソースコード
Cg
1Shader "Unlit/Circle" 2{ 3 Properties 4 { 5 _Color("Color", Color) = (1,0.5,0,1) // 円の内側の色 6 _BackgroundColor("Background Color", Color) = (1,1,1,1) // 円の外側の色 7 _FrameColor("Frame Color",Color)=(1,0.5,0.1) //円の枠の色 8 _MainTex("Texture", 2D) = "white" {} 9 } 10 SubShader 11 { 12 Tags {"Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent"} 13 LOD 100 14 15 ZWrite Off 16 Blend SrcAlpha OneMinusSrcAlpha 17 18 Pass 19 { 20 CGPROGRAM 21 #pragma vertex vert 22 #pragma fragment frag 23 // make fog work 24 #pragma multi_compile_fog 25 26 #include "UnityCG.cginc" 27 28 struct appdata 29 { 30 float4 vertex : POSITION; 31 float2 uv : TEXCOORD0; 32 }; 33 34 struct v2f 35 { 36 float2 uv : TEXCOORD0; 37 UNITY_FOG_COORDS(1) 38 float4 vertex : SV_POSITION; 39 }; 40 41 sampler2D _MainTex; 42 float4 _MainTex_ST; 43 44 // プロパティで設定された色を受け取るユニフォーム変数を用意する 45 fixed4 _Color; 46 fixed4 _BackgroundColor; 47 fixed4 _FrameColor; 48 49 v2f vert(appdata v) 50 { 51 v2f o; 52 o.vertex = UnityObjectToClipPos(v.vertex); 53 o.uv = TRANSFORM_TEX(v.uv, _MainTex); 54 UNITY_TRANSFER_FOG(o,o.vertex); 55 return o; 56 } 57 58 fixed4 frag(v2f i) : SV_Target 59 { 60 fixed radius = 0.4; 61 fixed r = distance(i.uv, fixed2(0.5,0.5)); 62 63 // lerpで色を選択する 64 // stepの結果が0なら_Colorを、1なら_BackgroundColorを返させるようにする 65 return lerp(_Color, _BackgroundColor, step(radius, r)); 66 } 67 ENDCG 68 } 69 } 70}
補足情報(FW/ツールのバージョンなど)
環境:Windows10、VisualStudio2019、Unity2020.1.0b13 Personal
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/18 12:49