【Unity】实现轮盘抽奖
简介
示例一:使用协程完成轮盘转动
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Lunpan : MonoBehaviour
{[Tooltip("轮盘节点")]public Transform Roulette;[Tooltip("轮盘旋转的圈数")]public int RotateNumber = 4;//[Tooltip("轮盘需要旋转的度数")]private float degrees = 0;[Tooltip("轮盘旋转初速度")]public int RotateSpeed = 500;//[Tooltip("当前轮盘旋转速度")]private float curRotateSpeed = 0;[Tooltip("减速度")]public float deceleration = 3;[Tooltip("最低速度")]public float minSpeed = 50;[Tooltip("轮盘剩余旋转多少时开始减速")]public float surRotate = 720;[Tooltip("轮盘中物体的数量")]public int All = 6;[Tooltip("旋转停止的位置")]public int selectedIndex = 1;[Tooltip("精准角度")]public Boolean enblePrecise = false;private void Start(){//每秒的帧率改为60(不是必要)Application.targetFrameRate = 60;}/// <summary>/// 开始转动/// </summary>public void StartRoulette(){this.curRotateSpeed = this.RotateSpeed;StartCoroutine(RotateRoulette());}IEnumerator RotateRoulette(){//存储每帧需要旋转的角度float curRotate = 0;//计算轮盘总需要旋转的角度this.degrees = this.RotateNumber * 360 - ((this.selectedIndex - 1) * 360) / this.All - (360 - this.Roulette.eulerAngles.z);while (this.degrees > 0){//计算此帧需要旋转的角度curRotate = Time.deltaTime * this.curRotateSpeed;//精准到指定角度if (this.enblePrecise && curRotate > this.degrees){if (this.curRotateSpeed >= this.minSpeed){//速度减半this.curRotateSpeed = this.minSpeed / 2;curRotate = Time.deltaTime * this.curRotateSpeed;if (curRotate > this.degrees){curRotate = this.degrees;}}else{curRotate = this.degrees;}}//减速if (this.curRotateSpeed > this.minSpeed && this.degrees < this.surRotate){this.curRotateSpeed -= deceleration;}//开始旋转this.Roulette.Rotate(Vector3.back * curRotate);this.degrees -= curRotate;yield return null;}yield return null;}}
示例二:不使用协程实现轮盘转动
using System;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;public class LunpanController : MonoBehaviour
{[Tooltip("轮盘节点")]public Transform Roulette;[Tooltip("轮盘旋转的圈数")]public int RotateNumber = 4;//[Tooltip("轮盘需要旋转的度数")]private float degrees = 0;[Tooltip("轮盘旋转初速度")]public int RotateSpeed = 500;//[Tooltip("当前轮盘旋转速度")]private float curRotateSpeed = 0;[Tooltip("减速度")]public float deceleration = 3;[Tooltip("最低速度")]public float minSpeed = 50;[Tooltip("轮盘剩余旋转多少时开始减速")]public float surRotate = 720;[Tooltip("轮盘中物体的数量")]public int All = 6;[Tooltip("旋转停止的位置")]public int selectedIndex = 1;[Tooltip("精准角度")]public Boolean enblePrecise = false;//开启轮盘转动private Boolean enbleLunpan = false;private void Start(){//每秒的帧率改为60(不是必要)Application.targetFrameRate = 60;}private void Update(){if (this.enbleLunpan){//存储每帧需要旋转的角度float curRotate = 0;if (this.degrees > 0){//计算此帧需要旋转的角度curRotate = Time.deltaTime * this.curRotateSpeed;//精准到指定角度if (this.enblePrecise && curRotate > this.degrees){if (this.curRotateSpeed >= this.minSpeed){//速度减半this.curRotateSpeed = this.minSpeed / 2;curRotate = Time.deltaTime * this.curRotateSpeed;if (curRotate > this.degrees){curRotate = this.degrees;}}else{curRotate = this.degrees;}}//减速if (this.curRotateSpeed > this.minSpeed && this.degrees < this.surRotate){this.curRotateSpeed -= deceleration;}//开始旋转this.Roulette.Rotate(Vector3.back * curRotate);this.degrees -= curRotate;if(this.degrees <= 0){this.enbleLunpan = false;}}}}/// <summary>/// 开始转动/// </summary>public void StartRoulette(){this.curRotateSpeed = this.RotateSpeed;//计算轮盘总需要旋转的角度this.degrees = this.RotateNumber * 360 - ((this.selectedIndex - 1) * 360) / this.All - (360 - this.Roulette.eulerAngles.z);this.enbleLunpan = true;}}
演示效果:
Unity实现轮盘抽奖
相关文章:
【Unity】实现轮盘抽奖
简介 示例一:使用协程完成轮盘转动 using System; using System.Collections; using System.Collections.Generic; using UnityEngine;public class Lunpan : MonoBehaviour {[Tooltip("轮盘节点")]public Transform Roulette;[Tooltip("轮盘旋转的…...
面下对象之overload与override
简介 在面向对象编程中,重载(overloading)和重写(overriding)是两个不同的概念。 重载(Overloading)的定义 重载是同一个类中定义多个同名方法,但是这些方法具有不同的参数列表(参数个数、参数类型或参数顺序不同)。 当调用这个方法时,编译器会根据实际传入的参数自动选择对…...
大数据之Hive函数大全
🔧 Hive函数大全 更多大数据学习资料请关注公众号“大数据领航员"免费领取 一、数学函数 1、取整函数: round 1.函数描述 返回值语法结构功能描述doubleround(double a)返回double类型的整数值部分(遵循四舍五入) 2.例程 hive>…...
宝塔下应该用 Memcached 还是 Redis?
明月最近在跟几个使用宝塔面板的客户运维的时候发现不少站长不知道如何选择 Memcached 和 Redis,甚至都说不清楚 Memcached 或者 Redis 具体是用来干啥的?甚至还碰到过一个站长 Memcached 和 Redis 都安装了,但一个都没有用,就那么…...
恢复视频3个攻略:从不同情况下的恢复方法到实践!
随着科技的进步,我们的生活被各种各样的数字内容所包围,其中,视频因其独特的记录性质,承载着许多重要的资料。但不管是自媒体人还是普通人日常生活随手一拍,都会遇到误删视频的情况。为了帮助您找回手机视频࿰…...
从git上拉取项目进行操作
1.Git的概念 Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。它实现多人协作的机制是利用clone命令将项目从远程库拉取到本地库,做完相应的操作后再利用push命令从本地库将项目提交至远程库。 2.Git的工作流程…...
ES升级--01--环境准备和安装
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Linux 单机1.官网下载 Elasticsearchhttps://www.elastic.co/cn/downloads/past-releases/#elasticsearch 2.解压软件3.创建用户设置用户 es 密码 es赋权ES用户数据…...
Linux 防火墙 firewalld 常用命令
1 防火墙 - firewalld 1.1 开启防火墙 # 临时性开启,服务器重启后会恢复为原来的状态 systemctl start firewalld # 永久性开启(即开机启动),重启服务器后生效 systemctl enable firewalld1.2 关闭防火墙 # 临时性关闭…...
时间|基于SprinBoot+vue的时间管理系统(源码+数据库+文档)
时间管理系统 目录 基于SprinBootvue的时间管理系统 一、前言 二、系统设计 三、系统功能设计 1管理员功能模块 2用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农…...
C++青少年简明教程:for循环语句
C青少年简明教程:for循环语句 C的for循环语句是一种迭代控制语句,用于重复执行一段代码。 语法格式: for(表达式1;表达式2;表达式3) 循环体 for循环语句执行流程图: 不太好理解,请看下图&am…...
自动驾驶技术现状与需求分析
随着科技的不断进步和智能化浪潮的席卷,自动驾驶技术已成为当今交通领域的热点话题。本文旨在深入探讨自动驾驶技术的当前发展状况,并对其未来的市场需求进行细致分析。首先,我们将回顾自动驾驶技术的起源、发展历程以及当前的技术水平&#…...
SQL生成自然数,日历序列 浅析
01.sqlserver版本 使用sqlserver将数据复制n条 selectt.indx,t.name,tmp.vlue from (values(1,苹果) ) as t(indx, name) ,(select[number] as vluefrom master.dbo.spt_valueswhere [type] pand [number] between 1 and 10 ) as tmpspt_values是什么 spt_values是SQL Se…...
【数据结构(邓俊辉)学习笔记】二叉树04——Huffman树
文章目录 0. 概述1. 无前缀冲突编码2. 编码成本3. 带权编码成本4. 编码算法5. 算法实现流程6. 时间复杂度与改进方案 0. 概述 学习Huffman树。 1. 无前缀冲突编码 在加载到信道上之前,信息被转换为二进制形式的过程称作编码(encoding)&…...
arcgisPro将一个图层的要素复制到另一个图层
1、打开两个图层,如下,其中一个图层中有两个要素,需要将其中一个要素复制到另一个图层中,展示如下: 2、选中待复制要素,点击复制按钮,如下: 3、下拉粘贴按钮列表,选择【选…...
难兄难弟——Java中 goto 与 const关键字
目录 简洁版: 详解版: 一:goto 二:const 简洁版: 1: 在Java中,goto也是一个关键字,但是取消了goto的使用,使用循环标记进行代替; 2:在Java中&a…...
如何优化大文件读取时的性能
1、分块读取 1、不要一次性将整个文件加载到内存中,而是将其分割成多个较小的块(例如,每块1MB或更大),然后逐块读取和处理。 2、使用FileInputStream和BufferedInputStream来分块读取文件。 2、使用缓冲区 1、使用…...
【机器学习】Chameleon多模态模型探究
Chameleon:引领多模态模型的新时代 一、多模态模型的时代背景二、Chameleon模型的介绍三、Chameleon模型的技术特点四、Chameleon模型的性能评估五、Chameleon模型的代码实例 随着人工智能技术的深入发展,我们逐渐认识到单一模态的模型在处理复杂问题时存…...
cv2.imdecode 和 cv2.imread 的区别
cv2.imdecode 和 cv2.imread 都是 OpenCV 用于读取图像的函数,但它们用于不同的场景,处理方式也不同。 cv2.imread 用法: img cv2.imread(image_path)功能: cv2.imread 用于直接从文件系统中读取图像文件。image_path 是图像文件…...
Android数据缓存框架 - 内存数据载体从LiveData到StateFlow
引言:所有成功者的背后,都有一份艰苦的历程,不要只看到了人前的风光,而低估了他们背后所付出的努力。 随着flow到流行度越来越高,有开发者呼吁我使用flow,于是我就如你们所愿,新增了StateFlow作…...
多态的好处
使用多态(Polymorphism)在C中有多个重要的原因,这些原因使得多态成为面向对象编程中不可或缺的一部分。以下是使用多态的一些关键原因: 代码复用和灵活性: 多态允许我们编写可以处理多种类型对象的通用代码。通过使用…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
