public void SetOutlineTarget(GameObject inTarget, eOutlineColor color) { if (_outlineTarget == inTarget) { return; } if (_outlineTarget) { // remove the outline material from each renderer Renderer[] renderers = _outlineTarget.GetComponentsInChildren <Renderer>(); for (int i = 0; i < renderers.Length; ++i) { if (renderers[i] == null) { continue; } Material[] currentMaterials = renderers[i].sharedMaterials; if (currentMaterials.Length < 1 || (currentMaterials[currentMaterials.Length - 1] != null && !currentMaterials[currentMaterials.Length - 1].name.Contains(outlineTargetMaterial.name))) { continue; } Material[] newMaterails = new Material[currentMaterials.Length - 1]; for (int m = 0; m < newMaterails.Length; ++m) { newMaterails[m] = currentMaterials[m]; } renderers[i].sharedMaterials = newMaterails; } } _outlineTarget = inTarget; if (_outlineTarget) { // add outline material to each renderer Renderer[] renderers = _outlineTarget.GetComponentsInChildren <Renderer>(); for (int i = 0; i < renderers.Length; ++i) { if (renderers[i] == null || renderers[i].gameObject.layer == transparentFXLayer) { continue; } Material[] currentMaterials = renderers[i].sharedMaterials; if (currentMaterials.Length > 0 && (currentMaterials[currentMaterials.Length - 1] != null && currentMaterials[currentMaterials.Length - 1].name.Contains(outlineTargetMaterial.name))) { continue; } Material[] newMaterails = new Material[currentMaterials.Length + 1]; for (int m = 0; m < currentMaterials.Length; ++m) { newMaterails[m] = currentMaterials[m]; } newMaterails[currentMaterials.Length] = outlineTargetMaterial; renderers[i].sharedMaterials = newMaterails; SetOutlineColor(color); } } }
public void SetOutlineColor(eOutlineColor color) { if (_outlineColor == color) { return; } OutlineShaderSettings settings = OutlineSettings[0]; for (int i = 0; i < OutlineSettings.Count; i++) { if (OutlineSettings[i].OutlineType == color) { settings = OutlineSettings[i]; break; } } outlineTargetMaterial.SetColor("_OutlineColor", settings.OutlineColor); outlineTargetMaterial.SetFloat("_Outline", settings.OutlineWidth); _outlineColor = color; }