首页 > 其他分享 >携程代码轮转图

携程代码轮转图

时间:2023-04-11 14:25:43浏览次数:36  
标签:sp 轮转 携程 代码 float Mathf time public dis

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

public class Rotart2D : MonoBehaviour, IDragHandler, IEndDragHandler,IBeginDragHandler
{
    public Image prefab;//预制体
    public float spacing = 100;//间距
    public int n;//个数
    float zc;
    float r;
    float ang;
    List<Image> s = new List<Image>();
    List<RectTransform> sl = new List<RectTransform>();
    float moveAng = 0;//拖动弧度
    // Start is called before the first frame update
    void Start()
    {
        ////周长=(图片宽度+间距)*个数
        zc = (prefab.rectTransform.rect.width + spacing) * n;
        //半径=周长/2πr
        r = zc / (2 * Mathf.PI);
        //弧度= 2πr/个数
        ang = 2 * Mathf.PI / n;
        Move();
    }
    private void Move()
    {
        for (int i = 0; i < n; i++)
        {
            //判断集合长度
            if (s.Count <= i)
            {
                s.Add(Instantiate(prefab, transform));
                s[i].GetComponent<Image>().sprite = Resources.Load<Sprite>("Image/Tou_" + i);
                s[i].name = "Tou_" + i;
                sl.Add(s[i].rectTransform);
            }
            int id = i;
            Button btn = s[i].GetComponent<Button>();
            btn.onClick.AddListener(() => 
            {
                int index = s.IndexOf(sl[n - 1].GetComponent<Image>());
                float sp = (id - index) * ang;
                float sp0 = 2 * Mathf.PI - Mathf.Abs(sp);
                sp0 = sp > 0 ? -sp0 : sp0;
                sp = Mathf.Abs(sp) < Mathf.Abs(sp0) ? sp : sp0;
                StopAllCoroutines();//关闭携程
                StartCoroutine(DuiQi(sp));//图片对齐
            });
            float x = Mathf.Sin(i * ang + moveAng) * r;
            float y = Mathf.Cos(i * ang + moveAng) * r;
            float scale = (y + r) / (r * 2) * 0.5f + 0.5f;
            s[i].rectTransform.anchoredPosition = new Vector2(x, 0);
            s[i].transform.localScale = Vector3.one * scale;
        }
        sl.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 < sl.Count; i++)
        {
            sl[i].SetSiblingIndex(i);
        }
    }
    public void OnBeginDrag(PointerEventData eventData)
    {
        StopAllCoroutines();//关闭携程
    }
    public void OnDrag(PointerEventData eventData)
    {
        float dis = eventData.delta.x;
        float drang = dis / r;
        moveAng += drang;
        Move();
    }
    public void OnEndDrag(PointerEventData eventData)
    {
        float dis = eventData.delta.x;
        StartCoroutine(GuanXin(dis));//开启携程  惯性移动
    }

    IEnumerator GuanXin(float dis)
    {
        float drang = dis / r;
        float time = Math.Abs(dis) / 100;
        while (time>0)
        {
            yield return new WaitForSeconds(Time.deltaTime);
            time -= Time.deltaTime;
            if(time<=0)
            {
                time = 0;
            }
            moveAng += drang * time;
            Move();
        }
        if(time<=0)
        {
            StopAllCoroutines();
            StartCoroutine(DuiQi(0));//开启携程  图片对齐
        }
    }

    IEnumerator DuiQi(float sp)
    {
        float AlingAng = sl[n - 1].anchoredPosition.x / r + sp;
        float time = 0;
        float Alingdis = moveAng;
        while (time<0.5f)
        {
            yield return new WaitForSeconds(Time.deltaTime);
            time += Time.deltaTime;
            if(time>=0.5f)
            {
                time = 0.5f;
            }
            moveAng = Mathf.Lerp(Alingdis, Alingdis - AlingAng, time * 2);
            Move();
        }
        if(time>=0.5f)
        {
            StopAllCoroutines();//关闭携程
        }
    }

}

 

标签:sp,轮转,携程,代码,float,Mathf,time,public,dis
From: https://www.cnblogs.com/cxh123/p/17306067.html

相关文章

  • 直播平台源代码,js 时间戳转为日期格式
    直播平台源代码,js时间戳转为日期格式js把时间戳转为普通日记格式第一种 functiongetLocalTime(nS){     returnnewDate(parseInt(nS)*1000).toLocaleString().replace(/:\d{1,2}$/,'');   } ​第二种 functionadd0(m){returnm<10?'0'+m:m}func......
  • AI 绘画 API 超详细使用教程 - 附微信小程序接入代码
    写在前面【AI绘画/AI图像生成】已成为现下炙手可热的话题,AI大模型训练的成本高昂,算法研究时间周期较长,对于大多数人来说,自研一套算法模型还是非常困难的,因此AI绘画API就应运而生,直接调用AI绘画API就能轻松将先进的图文AI融入到我们的产品中,使用门槛是非常低的。 本......
  • 低代码开发重要工具:jvs-rules规则引擎v2.1.7集成说明
    JVS规则引擎jvs-rules是将业务设置与业务功能解耦的重要工具,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据传入,数据加工,并根据业务规则做出业务判断。特别是在金融公司、保险行业、咨询等,复杂的业务逻辑规则是相关领域有非常广泛的应......
  • 如何使用IDEA通过gitlab拉取提交代码
      准备相关软件:idea、gitidea配置git1、随意打开一个项目,选择file,点击Settings 2、先选择VersionControl,再点击Git,根据以下图片红色部分选择,把安装的git位置找到   3、我git安装在D盘,你就根据自己位置来,再点点击Test,如下图就是配置git成功   idea拉取代码......
  • db2错误代码大全
    SQLCodeSQLState状态说明00000000SQL语句成功完成01xxxXXXSQL语句成功完成,但是有警告+01201545未限定的列名被解释为一个有相互关系的引用+09801568动态SQL语句用分号结束+10002000没有找到满足SQL语句的行+11001561......
  • RDIF.vNext全新低代码快速开发框架平台发布
    1、平台介绍RDIF.vNext,全新低代码快速开发集成框架平台,给用户和开发者最佳的.Net框架平台方案,为企业快速构建跨平台、企业级的应用提供强大支持。RDIF.vNext的前身是RDIFramework框架,RDIF(RapiddevelopIntegrateFramework,vNext代表全新下一代),全新设计,全新开发,代码量减......
  • Android 代码混淆 包名被混淆 主工程二次混淆 一站解决你的混淆
    代码混淆(Obfuscatedcode)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。已经存在许多种功能各异的代码混淆器。将代码中的各种元素,如......
  • 每日学习记录20230308_继续PNAS代码解析
    20230308:PNSA代码解析PNAS和YF代码比较特征PNASYF输入数据DDADIA算法线性回归LASSOFA数据Ifwewanttoissueapackage,whatimprovementshouldwedounderlieYF’sprogram?BothDDAandDIAdataaresupported.achangePNAS......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-智能聊天机器人从0到1快速入门——官网推荐的
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • 牛客网一道题以及对我自己屎山代码的反思
    做这么个题,费了大劲,不是有什么地方不会需要去查,也不是没思路,而是纯粹的脑子糊涂。东一榔头西一棒槌,把握不住要点,这是做事方式的问题。这样写代码,绝对是第二天就看不懂的那种我写的141行屎山#include<stdio.h>#include<stdlib.h>/*明明生成了N个1到500之间的随机整......