「Unity/3d/透明」の版間の差分
提供: 初心者エンジニアの簡易メモ
(ページの作成:「(試し中) 以下のようなShaderを追加 https://nn-hokuson.hatenablog.com/entry/2018/01/23/202530 Materialを新規追加して、そのMaterialのShaderに上...」) |
|||
(同じ利用者による、間の11版が非表示) | |||
行1: | 行1: | ||
− | + | ==Inspectorで変更== | |
+ | #オブジェクトのmaterialを開き、SurfaceTypeをTransparentへ | ||
+ | #BaseMapの色のアルファ値を50%ぐらいに変更する | ||
+ | ==Shaderで変更== | ||
以下のようなShaderを追加 | 以下のようなShaderを追加 | ||
+ | <pre> | ||
+ | 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" | ||
+ | } | ||
+ | </pre> | ||
+ | 参考:https://nn-hokuson.hatenablog.com/entry/2018/01/23/202530 | ||
+ | |||
+ | Materialを新規追加して、そのMaterialのShaderに上記"Custom/SemiTransparent"のShaderを追加 | ||
+ | |||
+ | ==c#のサンプル== | ||
<pre> | <pre> | ||
− | GameObject | + | TransparentAllUnderObject(obj); |
− | Material[] materials = | + | public void TransparentAllUnderObject(GameObject obj) |
− | materials[0].shader = Shader.Find("Custom/SemiTransparent"); | + | { |
− | materials[0]. | + | if (obj.GetComponent<SkinnedMeshRenderer>() != null) |
+ | { | ||
+ | Material[] materials = obj.GetComponent<SkinnedMeshRenderer>().materials; | ||
+ | if (materials.Length > 0) | ||
+ | { | ||
+ | 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; | ||
+ | if (materials.Length > 0) | ||
+ | { | ||
+ | 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) | ||
+ | { | ||
+ | TransparentAllUnderObject(transform.gameObject); // 再帰処理 | ||
+ | } | ||
+ | } | ||
+ | } | ||
</pre> | </pre> | ||
+ | |||
+ | iphone実機で、オブジェクトが、ピンク色になる不具合あり。 |
2022年4月13日 (水) 08:57時点における最新版
Inspectorで変更
- オブジェクトのmaterialを開き、SurfaceTypeをTransparentへ
- BaseMapの色のアルファ値を50%ぐらいに変更する
Shaderで変更
以下のような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; if (materials.Length > 0) { 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; if (materials.Length > 0) { 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) { TransparentAllUnderObject(transform.gameObject); // 再帰処理 } } }
iphone実機で、オブジェクトが、ピンク色になる不具合あり。