「Unity/3d/透明」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→c#のサンプル) |
|||
(同じ利用者による、間の4版が非表示) | |||
行1: | 行1: | ||
− | + | ==Inspectorで変更== | |
+ | #オブジェクトのmaterialを開き、SurfaceTypeをTransparentへ | ||
+ | #BaseMapの色のアルファ値を50%ぐらいに変更する | ||
+ | ==Shaderで変更== | ||
以下のようなShaderを追加 | 以下のようなShaderを追加 | ||
<pre> | <pre> | ||
行55: | 行58: | ||
{ | { | ||
Material[] materials = obj.GetComponent<SkinnedMeshRenderer>().materials; | Material[] materials = obj.GetComponent<SkinnedMeshRenderer>().materials; | ||
− | materials[0].shader = Shader.Find("Custom/SemiTransparent"); | + | 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) | if (obj.GetComponent<MeshRenderer>() != null) | ||
{ | { | ||
Material[] materials = obj.GetComponent<MeshRenderer>().materials; | Material[] materials = obj.GetComponent<MeshRenderer>().materials; | ||
− | materials[0].shader = Shader.Find("Custom/SemiTransparent"); | + | 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>(); | Transform transforms = obj.GetComponentInChildren<Transform>(); | ||
行74: | 行83: | ||
} | } | ||
</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実機で、オブジェクトが、ピンク色になる不具合あり。