Unity简单实现图片墙功能

前言

在做之前公司的项目中,我做过很多实现照片墙效果的功能。其中我觉得我做的效果比较好而且比较有难度的就是雀巢项目中的那个仿照apple watch拖拽效果实现的那个照片墙功能。这个项目我在之前的博客中已经做过简单的介绍了,在这里不在赘述。今天在这篇博客中介绍下我在一家公司面试时,这家给我留得机试题,其实这个功能实现起来也不是很难,我在这里做下简单的介绍,实现效果如下图所示:

步骤

一、在项目中导入DoTween插件,图片的移动和放大变化需要用到这个插件,如下图所示:
二、编写ChangeImages.cs脚本,实现图片变化的核心功能,代码如下所示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;public class ToChangeImages : MonoBehaviour
{float enlargeSize = 2.0f;float radiateSize = 220;Dictionary<RectTransform, Vector2> itemPosDict = new Dictionary<RectTransform, Vector2>();List<RectTransform> changedItemList = new List<RectTransform>();public RectTransform[] item; // Use this for initializationvoid Start (){StartThis();}void StartThis(){for (int i = 0;i<item.Length;i++){RectTransform item0 = item[i];//Vector2 startPos = item0.position;Vector2 startPos = item0.transform.localPosition;Debug.Log(startPos.ToString());itemPosDict.Add(item0,startPos);}}// Update is called once per framevoid Update () {}public void OnMousePointEnter(RectTransform item1){//缓动改变中心物体的尺寸item1.DOScale(enlargeSize,0.5f);Vector2 pos = itemPosDict[item1];changedItemList = new List<RectTransform>();//添加扩散物体到集合foreach (KeyValuePair<RectTransform,Vector2> i in itemPosDict){if (Vector2.Distance(i.Value,pos) < radiateSize){changedItemList.Add(i.Key);}}//缓动来解决扩散物体的动画for (int i = 0; i < changedItemList.Count; i++){Vector2 targetPos = itemPosDict[item1] + (itemPosDict[changedItemList[i]] - itemPosDict[item1]).normalized * radiateSize;changedItemList[i].DOAnchorPos(targetPos, 0.8f);}}public void OnMousePointExit(RectTransform go){//缓动恢复中心物体的尺寸go.DOScale(1,1);//缓动将扩散物体恢复到初始位置for (int i = 0;i < changedItemList.Count;i++){changedItemList[i].DOAnchorPos(itemPosDict[changedItemList[i]],0.8f);}}
}

三、根据自己需要排列UI,我的测试UI排列如下图所示:
四、在每个Image组件下添加EventTrigger组件,添加PointerEnter和PointerExit功能,并将脚本中对应的方法赋值到其中,如下图所示:
五、运行项目实现效果如下图所示:

相关链接

下载连接1
下载链接2

Unity简单实现图片墙功能相关推荐

  1. html借助JS简单实现图片闪烁功能

    图片闪烁 功能: 点击按钮,实现图片闪烁 效果如图: 代码如下: <!DOCTYPE html> <html><head><meta charset=&quo ...

  2. 【ANDROID游戏开发十六】ANDROID GESTURE之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!...

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/337.html - ...

  3. Android开发—简单的图片浏览器

    开发工具:ecplise 图片浏览器:实现简单的图片浏览功能,点击当前图片会自动切换到下一张图片 1.先在布局文件中定义一个简单的线性布局容器 <?xml version="1.0&q ...

  4. 【SpringBoot】写一个具有留言墙功能的JavaWeb

    [SpringBoot]写一个具有留言墙功能的JavaWeb 项目已经部署上线 一.需求说明 二.概要设计 三.详细设计 (一)数据库设计 (二)页面设计 (三)功能设计 (四)项目结构 四.具体代码 ...

  5. alert()的功能_前端实现简单的图片上传小图预览功能

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  6. iOS开发------简单实现图片多选功能(Photos.framework篇)

    Photos.framework是iOS8后苹果推出的一套替代AssetsLibrary.framework获取相册资源的原生库,至于AL库,欢迎大家给博文iOS开发--简单实现图片多选功能(Asse ...

  7. 简单实现图片多选功能

    iOS开发------简单实现图片多选功能(Photos.framework篇) 楼主大部分都是查看官方开发文档进行探索的(当然,实在不明白了也会请求google 的 0.0 ).这里就说一下个人的看 ...

  8. 【ps功能精通】4.简单背景图片抠图

    [ps功能精通]4.简单背景图片抠图 学习目标: 学习内容: 学习时间: 学习产出: 一.套索工具组(L) 二.魔棒工具(W) 三.橡皮擦工具组 四.色彩范围: 学习目标: 简单背景图片抠图 学习内容 ...

  9. d3.js 旋转图形_一个简单易用但功能强大的图形矢量化软件,扫描图片转换成CAD图的软件等等...

    背景简介 很多童鞋可能可能有想要把图片转成CAD能打开的格式,但是找不到软件,今天要分享的这个软件值得一试. 内容简介 AlgoLabR2VToolkit是一个将光栅图像转换为矢量图像的软件,转换后的 ...

最新文章

  1. 关于博客园与CSDN博客同步的说明
  2. PCIe配置空间和PCI设备中的寄存器
  3. docker-elk装IK自定义分词库
  4. react 常用规范和经验
  5. 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-(一千零一拾一元整)输出。...
  6. JEECG智能开发平台-项目选型最爱
  7. 深入浅出VC++串口编程--基于Win32 API
  8. mybatis 3的TypeHandler深入解析(及null值的处理)
  9. 巴伦变压器电路图_基于变压器原理的巴伦电路系统分析
  10. Windows自带利器:Rundll.exe高级应用
  11. 使用C#进行数据库增删改查(一)
  12. 【电脑自检后无法进入电脑系统的搞定妙方】
  13. 选择性粘贴出现html,为什么我把EXCEL表中的一个数据复制,选择性粘贴会出现这个对话框?...
  14. 珀莱雅:融资净买入201.72万元,融资余额2.52亿元
  15. DEP(Data Execution Prevention) 数据执行保护
  16. 原生JS购物车---cookie应用
  17. 如何让暴风影音播放flv文件
  18. 程序员职业规划之技术的精进-安晓辉-专题视频课程
  19. 十六进制转字符串或char字符数组
  20. 为什么BFE可以取代Nginx

热门文章

  1. 《STM32学习笔记》3——核心功能电路与编程(上)
  2. 计算机组装时应该注意的硬件参数,深度解析组装一台计算机需要注意的兼容性问题...
  3. SpaceX 预计2至3年内开始环球客运测试;北斗卫星导航系统完成全球组网
  4. react umi.js echars.js ie9兼容性问题
  5. 评委打分 选手得分计算
  6. 2021年衡阳仁爱中学高考成绩查询,直选生考试刚刚结束,衡阳这所学校有30余名学生保送!直升重点高中重点班!...
  7. vuejs中如何实现三级路由并刷新页面时保持当前路由激活状态
  8. WEB-TapTapTap-Webshell
  9. 二叉树的遍历与凹入表形式的二叉树打印
  10. win7c盘满了怎么彻底清理?教你win7彻底清理c盘的详细步骤