Unity 图片滑动

Unity Scroll View图片滑动

前言

在多媒体行业中,会有许多关于播放图片的软件诞生,切换图片有比较多的方式,下面介绍比较常用的两种,一个是只切换Image的图片精灵Sprite,一个是带有滑动过程的Scroll View切换,在这个时候unity自带的Scroll View组件就派上用场了。但是Scroll View组件无法自动定位到某一张图片,想要手指滑动一次移动到某一张还是要借助代码的力量。下面就是如何切换图片的两种常用方法:

(1)切换图片精灵
这里使用一种比较常用的加载图片的方法,将需要展示的图片放置于Resources文件夹下,后续使用脚本读取,如图所示:
在这里插入图片描述

在创建的Image上挂载脚本ChangeImageSprite.cs
在这里插入图片描述
脚本内容如下:

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

public class ChangeImageSprite : MonoBehaviour
{
    Image mainimg;
    Sprite[] change_sp;

    Vector3 start_pos;
    Vector3 end_pos;
    int count;
    // Start is called before the first frame update
    void Start()
    {
        mainimg = transform.GetComponent<Image>();
        change_sp = Resources.LoadAll<Sprite>("Image");
    }

    void Update()
    {
        if (Input.touchCount>0)
        {
            switch (Input.GetTouch(0).phase)
            {
                case TouchPhase.Began:
                    start_pos = Input.GetTouch(0).position;
                    break;

                case TouchPhase.Moved:

                    break;
                case TouchPhase.Ended:
                    end_pos = Input.GetTouch(0).position;
                    float offset = end_pos.x - start_pos.x;
                    //向左滑动
                    if (offset < 0)
                    {
                        if (count < change_sp.Length - 1)
                        {
                            count++;
                        }
                    }
                    //向右滑动
                    else if (offset > 0)
                    {
                        if (count > 0)
                        {
                            count--;
                        }
                    }
                    mainimg.sprite = change_sp[count];
                    break;
            }
        }
    }
}

演示效果如下:

在这里插入图片描述
(2)Scroll View播放
将Scroll View调整到相应大小,选择方向(本案例为横向)如图所示:
在这里插入图片描述
Content添加Content Size Fitter和Grid Layout Group,调整组件设置,如图所示:
在这里插入图片描述
将图片添加到Content下面:
在这里插入图片描述
为Scroll View挂上脚本,脚本如下:

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

public class ScrollViewScript : MonoBehaviour, IBeginDragHandler, IEndDragHandler
{

    private float movespeed; 
    private int pageCount = 1; 
    Transform content;
    private ScrollRect Rect;

    private float pageIndex;   
    private bool isDrag = false;  

    private List<float> PageList = new List<float> { 0 }; 
    private float targetPos = 0;
    private float nowindex = 0;  

    private float beginDragPos;
    private float endDragPos;
    private float sensitivity = 0.5f;  
    void Awake()
    {
        Rect = this.GetComponent<ScrollRect>();
        InitPageList();
        movespeed = 10;
    }

    
    void InitPageList()
    {
        content = transform.Find("Viewport/Content");
        pageIndex = (content.childCount / pageCount)-1;
        if (content != null && content.childCount != 0)
        {
            for (float i = 1; i <= pageIndex; i++)
            {
                PageList.Add((i / pageIndex));
            }
        }
    }

    void Update()
    {
        if (!isDrag)
        { 
            Rect.horizontalNormalizedPosition = Mathf.Lerp(Rect.horizontalNormalizedPosition, targetPos, Time.deltaTime * movespeed);
        }
    }

    
    public void OnBeginDrag(PointerEventData eventData)
    {
        isDrag = true;
        beginDragPos = Rect.horizontalNormalizedPosition;
    }

    
    public void OnEndDrag(PointerEventData eventData)
    {
        isDrag = false;
        endDragPos = Rect.horizontalNormalizedPosition;
        endDragPos = endDragPos > beginDragPos ? endDragPos + sensitivity : endDragPos - sensitivity;
        float offset = endDragPos-beginDragPos;
        if (offset<0)
        {
            nowindex = Mathf.Clamp(nowindex - 1, 0, pageIndex);
            targetPos = PageList[Convert.ToInt32(nowindex)];
        }
        else if(offset>0)
        {
            nowindex = Mathf.Clamp(nowindex + 1, 0, pageIndex);
            targetPos = PageList[Convert.ToInt32(nowindex)];
        }
    }
}

效果演示:
在这里插入图片描述

  • 12
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你可以使用Unity的UI系统中的Scroll Rect组件来实现左右滑动切换图片的效果。具体步骤如下: 1. 在场景中创建一个UI元素,如Panel。 2. 在Panel上添加一个Scroll Rect组件。 3. 在Scroll Rect中添加一个Content子元素,用于存放图片。 4. 在Content上添加一个Horizontal Layout Group组件,设置为水平布局。 5. 在Content下创建多个子元素,每个子元素代表一个图片,并添加Image组件显示图片。 6. 在代码中获取Scroll Rect组件,并监听其onValueChanged事件。 7. 在事件回调函数中获取Scroll Rect的normalizedPosition属性,判断其x值是否达到了切换图片的阈值。 8. 如果达到了阈值,根据滑动方向调整Content的位置,实现图片切换的效果。 下面是一个简单的示例代码: ```csharp using UnityEngine; using UnityEngine.UI; public class ImageSlider : MonoBehaviour { public float threshold = 0.5f; // 切换图片的阈值 public float speed = 10f; // 切换图片的速度 private ScrollRect scrollRect; private RectTransform content; private int currentIndex = 0; void Start() { scrollRect = GetComponent<ScrollRect>(); content = scrollRect.content; scrollRect.onValueChanged.AddListener(OnScroll); } void OnScroll(Vector2 pos) { if (Mathf.Abs(pos.x - currentIndex) > threshold) { currentIndex = (int)pos.x; float targetX = content.rect.width * currentIndex; Vector2 targetPos = new Vector2(targetX, content.anchoredPosition.y); content.anchoredPosition = Vector2.Lerp(content.anchoredPosition, targetPos, Time.deltaTime * speed); } } } ``` 在使用时,将该脚本挂载到Scroll Rect所在的GameObject上,并设置threshold和speed参数即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值