当前位置: 首页 > news >正文

镇巴作风建设网站wordpress数据库下载备份

镇巴作风建设网站,wordpress数据库下载备份,做网站后面维护要收钱吗,电商网站图片通过上下滑动,实现带自动回正带阻尼感的转盘,上图所示的正方向在9点钟方向,即正西方向 实现过程,找到一个1:1的方形图片,制作一个圆环,我这里是将圆环分成了14份,代码里可以调整,添…

通过上下滑动,实现带自动回正带阻尼感的转盘,上图所示的正方向在9点钟方向,即正西方向

实现过程,找到一个1:1的方形图片,制作一个圆环,我这里是将圆环分成了14份,代码里可以调整,添加代码,手动调整动态参数即可。

直接上代码:

using UnityEngine;
using UnityEngine.EventSystems;public class LotteryWheel : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler
{[Header("转盘")]public RectTransform wheel;[Header("旋转参数")][Tooltip("手势滑动灵敏度,值越大旋转越明显")]public float swipeSensitivity = 0.5f;[Tooltip("惯性减速速率(角度/秒²)")]public float deceleration = 500f;[Tooltip("回弹对齐的旋转速度(角度/秒)")]public float snapSpeed = 300f;[Header("分段设置")]public int segmentCount = 14; // 分成14份[Header("回正偏移设置")][Tooltip("回正时的目标偏移角度,此处为-90°表示最终使分段中心与-90°对齐")]public float snapOffsetAngle = -90f;public AudioClip audioClip;// 内部状态private float currentVelocity = 0f; // 当前旋转速度(角度/秒)private bool isDragging = false;    // 是否处于拖拽手势中private bool isSnapping = false;    // 是否正在自动回弹对齐private Vector2 lastPointerPosition; // 记录上一次手指位置// 用于记录上一次经过的分段中心,防止重复打印日志private int lastLoggedSegment = -1;void Start(){// 根据转盘初始角度计算当前分段中心索引float currentAngle = wheel.eulerAngles.z;float segmentAngle = 360f / segmentCount;float relativeAngle = (currentAngle - snapOffsetAngle + 360f) % 360f;lastLoggedSegment = Mathf.RoundToInt(relativeAngle / segmentAngle) % segmentCount;}void Update(){// 非拖拽且未处于回弹对齐状态时,利用惯性旋转并逐渐减速if (!isDragging && !isSnapping){if (Mathf.Abs(currentVelocity) > 0.01f){float deltaAngle = currentVelocity * Time.deltaTime;wheel.Rotate(0, 0, deltaAngle);currentVelocity = Mathf.MoveTowards(currentVelocity, 0, deceleration * Time.deltaTime);// 当速度足够小时,进入回弹对齐状态if (Mathf.Abs(currentVelocity) < 0.1f){currentVelocity = 0;isSnapping = true;}}}// 回弹对齐阶段:计算目标角度(基于偏移)if (isSnapping){float currentAngle = wheel.eulerAngles.z;float segmentAngle = 360f / segmentCount;// 以 snapOffsetAngle 为参考,计算最近的分段中心角度float targetAngle = Mathf.Round((currentAngle - snapOffsetAngle) / segmentAngle) * segmentAngle + snapOffsetAngle;float newAngle = Mathf.MoveTowardsAngle(currentAngle, targetAngle, snapSpeed * Time.deltaTime);wheel.eulerAngles = new Vector3(0, 0, newAngle);if (Mathf.Abs(Mathf.DeltaAngle(newAngle, targetAngle)) < 0.1f){isSnapping = false;// 计算当前分段编号,归一化取模,确保编号在0~segmentCount-1内int segmentIndex = Mathf.RoundToInt((targetAngle - snapOffsetAngle) / segmentAngle);segmentIndex = (segmentIndex % segmentCount + segmentCount) % segmentCount;int number = segmentIndex + 1;Debug.Log("当前编号: " + number);}}// Add detectionSlidingAreaDetection();}// Add detection: Print logs when the turntable turns over a new segment centerprivate void SlidingAreaDetection(){// 获取当前转盘角度(0~360°),计算相对于 snapOffsetAngle 的归一化角度float currentAngle = wheel.eulerAngles.z;float segmentAngle = 360f / segmentCount;float relativeAngle = (currentAngle - snapOffsetAngle + 360f) % 360f;// 通过四舍五入得到当前经过的分段中心索引int currentCenterIndex = Mathf.RoundToInt(relativeAngle / segmentAngle) % segmentCount;if (currentCenterIndex != lastLoggedSegment){// 此处打印日志,后续可在此处接入音效播放//Debug.Log("经过分段中心, 当前分段: " + (currentCenterIndex + 1));if (audioClip != null && audioClip.length > 0){GetComponent<AudioSource>().PlayOneShot(audioClip);}lastLoggedSegment = currentCenterIndex;}}public void OnPointerDown(PointerEventData eventData){isDragging = true;isSnapping = false; // 中断回弹对齐lastPointerPosition = eventData.position;currentVelocity = 0;}public void OnDrag(PointerEventData eventData){Vector2 pointerDelta = eventData.position - lastPointerPosition;// 根据手指垂直位移决定旋转方向:上滑(delta.y正)顺时针旋转,反之逆时针旋转float rotationDelta = -pointerDelta.y * swipeSensitivity;wheel.Rotate(0, 0, rotationDelta);currentVelocity = -pointerDelta.y * swipeSensitivity / Time.deltaTime;lastPointerPosition = eventData.position;}public void OnPointerUp(PointerEventData eventData){isDragging = false;if (Mathf.Abs(currentVelocity) < 10f){currentVelocity = 0;isSnapping = true;}}
}

 有点像手机闹钟,设置时间时的丝滑感觉。

