Unity 使用Scroll View滑动栏实现缩放选择效果

工程下载

链接:https://pan.baidu.com/s/1AQSrZJjOpHZ4wdMonvBkig 
提取码:sybj

效果图

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

public class Move : MonoBehaviour
{
    public Scrollbar bar;
    public GameObject[] itemlist;
    private float distance = 0;

    public int selectIndex = 0;
    public int lastSelectIndex = 0;
    private float time = 0;
    private float target = 0;


    // Use this for initialization
    void Start()
    {
        Info();
    }

    public void Info()
    {
        distance = 1.0f / ((float)itemlist.Length - 1);
        for (int i = 0; i < itemlist.Length; i++)
        {
            itemlist[i].GetComponent<Item>().x = distance * i;
        }
        int value = (int)(bar.value / distance + 0.5f);
        for (int i = 0; i < itemlist.Length; i++)
        {
            if (i > value)
                itemlist[i].transform.SetSiblingIndex(itemlist.Length - 1 - i + value);
            else if (i < value)
                itemlist[i].transform.SetSiblingIndex(i);
            else if (i == value)
                itemlist[i].transform.SetSiblingIndex(itemlist.Length - 1);
        }
    }

    public void PointUp()
    {
        int value = (int)(bar.value / distance + 0.5f);

        selectIndex = value;
        target = distance * value;
        itemlist[selectIndex].transform.SetSiblingIndex(itemlist.Length - 1);

        time = 0;
        lastSelectIndex = selectIndex;
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonUp(0))
        {
            PointUp();
        }

        if (Input.GetMouseButton(0))
        {
            int value = (int)(bar.value / distance + 0.5f);

            for (int i = 0; i < itemlist.Length; i++)
            {
                if (i > value)
                    itemlist[i].transform.SetSiblingIndex(itemlist.Length - 1 - i + value);
                else if (i < value)
                    itemlist[i].transform.SetSiblingIndex(i);
                else if (i == value)
                    itemlist[i].transform.SetSiblingIndex(itemlist.Length - 1);
            }
            time += Time.deltaTime;
            return;
        }

        if (target != bar.value)
        {
            if (bar.value < target)
                bar.value += Time.deltaTime / 5;
            if (bar.value >= target)
                bar.value -= Time.deltaTime / 5;

            if (Mathf.Abs(bar.value - target) < 0.01f)
            {
                bar.value = target;
            }
        }
    }

    public GameObject Max;
    public Image max_image;

    public void PointClick()
    {
        if (time < 0.5f && selectIndex == lastSelectIndex)
        {
            Max.SetActive(true);
            Debug.Log("selectIndex" + selectIndex);
            max_image.sprite = itemlist[selectIndex].GetComponent<Image>().sprite;
        }
    }

    public void OnClick_MaxCloseEvent()
    {
        Max.SetActive(false);
    }
}

通过Scrollbar.value滑动值判定滑动了几个位置,然后改变物体索引值达到缩放效果

 

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

public class Item : MonoBehaviour
{
    public Scrollbar bar;
    public float x;

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        transform.localPosition = new Vector3(-(bar.value - x) * 500, 0, 0);
        float scale = 1 - Mathf.Abs(bar.value - x) * 0.5f;
        transform.localScale = new Vector3(scale, scale, 1);
    }
}
 

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
### 回答1: Unity中的ScrollView组件可以实现滑动效果,可以用于显示大量内容的列表或者滚动视图。用户可以通过手势或者鼠标滚轮来滑动视图,从而查看不同的内容。ScrollView组件需要包含一个Content子对象,用于存放要显示的内容。可以通过设置Content的大小和位置来控制滑动视图的范围和滚动条的位置。在代码中,可以通过调用ScrollViewScrollTo方法来控制滑动位置。 ### 回答2: Unity Scroll ViewUnity中提供的一种用于滚动界面的工具。使用Scroll View可以轻松实现在界面内显示过长的内容,从而增加界面的可读性和互动性。Scroll View可以用于多种类型的内容,例如文本、图像、列表等等。 在Unity使用Scroll View非常简单。首先,在场景中创建一个Scroll View对象,然后将需要滚动的内容添加到Scroll View的视图框内。接着,设置Scroll View的属性,如滚动速度、边界等等。最后,在脚本中调用Scroll View的方法,即可实现滚动。 Scroll View滑动可以通过鼠标、触摸屏或键盘进行操作。在移动设备上,用户可以通过手指在屏幕上滑动实现滚动。而在PC上,则可以通过鼠标滚轮或方向键来进行滚动。 Scroll View除了支持基本的滚动功能外,还支持多种扩展功能。例如,可以通过代码来动态添加、删除和修改视图框中的内容;也可以通过代码来控制滚动条的显隐和位置等等。 总之,Scroll ViewUnity中非常实用的一个工具,可以用于各种类型的应用程序和游戏。掌握Scroll View使用方法,可以大大提升界面的交互性和用户体验。 ### 回答3: UnityScrollViewUnity中常用的滑动控件,它通常用于展示大量的内容,同时也能够进行滚动浏览。下面我们来详细了解一下UnityScrollView的相关知识。 首先,在使用ScrollView前需要先在场景中选择一个空的GameObject,并将其添加上ScrollView组件。接下来在ScrollView组件中可以看到一个RectTransform,我们需要在其中添加一个Panel,这个Panel就是ScrollView滑动容器,所有需要展示的内容都要添加到这个Panel中。同时在ScrollView的组件中,需要设置Viewport的值,将其指向我们添加的Panel。 接下来就是设置ScrollView滑动属性,其中Scroll Rect组件表示滑动的属性,可以设置滑动的速度,以及在滑动时是否需要惯性效果。 Content Size Fitter组件表示ScrollView滑动区域的大小,可以根据内容的实际大小进行自适应设置。Horizontal Layout Group和Vertical Layout Group分别表示横向和纵向的布局方式,可以根据需要选择不同的布局方式。Scrollbar组件表示ScrollView中的滚动条,可以设置滚动条的样式和位置等。 在ScrollView中添加内容也很简单,只需要在Panel中添加需要展示的内容即可,同时需要注意设置好Content Size Fitter以及Layout Group等属性,确保内容能够正常显示和适应不同屏幕的大小。同时,ScrollView还提供了一些事件,例如On Value Changed事件,在滚动时会触发,可以用于实现一些自定义的逻辑。 总之,使用UnityScrollView可以快速地实现复杂的滚动功能,同时它的设置和使用也不难,只需要注意ScrollView的各个组件的设置以及添加内容时的一些细节即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天一丶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值