Ismoh Geschrieben 15. Juli 2015 Melden Share Geschrieben 15. Juli 2015 Ich habe auf folgender Basis (http://sassybot.com/blog/swapping-rendering-mode-in-unity-5-0/) eine kleine HelperClass erstellt, welche den Rendering Mode eines Materials zur Laufzeit ändert: MaterialHelper: using UnityEngine; using System.Collections; public static class MaterialHelper { public enum BlendMode { Opaque, Cutout, Fade, Transparent } public static void SetMaterialRenderingMode(Material pMaterial, BlendMode pBlendMode) { switch (pBlendMode) { case BlendMode.Opaque: pMaterial.SetFloat("_Mode", 0); pMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); pMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); pMaterial.SetInt("_ZWrite", 1); pMaterial.DisableKeyword("_ALPHATEST_ON"); pMaterial.DisableKeyword("_ALPHABLEND_ON"); pMaterial.DisableKeyword("_ALPHAPREMULTIPLY_ON"); pMaterial.renderQueue = -1; break; case BlendMode.Cutout: pMaterial.SetFloat("_Mode", 1); pMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); pMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); pMaterial.SetInt("_ZWrite", 1); pMaterial.EnableKeyword("_ALPHATEST_ON"); pMaterial.DisableKeyword("_ALPHABLEND_ON"); pMaterial.DisableKeyword("_ALPHAPREMULTIPLY_ON"); pMaterial.renderQueue = 2450; break; case BlendMode.Fade: pMaterial.SetFloat("_Mode", 2); pMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); pMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); pMaterial.SetInt("_ZWrite", 0); pMaterial.DisableKeyword("_ALPHATEST_ON"); pMaterial.EnableKeyword("_ALPHABLEND_ON"); pMaterial.DisableKeyword("_ALPHAPREMULTIPLY_ON"); pMaterial.renderQueue = 3000; break; case BlendMode.Transparent: pMaterial.SetFloat("_Mode", 3); pMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); pMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); pMaterial.SetInt("_ZWrite", 0); pMaterial.DisableKeyword("_ALPHATEST_ON"); pMaterial.DisableKeyword("_ALPHABLEND_ON"); pMaterial.EnableKeyword("_ALPHAPREMULTIPLY_ON"); pMaterial.renderQueue = 3000; break; } } } Anwendung: MaterialHelper.SetMaterialRenderingMode(DEIN_MATERIAL, MaterialHelper.BlendMode.Fade); Wenn man weitere Parameter ändern will, könnte man es wie folgt machen: void ConfigurateMeshMaterial() { meshMaterial = new Material(Shader.Find("Standard")); meshMaterial.name = "Field of View Material"; MaterialHelper.SetMaterialRenderingMode(meshMaterial, MaterialHelper.BlendMode.Fade); //meshMaterial.SetFloat("_Mode", 2); //Rendering Mode: Fade meshMaterial.SetFloat("_Metallic", 1); meshMaterial.SetFloat("_Glossiness", 0); //Smoothness meshMaterial.color = new Color32(255, 255, 255, 100); FieldOfViewGO.GetComponent<MeshRenderer>().material = meshMaterial; } Hinzukommt: Bitte einmal mit Senf beschmieren, danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
jashan Geschrieben 16. Juli 2015 Melden Share Geschrieben 16. Juli 2015 Im Editor müsste das wohl an sich schon funktionieren, oder? Aber damit es zur Laufzeit funktioniert, musst du auch folgenden Punkt beachten: 2. You must make sure Unity includes your required shader variants in the build To do this, you need to make sure Unity knows that you want to use that shader variant by including at least one Material of that type in your Assets. The material must be used in a scene or alternatively be placed in your Resources Folder - otherwise Unity will still omit it from your build, because it appeared unused. By completing both of the above steps, you have the full ability to modify your Materials using the Standard Shader at runtime. If you are interested in learning more about the details of shader variants, and how to write your own, read about Making multiple shader program variants here. Quelle: Unity Manual - Accessing and Modifying Material parameters via script 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ismoh Geschrieben 16. Juli 2015 Autor Melden Share Geschrieben 16. Juli 2015 (bearbeitet) //Edit (fürchterliche Rechtschreib-/Tippfehler korrigiert): Im Editor klappt es. Im Build auch, aber nur weil ich per Hand ein Material erstellt habe, welches dem Script 1:1 übereinstimmt. Dieses habe ich anschließend in einen Resource Ordner gelegt. bearbeitet 16. August 2015 von Ismoh Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
AgentCodeMonk Geschrieben 18. August 2015 Melden Share Geschrieben 18. August 2015 Mach doch ne Extension drauß Material _someMaterial; // a material public static class MaterialX{ public static void SetMaterialRenderingMode(this Material pMaterial, BlendMode pBlendMode) { //... } } // usage _someMaterial.SetMaterialRenderingMode(MaterialHelper.BlendMode.Fade); 2 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ismoh Geschrieben 21. August 2015 Autor Melden Share Geschrieben 21. August 2015 Den Beitrag hab ich irgendwie übersehen. Na klar. Gute Idee. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
AgentCodeMonk Geschrieben 21. August 2015 Melden Share Geschrieben 21. August 2015 ...ist ja auch von mir Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ismoh Geschrieben 21. August 2015 Autor Melden Share Geschrieben 21. August 2015 Bekommst n Keks 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.