using System.Collections;
using System.Collections.Generic;
using DG.Tweening; //DOTween插件
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;public class RotationChart : MonoBehaviour,IDragHandler,IEndDragHandler
{public Image[] prefab;  //可旋转的图片预制体数组public int num; //图片数量public float spacing; //图片间隔float c; //园的周长float r; //园的半径float ang; //两个图片间的夹角float dis = 0; //图片滑动距离float max = 1; //最大缩放比例float min = 0.5f; //最小缩放比例float cutSpeed =300; //切换速度List<GameObject>list = new List<GameObject>(); //可旋转的图片列表List<Transform>sorts = new List<Transform>(); //可旋转的图片的transform组// Start is called before the first frame updatevoid Start(){//计算园的周长、半径和两个图片间的夹角c = (prefab[1].rectTransform.rect.width + spacing)  num;r = c / (2  Mathf.PI);ang = (2 * Mathf.PI) / num;Move(); //移动图片}//移动图片public void Move(){float moveang = dis / r; //图片移动的弧度值for (int i = 0; i < num; i++){float x = Mathf.Sin(i  ang + moveang)  r; //计算图片位置的x坐标float z = Mathf.Cos(i  ang + moveang)  r; //计算图片位置的y坐标float p = (z + r) / (2  r); //根据y坐标计算图片的比例系数p = 1 - p;float scale = (max - min)  p + min; //计算图片的缩放比例if (list.Count<=i){GameObject image = Instantiate(prefab[i].gameObject, transform); //创建图片image.name = i.ToString();list.Add(image);sorts.Add(image.transform);}list[i].transform.localPosition = Vector3.right  x; //设置图片的位置list[i].transform.localScale = Vector3.one  scale; //设置图片的缩放比例}sorts.Sort((a, b) => //按照缩放比例排序{if (a.localScale.x < b.localScale.x){return -1;}else if (a.localScale.x == b.localScale.x){return 0;}else{return 1;}});for (int i = 0; i < sorts.Count; i++){sorts[i].SetSiblingIndex(i); //重新设置图片的顺序}}//拖拽行为public void OnDrag(PointerEventData eventData){dis += eventData.delta.x; //计算拖拽距离Move();}//拖拽结束public void OnEndDrag(PointerEventData eventData){float startspeed = eventData.delta.x; //拖拽结束时的速度float endspeed = 0;float time = Mathf.Abs(startspeed) / cutSpeed; //计算切换所需的时间DOTween.To((float a) =>{dis -= a; //计算滑动距离Move();}, startspeed, endspeed, time).OnComplete(() =>{Align(list.IndexOf(sorts[num-1].gameObject)); //对齐图片的位置});}/// <summary>/// 轮转图对齐/// </summary>/// <param name="n"></param>public void Align(int n){//当前的下标int i = list.IndexOf(sorts[num - 1].gameObject);int s = i-n; //计算需要旋转的图片数量int s2 = num - Mathf.Abs(s);s2 = s >0 ? -s2 : s2;int s3 = Mathf.Abs(s) >Mathf.Abs(s2) ? s : s2; //选择需要旋转的方向float moveAng = Mathf.Asin(sorts[num - 1].localPosition.x/r)+sang; //计算需要旋转的弧度值float moveDis = moveAng  r; //计算需要旋转的距离float time = Mathf.Abs(moveDis) / cutSpeed; //计算旋转所需的时间DOTween.To((float a) =>{dis = a; //计算总滑动距离Move();}, dis, dis + moveDis, time).OnComplete(() =>{//sorts[num - 1].GetComponent<xx>().xxx(); //在动画完成后执行某些操作});}
}

【Unity技巧分享】如何实现简单的图片轮转效果

在游戏或软件中,很多时候需要实现一个能让用户浏览多张图片的效果,而轮转效果便是其中之一。但是在Unity中实现这个功能并不容易,本文将介绍如何使用DOTween插件来实现一个简单的图片轮转效果。

首先,需要准备好多张可以用于轮转的图片,并将其制作成预制体。在代码中通过定义预制体数组来管理这些图片。

接着,需要计算出轮转的圆心、半径和图片之间的夹角。将所有图片按照圆弧排列,同时通过计算每个图片的位置和比例实现轮转效果。通过列表管理每个图片,并按照缩放比例排序。

接下来,监听拖拽行为,计算拖拽的距离并移动图片。拖拽结束后,通过动画的方式实现轮转到指定位置的效果。可以通过计算需要旋转的图片数量,选择旋转的方向并计算出旋转的距离和时间,最终以动画的方式完成轮转效果。

在实现这个功能过程中,使用DOTween插件可以大大简化动画效果的处理,提高了开发效率。同时,通过简单的数学计算,实现了轮转效果,让用户可以更加方便地浏览多张图片。

