Web Analytics

こつこつエンジニア

現役アプリ開発者によるIT系特化ブログ

UnityでUnlit Shaderを作成して半透明なオブジェクトを描画してみよう!

f:id:madai21:20210720210353j:plain

はじめに

前回までにスクリプトファイルから色んな形のオブジェクトを青色や黄色などの色付きで描画しました。
madai21.hatenablog.com
madai21.hatenablog.com
では半透明のオブジェクトを描画させたい場合、MaterialのAlbedoのA(アルファ)値を255から変えるだけで実現できるでしょうか?
確認してみましょう^^

MaterialのAlbedoのA値を変えてみる

前回までに作ったCreateMesh(Material)のA値だけをまずは変えてみましょう。
下のProject画面でCreateMesh(Material)を選択して、右のInspector画面でAlbedoの部分をクリックします。
f:id:madai21:20210802185834p:plain
A値を80に変更します。
f:id:madai21:20210802185638p:plain
実行しても・・・変わらないですね。
f:id:madai21:20210802190220p:plain

アルファ値を考慮したUnlit Shaderを作成する

透明なオブジェクトを描画するためにUnlit Shaderを作って、CreateMesh(Material)のShaderに設定してあげましょう。
Project画面で右クリックしてCreate > Shader > Unlit Shaderを選択しましょう。
f:id:madai21:20210802193910p:plain
Shader名はTransparentMeshとしておきます。
TransparentMesh.shaderをクリックして編集しましょう。
f:id:madai21:20210802194213p:plain
以下の内容に編集します。

Shader "Unlit/TransparentMesh"
{
    Properties
    {
        _Color("Color", Color) = (1,1,1,1)
    }
    SubShader
    {
        Tags { "RenderType"="Transparent" "Queue" = "Transparent"}
        Blend SrcAlpha OneMinusSrcAlpha
        LOD 100
 
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
 
            #include "UnityCG.cginc"
 
            struct appdata
            {
                float4 vertex : POSITION;
            };
 
            struct v2f
            {
                float4 vertex : SV_POSITION;
                float4 color : COLOR;
            };
 
            fixed4 _Color;
 
            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.color = _Color;
                return o;
            }
 
            fixed4 frag (v2f i) : SV_Target
            {
                return i.color;
            }
            ENDCG
        }
    }
}

CreateMesh(Material)のShaderを作ったUnlit/TransparentMeshに変更してみましょう。
右のInspector画面でShaderを選択します。
f:id:madai21:20210802194041p:plain
検索にtranと入力するとTransparentMeshが出てきますので、選択します。
f:id:madai21:20210802194904p:plain
実行してみましょう。
半透明で描画されるようになりましたね^^
f:id:madai21:20210802195040p:plain

おわりに

ShaderはDefaultで用意されていますが、今回のようにShaderを自分で用意することによってさまざまな描画を実現することができます。
Shaderは奥が深そうですが、使いこなせたら楽しそうですね^^