Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- public class StayTransparent : MonoBehaviour
- {
- public Transparency Owner;
- private bool InitDone = false;
- private Renderer[] MaterialRenderers;
- private Shader TransparentableShader; // I don't name things well
- private Color TransparentColor;
- // Update is called once per frame
- void Update()
- {
- if (InitDone)
- {
- if (MaterialRenderers != null)
- {
- for (int i = 0; i < MaterialRenderers.Length; i++)
- {
- foreach (Material material in MaterialRenderers[i].materials)
- {
- TransparentColor = new Color(material.color.r, material.color.g, material.color.b, Owner.Opacity);
- if (material.shader != TransparentableShader)
- { // make sure we have the right shader
- material.shader = TransparentableShader;
- }
- // START garbage that sets the fuselage to transparent mode
- material.SetOverrideTag("RenderType", "Transparent");
- material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
- material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
- material.SetInt("_ZWrite", 0);
- material.DisableKeyword("_ALPHATEST_ON"); // make sure "cutout" mode is disabled in the keywords
- material.DisableKeyword("_ALPHABLEND_ON"); // make sure "fade" mod is disabled in the keywords
- material.EnableKeyword("_ALPHAPREMULTIPLY_ON"); // make sure Transparent mode is enabled in the keywords
- material.renderQueue = 3000;
- material.EnableKeyword("_EMISSION"); // yes, it needs emission for some reason :/
- // END garbage that sets the fuselage to transparent mode
- material.SetColor("_Color", TransparentColor); // set color
- material.color = TransparentColor; // same as above, just to be sure :P
- }
- }
- }
- else
- {
- Debug.Log("Getting Renderer for Fuselage Transparency");
- MaterialRenderers = Owner.PartObject.GetComponentsInChildren<Renderer>();
- TransparentableShader = Shader.Find("Standard");
- }
- }
- }
- public void Initialize()
- { // this is called from the part modifier script, and is called after "Owner" has been set to the modifier
- InitDone = true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement