unity实现图片轮播效果_Unity 制作图片轮播功能
功能:自动播放移动 首尾相接 鼠标移到图片上 时 移动停止并 该图片变大 鼠标离开图片恢复原形 轮播效果继续
效果如下
界面布局 大体是这个样子
scrollView就是一个底板带Image组件
Viewport负责遮罩带Mask组件
然后content前期布局使用了Group组件 不过项目需求图片尺寸要变化 所以之后关闭
子类Image是一张张图片
初版轮播 上代码
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using System.Collections.Generic;
/**
*两个背景图片平移
*/
public class BackgroundController : MonoBehaviour
{
public GameObject back1;
public GameObject back2;
public int speed = 1; //背景平移的速度
public Transform endPosition; //到达该位置,把背景移动到开始位置
public Transform startPosition; //背景从开始位置移动到结束位置
//是否移动
private bool isMove = true;
void Update()
{
if (isMove == true)
{
//两个图片的平移
back1.transform.position = new Vector3(back1.transform.position.x - speed * Time.deltaTime, back1.transform.position.y, back1.transform.position.z);
back2.transform.position = new Vector3(back2.transform.position.x - speed * Time.deltaTime, back2.transform.position.y, back2.transform.position.z);
//到达结束位置,回到开始位置,切换图片
if (back1.transform.position.x <= endPosition.transform.position.x)
{
back1.transform.position = startPosition.transform.position;
}
if (back2.transform.position.x <= endPosition.transform.position.x)
{
back2.transform.position = startPosition.transform.position;
}
}
}
}
这一步是 两个底板 首尾相连 update里一起运动 检测到达目标点 更换到尾部位置 初步轮播效果实现
下一步 上代码(完整版)
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using System.Collections.Generic;
/**
*两个背景图片平移
*/
public class BackgroundController : MonoBehaviour
{
public GameObject back1;
public GameObject back2;
public int speed = 1; //背景平移的速度
public Transform endPosition; //到达该位置,把背景移动到开始位置
public Transform startPosition; //背景从开始位置移动到结束位置
private GameObject[] ContentChilders = new GameObject[14];
void Start()
{
//进入检测添加
UnityActionclick = new UnityAction(OnPointerEnter);
EventTrigger.Entry myclick = new EventTrigger.Entry();
myclick.eventID = EventTriggerType.PointerEnter;
myclick.callback.AddListener(click);
//移出检测添加
UnityActionclick1 = new UnityAction(OnPointerExit);
EventTrigger.Entry myclick1 = new EventTrigger.Entry();
myclick1.eventID = EventTriggerType.PointerExit;
myclick1.callback.AddListener(click1);
int i = 0;
foreach (Transform childer in back1.transform)
{
ContentChilders[i] = childer.gameObject;
EventTrigger trigger = ContentChilders[i].AddComponent();
trigger.triggers.Add(myclick);
trigger.triggers.Add(myclick1);
i++;
}
foreach (Transform childer in back2.transform)
{
ContentChilders[i] = childer.gameObject;
EventTrigger trigger = ContentChilders[i].AddComponent();
trigger.triggers.Add(myclick);
trigger.triggers.Add(myclick1);
i++;
}
}
private RectTransform selObject;
private void OnPointerEnter(BaseEventData arg0)
{
isMove = false;
PointerEventData P_EveDat = arg0 as PointerEventData;
selObject = P_EveDat.pointerCurrentRaycast.gameObject.transform as RectTransform;
selObject.sizeDelta = new Vector2(200, 200);
}
private void OnPointerExit(BaseEventData arg0)
{
isMove = true;
selObject.sizeDelta = new Vector2(160, 160);
}
//是否移动
private bool isMove = true;
void Update()
{
if (isMove == true)
{
//两个图片的平移
back1.transform.position = new Vector3(back1.transform.position.x - speed * Time.deltaTime, back1.transform.position.y, back1.transform.position.z);
back2.transform.position = new Vector3(back2.transform.position.x - speed * Time.deltaTime, back2.transform.position.y, back2.transform.position.z);
//到达结束位置,回到开始位置,切换图片
if (back1.transform.position.x <= endPosition.transform.position.x)
{
back1.transform.position = startPosition.transform.position;
}
if (back2.transform.position.x <= endPosition.transform.position.x)
{
back2.transform.position = startPosition.transform.position;
}
}
}
}
首先 foreach 获取两个组里的所有图片子类 然后给图片子类添加事件监听
EventTriggerType.PointerExit;鼠标移出的监听 对应 OnPointerEnter当鼠标进入图片的相应事件
EventTriggerType.PointerEnter 鼠标进入图片的监听
当鼠标进入图片进行 处理 停止轮播效果-->获取当前图片的尺寸-->进行尺寸放大
isMove = false;//停止轮播效果
PointerEventData P_EveDat = arg0 as PointerEventData;
selObject = P_EveDat.pointerCurrentRaycast.gameObject.transform as RectTransform;
selObject.sizeDelta = new Vector2(200, 200);
同理 鼠标移出图片进行 处理 开始轮播效果-->获取当前图片的尺寸-->进行尺寸还原
//demo地址
链接:https://pan.baidu.com/s/1hD_FcARkoetWMFq-Cqrqsg 密码:9a2m
unity实现图片轮播效果_Unity 制作图片轮播功能相关推荐
- unity实现图片轮播效果_Unity实现图片轮播组件
游戏中有时候会见到图片轮播的效果,那么这里就自己封装了一个,包括自动轮播.切页按钮控制.页码下标更新.滑动轮播.切页后的回调等等 . 下面,先上一个简陋的gif动态效果图 从图中可以看出,该示例包括了 ...
- html图片翻页效果代码,js图片翻书效果代码分享
这是一款基于javascript实现图片翻书效果代码,图片可以从左右两个方向进行切换,用户还可以自定义对应图片的标题与文字说明,是一款非常实用的图片特效源码. 七夕情人节也可以是表白的神器,放一些回忆 ...
- unity实现图片轮播效果_unity 背景无限循环滚动效果
背景无限循环滚动效果如下示: 步骤如下: 导入背景图片后,设置图片的格式,如下图: 2.图片格式也可以设置是Texture格式,但是Wrap Mode 一定要是Repeat[重复发生]:然后记得App ...
- php轮播效果代码,CSS实现轮播图效果(附代码)
CSS实现轮播图效果(附代码) 理论基础 CSS3 animation 属性和 @keyframes 规则 主体思想 1.准备相同大小的多个图片 2.将要展示图片横排放在一个图片容器里面 3.在图片容 ...
- 【Unity】刮刮乐效果(擦除图片像素值)
实现类似刮刮乐效果,擦除图片指定像素值(修改图片Alfa通道) 参考Unity刮刮乐工程源码的实现原理,对实现方式有一些调整 这里RawImage需要保持原图大小,不能缩放,不然坐标计算会有偏差 us ...
- jar包导出无法显示图片或者音乐_如何制作图片视频短片,配上音乐闪耀朋友圈!...
把图片制作成视频短片,再配上一首好听的音乐,发到朋友圈,不仅可以更具创意的分享自己的生活点滴,更能因您的创意获得一大票的赞哦!看到别人分享自己制作的图片视频短片,是不是心痒痒也想做一个呢?今天就教你使 ...
- css背景图片高斯模糊_CSS3 filter(滤镜) 制作图片高斯模糊无需JS
本帖最后由 fengrui99 于 2019-7-8 11:20 编辑 这是一个寂寞的工作日,因为没有女盆友所以很寂寞,因为很寂寞所以来写教程.希望再看教程的你也是单身!啊,知道你是单身枫瑞贼开心!爽 ...
- html做图片模糊效果,CSS3 filter(滤镜) 制作图片高斯模糊无需JS
CSS3 filter(滤镜) 制作图片高斯模糊无需JS 这是一个寂寞的工作日,因为没有女盆友所以很寂寞,因为很寂寞所以来写教程.希望再看教程的你也是单身!啊,知道你是单身枫瑞贼开心!爽的一B!!!起 ...
- 制作关于计算机的ppt图片,10步教你制作图片墙PPT封面
PPT封面设计相信对于很多朋友们来说,一直都是比较头疼的问题.很多朋友在PPT封面时,尤其是PPT图片墙封面时往往得不到其中的设计要领. (电脑入门到精通网 www.58116.cn) 图片墙,是由不 ...
最新文章
- iOS 性能优化总结
- python培训班价格-成都Python课程
- NetCDF Overview
- 制作本地 CentOS-7-x86_64-Everything-2009.iso对应的源
- leetcode 119. 杨辉三角 II
- proxy connect abort处理方法_Java代理设计模式(Proxy)的几种具体实现
- 揭秘政企安全加速解决方案的架构与应用场景实践
- java+arrayblockquene_Java源码分析-ArrayBlockingQueue
- 频发:记ADG备库日志应用延迟的一次故障处理-云和恩墨技术通讯精选
- 目标检测算法之FPN(附FPN代码实现)
- php是否支持64位,phpstudy默认不支持64位php的解决方法
- extern 详解(内有extern C 讲解)
- .htaccess跳转https
- Golang中unsafe.Sizeof()的问题
- 计算机软件著作权模板及个人申请全套攻略-软著
- nfc修改饭卡软件下载_手机nfc模拟门禁卡app-NFC卡模拟软件中文版下载安卓标准版-西西软件下载...
- PHP 实现防抖功能(防重复请求)
- 关于微信开发者没有上传按钮的问题
- SAP 物料评估类未填写
- kafka eagel的使用
热门文章
- 今天是我的生日,也是我的离职日!
- canvas应用——圆角矩形图片
- npm install node-sass的时候报错ERR gyp ERR C++
- CorelDraw论坛cdr2022V24.0.0301简体中文包
- 错误:类 SubClass 是公共的, 应在名为 SubClass.java 的文件中声明
- GTD时间管理工具Omnifocus 3 Mac中文版
- C语言有大约40个运算符,最常用的有这些
- 基于编码应用的主观全景视频质量评价数据库(译)
- mac 修改 DNS
- 基于图像特征点匹配的三维立体重建