综上所述,使用DOTween插件和简单的数学计算,可以快速实现一个简单的图片轮转效果。希望本文对大家有所帮助,也欢迎大家留言交流。

Unity2D轮转图相关推荐

  1. 2D轮转图选角色换衣服

    //轮转图效果↑ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityE ...

  2. Unity3D轮转图

    对于游戏开发者来说,很多时候需求是非常独特而且奇特的.这个时候我们就需要高效的技术和创造力可以解决这些问题.这篇文章将介绍如何在Unity3D平台上实现3D旋转菜单,内容包括代码和注释. 代码: us ...

  3. Bootstrap carousel轮转图的使用

    来自:慕课网http://www.imooc.com/code/5395 图片轮播效果在Web中常常能看到,很多人也称之为幻灯片.其主要显示的效果就是多幅图片轮回播放, 从右向左播放,鼠标悬停在图片时 ...

  4. 趣谈 DHCP 协议,有点意思。

    计算机网络我也连载了很多篇了,大家可以在我的公众号「程序员cxuan」 或者我的 github 系统学习. 计算机网络第一篇,聊一聊网络基础 :计算机网络基础知识总结 计算机网络第二篇,聊一聊 TCP ...

  5. 个人网站开发之前端首次造轮子_篇一【前端大作业】【gowork.fit】

    文章目录 一,前言 二,开发目的 三,页面样式 四,顶部导航栏 五,最后 一,前言 最近有一个需求:我采用了纯原生前端,没有使用框架,从0到1达到了百分百原创代码,作为主后端开发的我,前端开发技术非常 ...

  6. html设置樱花飘落效果,jQuery实现web页面樱花坠落的特效

    源码地址 开发原因 上课看到一位女生桌面背景是一课樱花树,顿时产生了一个让樱花可以在web页面飞舞的想法,借此把这个插件献送给那位女同学: 开发过焦点图,轮转图,瀑布流等应用插件,但是这类型插件还是第 ...

  7. 原型设计工具比较和实践

    文章目录 常见原型设计工具 1. 墨刀 墨刀简介 墨刀的优点和缺点 2. Axure Axure简介 Axure的优点和缺点 Mockplus的优点和缺点 4.三者的总结比较 原型设计的概念 2. 博 ...

  8. 6.Django 图书列表练习

    文章目录 1.搭建环境 1.1创建库 1.2 创建Django项目 1.3 路径&中间键问题 1.4 连接MySQL数据库 1.5 创建表 1. 表数据 2. 基础表 3. 外键字段 4. 完 ...

  9. 15.Unity2D 横版 骨骼动画 之 单张切片图骨骼动画+Aseprite像素画软件

    主目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 b站视频:骨骼动画 骨骼动画的原 ...

最新文章

  1. Transformer新型神经网络在机器翻译中的应用 | 公开课笔记
  2. 花费我一个月实习的工资买了一个软件测试就业班课程,成功转行了算是
  3. 摆放家具-定义房子类
  4. Hbase过滤器(Filter)汇总
  5. 十进制转二进制转换c语言程序,c语言编程如何实现-十进制数转换成二进制和 – 手机爱问...
  6. [汇编语言]实验:应用更灵活的寻址方式来定位内存地址
  7. 为什么MySQL索引更适合B+树而不是二叉树、B树
  8. php 解析数组,如何用PHP解析array数组
  9. vue 启动只显示error_Vue-声明式渲染
  10. 实验任务四:实现登陆界面
  11. MySQL保存历史执行语句
  12. PRD产品需求文档原型模版 Axure RP格式
  13. 简单实现DButil工具类
  14. Guice依赖注入(Scope)
  15. C++:缺省参数是怎样设置的?
  16. PMP-12项目采购管理
  17. 有关微信小程序云数据库修改数据的坑
  18. Hive性能调优之Mapper和Reducer
  19. Uint8 Uint16等的区别
  20. 几款永久免费内网穿透,好用且简单

热门文章

  1. 空间转换 3D; 动画(重点)
  2. (附源码)springboot仓库管理系统的开发毕业设计260931
  3. 跟着团子学SAP PS:项目报价解决方案(上)
  4. linux系统不关机添加硬盘吗,Linux服务器不关机新增硬盘的步骤
  5. 硬盘7200mysql_新服务器中7200转硬盘的IO是瓶颈
  6. 【数据结构与算法】之深入解析“摘樱桃”的求解思路与算法示例
  7. Linux 利用 IP转发使内网连接到公网
  8. 使用计算机时的烦恼,电脑,我的烦恼(节选)
  9. 超级狗能为软件商带来什么
  10. java基本微信小程序的汉服租赁平台 uniapp 小程序