public static void SetLightMap(GameObject obj, int index, Vector4 offset) { List <Component> renderers = getComponentByType(obj, typeof(Renderer)) as List <Component>; if (renderers != null && (renderers.Count > 0)) { for (int i = 0; i < renderers.Count; i++) { Renderer renderer = renderers[i] as Renderer; if (renderer != null) { renderer.lightmapIndex = index; renderer.lightmapScaleOffset = offset; for (var j = 0; j < renderer.materials.Length; j++) { renderer.materials[j].shader = FuncUtil.FindShader(renderer.materials[j].shader.name); } } } } else { Terrain t = obj.GetComponent <Terrain>(); if (t != null) { t.lightmapIndex = index; t.lightmapScaleOffset = offset; } } }
public static void ResetShader(GameObject obj) { List <Component> renderers = getComponentByType(obj, typeof(Renderer)); if (renderers != null && (renderers.Count > 0)) { for (int i = 0; i < renderers.Count; i++) { Renderer renderer = renderers[i] as Renderer; for (var j = 0; j < renderer.materials.Length; j++) { renderer.materials[j].shader = FuncUtil.FindShader(renderer.materials[j].shader.name); } } } }
/// <summary> /// Create an appropriate material for the draw call. /// </summary> void CreateMaterial() { mTextureClip = false; mLegacyShader = false; mClipCount = panel.clipCount; string shaderName = (mShader != null) ? mShader.name : ((mMaterial != null) ? mMaterial.shader.name : "Unlit/Transparent Colored"); // Figure out the normal shader's name shaderName = shaderName.Replace("GUI/Text Shader", "Unlit/Text"); if (shaderName.Length > 2) { if (shaderName[shaderName.Length - 2] == ' ') { int index = shaderName[shaderName.Length - 1]; if (index > '0' && index <= '9') { shaderName = shaderName.Substring(0, shaderName.Length - 2); } } } if (shaderName.StartsWith("Hidden/")) { shaderName = shaderName.Substring(7); } // Legacy functionality const string soft = " (SoftClip)"; shaderName = shaderName.Replace(soft, ""); const string textureClip = " (TextureClip)"; shaderName = shaderName.Replace(textureClip, ""); if (panel.clipping == Clipping.TextureMask) { mTextureClip = true; shader = FuncUtil.FindShader("Hidden/" + shaderName + textureClip); } else if (mClipCount != 0) { shader = FuncUtil.FindShader("Hidden/" + shaderName + " " + mClipCount); if (shader == null) { shader = FuncUtil.FindShader(shaderName + " " + mClipCount); } // Legacy functionality if (shader == null && mClipCount == 1) { mLegacyShader = true; shader = FuncUtil.FindShader(shaderName + soft); } } else { shader = FuncUtil.FindShader(shaderName); } // Always fallback to the default shader if (shader == null) { shader = FuncUtil.FindShader("Unlit/Transparent Colored"); } if (mMaterial != null) { mDynamicMat = new Material(mMaterial); mDynamicMat.name = "[NGUI] " + mMaterial.name; mDynamicMat.hideFlags = HideFlags.DontSave | HideFlags.NotEditable; mDynamicMat.CopyPropertiesFromMaterial(mMaterial); #if !UNITY_FLASH string[] keywords = mMaterial.shaderKeywords; for (int i = 0; i < keywords.Length; ++i) { mDynamicMat.EnableKeyword(keywords[i]); } #endif // If there is a valid shader, assign it to the custom material if (shader != null) { mDynamicMat.shader = shader; } else if (mClipCount != 0) { Debug.LogError(shaderName + " shader doesn't have a clipped shader version for " + mClipCount + " clip regions"); } } else { mDynamicMat = new Material(shader); mDynamicMat.name = "[NGUI] " + shader.name; mDynamicMat.hideFlags = HideFlags.DontSave | HideFlags.NotEditable; } }