unity学习笔记-随笔-动态修改颜色透明度,左右滑动优化

动态修改颜色透明度

在代码中获得场景中的对象
获得其中image组件
设置color = new color(值f/255f,值f/255f,值f/255f,值f/255f);
其中最后一个值为透明度

单例模式

当一个脚本需要被多次调用的时候,用这个好像能省一点资源,因为我的脚本里被多次访问而且里面有很多的静态变量,这些比较消耗资源和内存,所以使用了单例模式,让程序在运行的时候有且只有一个脚本被多次访问

方法

在脚本中添加下面的代码
private static 你的脚本名称 _instance;
private static 你的脚本名称 Instance(){
	get{
		if(_instance == null){
			_instance = FindObjectOfType(typeof(你的脚本名称)) as 你的脚本名称;
		}
	}
}

左右滑动优化

思路

使用scroll view组件,进行自定义
添加新的脚本,重写ibegindraghandler和ienddraghandler的方法,在end的时候对scrollrect的x值进行判断,如果在我们需要的范围内则选我们需要的位置,然后赋值回去即可

代码

public class ScrollViewPlus : MonoBehaviour,IBeginDragHandler,IEndDragHandler
{
    ScrollRect rect;

    private float[] posArray = new float[] {0,0.12f,0.24f,0.365f,0.49f,0.61f};
    private float targetPos = 0;
    private bool isDrag = false;
    int index = 0;
    public void OnBeginDrag(PointerEventData eventData)
    {
        isDrag = true;
    }
    

    public void OnEndDrag(PointerEventData eventData)
    {
        isDrag = false;
        Vector2 pos = rect.normalizedPosition;
        float x = Mathf.Abs(pos.x);
        for (int i = 0; i<6;i++)
        {
            float temp = Mathf.Abs(pos.x-posArray[i]);
            if (temp<=x)
            {
                x = temp;
                index = i;
            }
        }
        targetPos = posArray[index];
        Debug.Log(targetPos);
    }

    // Start is called before the first frame update
    void Start()
    {
        rect = GetComponent<ScrollRect>();
    }

    // Update is called once per frame
    void Update()
    {
        if (!isDrag)
        {
            rect.horizontalNormalizedPosition = Mathf.Lerp(rect.horizontalNormalizedPosition,targetPos,Time.deltaTime*4);
        }
    }
}

这里的代码是参照了b站教程的,cv之后运行发现第一个图片怎么都拖不到,后来自己检查了一下是因为在for循环的时判断不是<而是<=,这样当图片在0这个范围的时候就能判定了~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淳杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值