Unity 图片滑动

news/2024/11/9 2:03:01/

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 updatevoid 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)];}}
}

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


http://www.ppmy.cn/news/357413.html

相关文章

如何使用js实现两张图片的相似度比较

最近换季容易感冒&#xff0c;小伙伴们及各位大佬一定要注意身体&#xff0c;每年的这个时候都要渡一次劫。 进博会马上就要来临&#xff0c;最近公司在做一个关于进博会的活动。我是不负责这个项目的。但是看到我们给甲方的稿子甲方老是不满意&#xff0c;老是让修改&#xff…

微信小程序 - 完美解决 rich-text 富文本解析图片无法自适应宽高问题,图片超出屏幕宽度且不受控(详细示例源码,简单快速无需任何第三方插件)

前言 本文将提供一个函数,帮助您解决图片无法适应的问题,另外函数中还提供了一些常见的样式处理。 使用官方 <rich-text> 组件或第三方插件解析富文本时,当内容包含图片时显示的结果就会超出父容器宽度, 会导致出现横向滚动条与图片变形,如下图所示对比情况。 解决…

python读取、显示、保存图片的几种方法

目录 读取图像使用opencv读取使用PIL包读取 保存图片显示图片代码总结 读取图像 读取图像我一般采用的有两种方法&#xff0c;如果想要读成numpy数组格式就用opencv方式&#xff0c;想要读成Image对象格式就用PIL包读取。 使用opencv读取 如果是读取灰度图&#xff0c;需要指…

Latex中插入图片

1、Latex的插图 在Latex中使用插图一般有两种方式&#xff0c;一种是插入事先准备好的图片&#xff0c;另一种是使用Latex代码直接在文档中画图。我们一般常见的使用都是第一种&#xff0c;准备好图片&#xff0c;然后直接插入在我们文档当中。只有一些特殊情况需要用大量代码…

前端|加载的图片太多五种优化方法

摘要 web性能的终极目标是减少资源到客户端的延迟,但是我们在HTTP1.0/HTTP1.1协议中经常会遇到加载的图片太多或者太大导致页面加载完成慢的问题:图片太多导致向服务器请求的次数太多,图片太大导致每次请求的时间过长. 本篇将针对图片太多或者太大总结几种优化方案. 一.当图片…

安卓图片适配

接着上一篇安卓适配详解之后&#xff0c;本篇文章介绍一下图片的适配&#xff0c;大致分为两个部分&#xff1a; deawable 文件适配.9图片的使用 drawable 首先根据设备的dpi建立相应的文件夹&#xff0c;放置不同大小的图片&#xff0c;如下图&#xff1a; 这里可以看出…

vue导入及使用本地图片

MSite.vue导入本地图片 图片所在位置&#xff1a; 1.直接使用 <template><img src"./image/1.jpg"/> </tempalte>2.data里使用require <template><img :src"imgUrl"> </template> <script> export default …

C++读取图片

C读取图片 以C风格&#xff08;文件流&#xff09;而不是C风格&#xff08;FILE&#xff09;读取图片。 补充&#xff1a;也可以使用opencv的cv::imread()函数读取图片&#xff0c;这个函数返回的是cv:Mat类型&#xff0c;在计算机视觉(CV)领域用的比较多。 使用到的头文件主要…