facebook twitter hatena line email

「Unity/Shader」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(色プロパティにアクセス)
(内容を「Unity/Shader/基本」で置換)
行1: 行1:
==作成==
+
[[Unity/Shader/基本]]
#Assetsの下に、適当な画像ファイルを用意する
+
#Assetsの下で、Create/Shader/UnlitShaderを選択して、TestUnlitShader作成
+
#Assetsの下で、Create/Materialを選択して、作成
+
#作成したMaterialを選択して、Shaderに、上で作った、TestUnlitShaderを入れる。
+
#作成したMaterialのinspector内のTextureに、用意した画像ファイルを入れる。
+
#ヒエラルキーに3DObject/Cubeを作成して、MeshRendererのMaterialsに、Unlit_TestUnlitShaderを追加する
+
 
+
作成されたTestUnlitShader.shader
+
<pre>
+
Shader "Unlit/TestUnlitShader"
+
{
+
    Properties
+
    {
+
        _MainTex ("Texture", 2D) = "white" {}
+
    }
+
    SubShader
+
    {
+
        Tags { "RenderType"="Opaque" }
+
        LOD 100
+
 
+
        Pass
+
        {
+
            CGPROGRAM
+
            #pragma vertex vert
+
            #pragma fragment frag
+
            // make fog work
+
            #pragma multi_compile_fog
+
 
+
            #include "UnityCG.cginc"
+
 
+
            struct appdata
+
            {
+
                float4 vertex : POSITION;
+
                float2 uv : TEXCOORD0;
+
            };
+
 
+
            struct v2f
+
            {
+
                float2 uv : TEXCOORD0;
+
                UNITY_FOG_COORDS(1)
+
                float4 vertex : SV_POSITION;
+
            };
+
 
+
            sampler2D _MainTex;
+
            float4 _MainTex_ST;
+
 
+
            v2f vert (appdata v)
+
            {
+
                v2f o;
+
                o.vertex = UnityObjectToClipPos(v.vertex);
+
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
+
                UNITY_TRANSFER_FOG(o,o.vertex);
+
                return o;
+
            }
+
 
+
            fixed4 frag (v2f i) : SV_Target
+
            {
+
                // sample the texture
+
                fixed4 col = tex2D(_MainTex, i.uv);
+
                // apply fog
+
                UNITY_APPLY_FOG(i.fogCoord, col);
+
                return col;
+
            }
+
            ENDCG
+
        }
+
    }
+
}
+
</pre>
+
 
+
参考:https://qiita.com/nekoco/items/592ac7109106aef97522
+
 
+
==MeshRendererにmaterialを動的に設定==
+
<pre>
+
public class SampleScene : MonoBehaviour
+
{
+
    [SerializeField] Material material; // UnlitShaderなどをドラッグ
+
    [SerializeField] MeshRenderer targetMeshRenderer; // Cubeなど3DObjectをドラッグ
+
    void Start()
+
    {
+
        InitMaterial();
+
    }
+
    void InitMaterial()
+
    {
+
        // 複数設定したり
+
        Material[] mats = targetMeshRenderer.materials;
+
        mats[0] = material;
+
        targetMeshRenderer.materials = mats;
+
 
+
        // 1つだけ設定したり
+
        targetMeshRenderer.material = material;
+
    }
+
}
+
</pre>
+
==Textureを動的に設定==
+
<pre>
+
public class SampleScene : MonoBehaviour
+
{
+
    [SerializeField] Texture texture; // png画像ファイルをドラッグ
+
    void Start()
+
    {
+
        InitTexture();
+
    }
+
    InitTexture()
+
    {
+
        // 画像ファイルを直接張ったり
+
        targetMeshRenderer.material.mainTexture = texture;
+
    }
+
}
+
</pre>
+
mainTextureは、shader側に、以下があれば使えそう。
+
<pre>
+
_MainTex ("Texture", 2D) = "white" {}
+
</pre>
+
公式:https://docs.unity3d.com/ja/2018.4/ScriptReference/Material-mainTexture.html
+
 
+
==Textureプロパティにアクセス==
+
<pre>
+
Material material;
+
material.SetTexture(“_MainTex”, texture);
+
</pre>
+
公式:https://docs.unity3d.com/ja/2019.4/ScriptReference/Material.SetTexture.html
+
 
+
==色プロパティにアクセス==
+
<pre>
+
Material material;
+
material.SetColor(0, new Color(1f, 1f, 0f));
+
// カスタム値にアクセスしたい場合
+
material.SetColor("_HogeColor", new Color(1f, 1f, 0f));
+
</pre>
+
公式:https://docs.unity3d.com/ja/2019.4/ScriptReference/Material.SetColor.html
+
 
+
==Floatプロパティにアクセス==
+
<pre>
+
Material material;
+
// カスタム値にアクセスしたい場合
+
material.SetFloat("_HogeValue", 1.1f);
+
</pre>
+

2022年12月7日 (水) 00:32時点における版

Unity/Shader/基本