Unity/3d/透明
提供: 初心者エンジニアの簡易メモ
(注意:手動では透明にできたが、コードで変更ができない・・)
以下のようなShaderを追加
Shader "Custom/SemiTransparent"
{
Properties {
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader {
Tags { "RenderType"="Transparent" "Queue"="Transparent"}
LOD 200
Pass{
ZWrite ON
ColorMask 0
}
CGPROGRAM
#pragma surface surf Standard fullforwardshadows alpha:fade
#pragma target 3.0
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
};
fixed4 _Color;
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Metallic = 0;
o.Smoothness = 0;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
参考:https://nn-hokuson.hatenablog.com/entry/2018/01/23/202530
Materialを新規追加して、そのMaterialのShaderに上記"Custom/SemiTransparent"のShaderを追加
c#のサンプル
TransparentAllUnderObject(obj);
public void TransparentAllUnderObject(GameObject obj)
{
if (obj.GetComponent<SkinnedMeshRenderer>() != null)
{
Material[] materials = obj.GetComponent<SkinnedMeshRenderer>().materials;
materials[0].shader = Shader.Find("Custom/SemiTransparent");
materials[0].SetColor("_Color", new Color(1f, 1f, 1f, 0.8f));
}
if (obj.GetComponent<MeshRenderer>() != null)
{
Material[] materials = obj.GetComponent<MeshRenderer>().materials;
materials[0].shader = Shader.Find("Custom/SemiTransparent");
materials[0].SetColor("_Color", new Color(1f, 1f, 1f, 0.8f));
}
Transform transforms = obj.GetComponentInChildren<Transform>();
if (transforms.childCount > 0)
{
foreach (Transform transform in transforms)
{
AllUnderObject(transform.gameObject); // 再帰処理
}
}
}
