Advertisement
HellFireKoder

SimplePlanes Fuselage Transparency

Apr 22nd, 2016
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.70 KB | None | 0 0
  1. using UnityEngine;
  2.  
  3. public class StayTransparent : MonoBehaviour
  4. {
  5.     public Transparency Owner;
  6.     private bool InitDone = false;
  7.     private Renderer[] MaterialRenderers;
  8.     private Shader TransparentableShader; // I don't name things well
  9.     private Color TransparentColor;
  10.  
  11.     // Update is called once per frame
  12.     void Update()
  13.     {
  14.         if (InitDone)
  15.         {
  16.             if (MaterialRenderers != null)
  17.             {
  18.                 for (int i = 0; i < MaterialRenderers.Length; i++)
  19.                 {
  20.                     foreach (Material material in MaterialRenderers[i].materials)
  21.                     {
  22.                         TransparentColor = new Color(material.color.r, material.color.g, material.color.b, Owner.Opacity);
  23.                         if (material.shader != TransparentableShader)
  24.                         {   // make sure we have the right shader
  25.                             material.shader = TransparentableShader;
  26.                         }
  27.                         // START garbage that sets the fuselage to transparent mode
  28.                         material.SetOverrideTag("RenderType", "Transparent");
  29.                         material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
  30.                         material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
  31.                         material.SetInt("_ZWrite", 0);
  32.                         material.DisableKeyword("_ALPHATEST_ON"); // make sure "cutout" mode is disabled in the keywords
  33.                         material.DisableKeyword("_ALPHABLEND_ON"); // make sure "fade" mod is disabled in the keywords
  34.                         material.EnableKeyword("_ALPHAPREMULTIPLY_ON"); // make sure Transparent mode is enabled in the keywords
  35.                         material.renderQueue = 3000;
  36.                         material.EnableKeyword("_EMISSION"); // yes, it needs emission for some reason :/
  37.                         // END garbage that sets the fuselage to transparent mode
  38.                         material.SetColor("_Color", TransparentColor); // set color
  39.                         material.color = TransparentColor; // same as above, just to be sure :P
  40.                     }
  41.                 }
  42.             }
  43.             else
  44.             {
  45.                 Debug.Log("Getting Renderer for Fuselage Transparency");
  46.                 MaterialRenderers = Owner.PartObject.GetComponentsInChildren<Renderer>();
  47.                 TransparentableShader = Shader.Find("Standard");
  48.             }
  49.         }
  50.     }
  51.  
  52.     public void Initialize()
  53.     { // this is called from the part modifier script, and is called after "Owner" has been set to the modifier
  54.         InitDone = true;
  55.     }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement