Exemple #1
0
    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);
            }
        }
    }
Exemple #2
0
    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;
    }