今どきのUnityはURPやHDRPを使わなくてもShaderGraphが使えてしまうので、この段階ですでに古いテクノロジーになってしまうのですが、一応自分の備忘録を兼ねて記事化しておきたいと思います。
ちなみにシェーダーグラフで行う場合はこちらの動画がわかりやすいです。
1.スプライトに使用する画像と、光らせたい部分を赤く塗った画像を用意する
光らせたい部分を赤く塗った画像は、RGBAのRとAの部分のみを使用します。
下の例では、光らせない部分をわかりやすくするために黒く塗ってありますが、特になくても大丈夫です。
3.Secondary Texturesを選択
Nameに _EmitTex と入力し、先ほどの光らせたい部分を赤く塗ったテクスチャを選択します。
4.シェーダーを作成する
ビルトインのスプライトシェーダーにちょい足しした下記のシェーダーを用意します。
先ほど指定した _EmitTex という名前はこのシェーダーの中で使用します。
// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
Shader "Sprites/DefaultEx"
{
Properties
{
[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
[PerRendererData] _EmitTex("Emit Texture", 2D) = "black" {}
_Color ("Tint", Color) = (1,1,1,1)
[HDR] _EmitColor("Emit Color", Color) = (1,1,1,1)
[MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
[HideInInspector] _RendererColor ("RendererColor", Color) = (1,1,1,1)
[HideInInspector] _Flip ("Flip", Vector) = (1,1,1,1)
[PerRendererData] _AlphaTex ("External Alpha", 2D) = "white" {}
[PerRendererData] _EnableExternalAlpha ("Enable External Alpha", Float) = 0
}
SubShader
{
Tags
{
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
"PreviewType"="Plane"
"CanUseSpriteAtlas"="True"
}
Cull Off
Lighting Off
ZWrite Off
Blend One OneMinusSrcAlpha
Pass
{
CGPROGRAM
#pragma vertex SpriteVertEx
#pragma fragment SpriteFragEx
#pragma target 2.0
#pragma multi_compile_instancing
#pragma multi_compile_local _ PIXELSNAP_ON
#pragma multi_compile _ ETC1_EXTERNAL_ALPHA
#include "UnitySprites.cginc"
sampler2D _EmitTex;
fixed4 _EmitColor;
v2f SpriteVertEx(appdata_t IN)
{
v2f OUT;
UNITY_SETUP_INSTANCE_ID(IN);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
OUT.vertex = UnityFlipSprite(IN.vertex, _Flip);
OUT.vertex = UnityObjectToClipPos(OUT.vertex);
OUT.texcoord = IN.texcoord;
OUT.color = IN.color * _RendererColor;
#ifdef PIXELSNAP_ON
OUT.vertex = UnityPixelSnap(OUT.vertex);
#endif
return OUT;
}
fixed4 SpriteFragEx(v2f IN) : SV_Target
{
float2 uv = IN.texcoord;
fixed4 texCol = tex2D(_MainTex, uv);
clip(texCol.a-0.001);
fixed4 emCol = tex2D(_EmitTex, uv);
fixed4 color = (emCol.r * emCol.a > 0) ? _EmitColor * (emCol.r) : texCol * _Color;
#if ETC1_EXTERNAL_ALPHA
fixed4 alpha = tex2D(_AlphaTex, uv);
color.a = lerp(color.a, alpha.r, _EnableExternalAlpha);
#endif
return color;
}
ENDCG
}
}
}
5.マテリアルを作成
作成したシェーダーを使用してマテリアルを作成します
6.Post Processingで光らせる
こちらを参考に光らせます
7.(おまけ)アニメーションを付ける
こちらを参考にアニメーションを付けることができます。