动态修改颜色透明度
在代码中获得场景中的对象
获得其中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这个范围的时候就能判定了~