记录使用Sprite Mask精灵遮罩

实现效果
在这里插入图片描述

精灵遮罩
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class BlakeColourRender : MonoBehaviour
{
    public RenderData[] renderDatas;
    private bool startChangeAlphaAndScaleValues;

    void Start()
    {
        renderDatas = new RenderData[3];
        for (int i = 0; i < renderDatas.Length; i++)
        {
            renderDatas[i] = new RenderData();
        }
        //获取背景底色信息,放入0号位
        GetDatas(transform.GetChild(0), 0);
        //获取晕开颜色信息
        GetDatas(transform.GetChild(1), 1);
        //获取其他颜色信息
        GetDatas(transform.GetChild(2), 2);
    }

    void Update()
    {
        ChangeAlphaAndScaleValues();
    }
    
    // 启动修改下层颜色透明度与缩放值的开关(外部调用)
    public void StartChangeAlphaAndScaleValues()
    {
        startChangeAlphaAndScaleValues = true;
    }

    // 修改下方颜色透明度以及缩放功能
    private void ChangeAlphaAndScaleValues()
    {
        if (startChangeAlphaAndScaleValues)
        {
            for (int i = 0; i < renderDatas[2].srs.Length; i++)
            {
                ChangeAlphaValue(renderDatas[2].srs[i], renderDatas[2].aValues[i]);
                ChangeScaleValue(renderDatas[2].trans[i], renderDatas[2].scales[i]);
            }
        }
    }

    /// <summary>
    ///  改变某一个带有精灵渲染器的游戏物体的缩放值
    /// </summary>
    /// <param name="t"></param>
    /// <param name="targetValue"></param>
    private void ChangeScaleValue(Transform t, Vector3 targetValue)
    {
        if (t.localScale.x <= targetValue.x)
        {
            t.localScale += Vector3.one * 1 * Time.deltaTime;
        }
    }


    /// <summary>
    /// 向目标值进行改变某一个精灵渲染器中透明度值
    /// </summary>
    /// <param name="sr"></param>
    /// <param name="targetValue">目标值</param>
    private void ChangeAlphaValue(SpriteRenderer sr, float targetValue)
    {
        if (sr.color.a <= targetValue)
        {
            sr.color += new Color(0, 0, 0, 1) * Time.deltaTime;
        }
    }

    /// <summary>
    /// 渐变改变某一个精灵遮罩透明度裁剪值
    /// </summary>
    /// <param name="sm"></param>
    private void ChangeAlphaCutoffValue(SpriteMask sm)
    {
        if (sm.alphaCutoff >= 0.2f)
        {
            sm.alphaCutoff -= 0.1f * Time.deltaTime;
        }
    }

    /// <summary>
    /// 获取原始状态数据并设置默认值
    /// </summary>
    /// <param name="targetTrans">想要记录所有子对象信息的根游戏物体的Transform组件</param>
    /// <param name="index">想存贮到的数组索引位置中</param>
    private void GetDatas(Transform targetTrans, int index)
    {
        //获取精灵渲染器组件,存贮alpha值并在后续把alpha值设置回精灵渲染器组件里
        renderDatas[index].srs = targetTrans.GetComponentsInChildren<SpriteRenderer>();



        //不new报空
        int renderDataslength = renderDatas[index].srs.Length;

        renderDatas[index].trans = new Transform[renderDataslength];
        renderDatas[index].scales = new Vector3[renderDataslength];

        renderDatas[index].aValues = new float[renderDataslength];

        for (int i = 0; i < renderDataslength; i++)
        {
            //存储数据
            //获取有精灵渲染器组件的transform,后续可以把缩放值设置回对应的游戏物体上
            renderDatas[index].trans[i] = renderDatas[index].srs[i].transform;

            //获取有精灵渲染器组件的transform中的缩放值
            renderDatas[index].scales[i] = renderDatas[index].trans[i].localScale;

            //获取有精灵渲染器组件的alpha值
            renderDatas[index].aValues[i] = renderDatas[index].srs[i].color.a;


            //设置默认状态(值)
            renderDatas[index].trans[i].localScale = Vector3.zero;
            //设置RBGA值
            renderDatas[index].srs[i].color = new Color(renderDatas[index].srs[i].color.r, renderDatas[index].srs[i].color.b, renderDatas[index].srs[i].color.g, 0);
        }

        //获取含mask的物体
        renderDatas[index].sms = targetTrans.GetComponentsInChildren<SpriteMask>();
        for (int i = 0; i < renderDatas[index].sms.Length; i++)
        {
            renderDatas[index].sms[i].alphaCutoff = 1;
        }
    }
}


[System.Serializable]
public class RenderData
{
    public SpriteMask[] sms;
    public SpriteRenderer[] srs;
    public Vector3[] scales;
    public float[] aValues;
    public Transform[] trans;
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class ColourOnOff : MonoBehaviour
{
    private BlakeColourRender rc;
    void Update()
    {
        rc = GameObject.Find("RenderColors").GetComponent<BlakeColourRender>();
        if (Input.GetMouseButtonDown(0))
        {
            rc.StartChangeAlphaAndScaleValues();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值