Exemplo n.º 1
0
 /// <summary>
 /// 开启角色的边缘光效果
 /// </summary>
 /// <param name="state">true开启,false关闭</param>
 /// <param name="col">边缘光颜色</param>
 /// <param name="width">边缘光宽度,0最宽,角色全亮,10以上很窄</param>
 public void SetEdgeLit(bool state, Color col, float width)
 {
     if (SMR == null || SMR.Length < 1)
     {
         return;
     }
     foreach (var smr in SMR)
     {
         int matCount = smr.sharedMaterials.Length;
         for (int i = 0; i < matCount; i++)
         {
             smr.GetPropertyBlock(MPB, i);
             if (state)
             {
                 MPB.SetInt(edgeLightId, 1);
                 MPB.SetFloat(edgeColorWidthId, width);
                 MPB.SetColor(edgeColorId, col);
             }
             else
             {
                 MPB.SetInt(edgeLightId, 0);
             }
             smr.SetPropertyBlock(MPB, i);
         }
     }
 }
Exemplo n.º 2
0
    private void SetPosClipValue(int isOn, float zPos, Color color)
    {
        if (SMR == null || SMR.Length < 1)
        {
            return;
        }
        Matrix4x4 localSpace = transform.worldToLocalMatrix;

        foreach (var r in SMR)
        {
            for (int i = 0; i < r.sharedMesh.subMeshCount; i++)
            {
                r.GetPropertyBlock(MPB, i);
                MPB.SetMatrix(localSpaceProp, localSpace);
                MPB.SetInt(_UsePosClipProp, isOn);
                MPB.SetFloat(_PosMaskZProp, zPos);
                MPB.SetColor(_PosMaskEdgeColorProp, color);
                r.SetPropertyBlock(MPB, i);
            }
        }
    }
Exemplo n.º 3
0
        public void SetAlpha(float alpha, bool trackValue = true)
        {
            if (!ShaderProperties)
            {
                return;
            }

            if (FadeMode == Modes.SeparateMaterials)
            {
                if (!OpaqueMaterial || !TransparentMaterial)
                {
                    return;
                }

                //set opaque or transparent material
                Material m = Mathf.Approximately(alpha, 1) ? OpaqueMaterial : TransparentMaterial;
                if (CurrentMaterial != m)
                {
                    SetMaterial(m);
                    CurrentMaterial = m;
                }
            }

            for (int i = 0; i < Renderers.Length; i++)
            {
                //for each renderer:
                Renderer r = Renderers[i];

                //just skip null/missing renderers for now - not sure how to keep the list up to date in every situation yet
                if (!r)
                {
                    continue;
                }

                //turn renderer on or off
                if (Mathf.Approximately(alpha, 0f))
                {
                    if (r.enabled)
                    {
                        r.enabled = false;
                    }
                }
                else if (!r.enabled)
                {
                    r.enabled = true;
                }

                //initialize property block with default material values
                ShaderProperties.SetProperties(MPB, r.sharedMaterial, clear: true);

                //add per-renderer colors back in
                PerRendererColor prc = r.GetComponent <PerRendererColor>();
                if (prc && prc.enabled)
                {
                    MPB.SetColor(prc.ColorName, prc.Color);
                }

                //scale alpha based on min/max alpha
                float scaledAlpha = Mathf.Lerp(MinAlpha, MaxAlpha, alpha);

                //set alpha value of all colors
                ShaderProperties.SetAlpha(MPB, scaledAlpha);

                //apply property block
                r.SetPropertyBlock(MPB);
            }

            if (trackValue)
            {
                CurrentValue = alpha;
            }
        }