下面的代码是将所划分的区域段数实时的展示在Scene界面,可用可不用,需要自取

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ShowRotaryWheel : MonoBehaviour
{public int sectorCount = 14; // 区域块数量#if UNITY_EDITOR// 在类末尾添加以下方法:private void OnDrawGizmos(){if (sectorCount < 1) return;RectTransform rt = GetComponent<RectTransform>();if (!rt) return;float radius = rt.rect.width / 2 * rt.lossyScale.x;Vector3 center = rt.position;float sectionAngle = 360f / sectorCount;Gizmos.color = Color.yellow;for (int i = 0; i < sectorCount; i++){float angle = i * sectionAngle;Vector3 direction = Quaternion.Euler(0, 0, angle) * Vector3.up;Gizmos.DrawLine(center, center + direction * radius);}}
#endif
}

如果有帮到你还望给个三连吧,感谢您的支持。

@Liam

http://www.dtcms.com/a/571598.html

相关文章:

  • 开封网站网站建设我想创建一个网站自己玩玩
  • 微网站开发方案中层管理者培训课程有哪些
  • 西乡移动网站建设seo网络推广
  • 木木科技 网站艰涩江西建设网官方网站
  • 网站推广主要用的软件1000平方办公室装修多少钱
  • flash源码网站营口大石桥网站建设
  • 国外摄影网站潮州移动网站建设
  • 上海建站 seo手机免费建立网站吗
  • 网站设计参考文献有哪些领优惠券的网站是怎么做的
  • 网站建设细化流程200做网站
  • 扬州市建设厅网站网页设计与网站开发第三版课后答案
  • 网站编程培训学校有哪些仿古建筑工程网
  • 二级网站的建设方案做变形记图网站
  • 其它区便宜营销型网站建设昆山网站建设熊掌号
  • 都匀住房和城乡建设厅网站网站模版html
  • 做公益网站建设集团网站的作用
  • 网页网站设计东莞本地招聘网站有哪些
  • 建设档案员证书查询网站蓝色中网站
  • 连云港网站建设电话seo案例网站建设哪家好
  • 如何建立公司网站模块品牌运营策划
  • 网站移动端怎么做.net网站
  • 信息技术网站建设教案如何做网站不被查
  • 网站诊断与优化的作用郑州企业管理培训课程
  • 常州公诚建设项目管理有限公司官方网站怎么找客户的联系方式
  • 做铝锭的网站手机怎么打开自己做的网站
  • 公司做网站流程wordpress word发布文章
  • 设计电子商务网站方式网站备案拍照点
  • 做网站苏州自己怎么做dj 视频网站
  • 国内大的网站建设公司排名crm软件免费
  • 专业专业的网站开发代理平台哪个好