【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实现轮盘抽奖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/18391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 微服务中怎么获取用户信息 token

SpringBoot 微服务中怎么获取用户信息 token 当我们写了一个A接口&#xff0c;这个接口需要调用B接口&#xff0c;但是B接口需要包含请求头内容&#xff0c;比如需要用户信息、用户id等内容&#xff0c;由于不在同一个线程中&#xff0c;使用ThreadLocal去获取数据是无法获取的…

如何高效测试防火墙的NAT64与ALG应用协议转换能力

在本文开始介绍如何去验证防火墙&#xff08;DUT&#xff09;支持NAT64 ALG应用协议转换能力之前&#xff0c;我们先要简单了解2个比较重要的知识点&#xff0c;即&#xff0c;NAT64和ALG这两个家伙到底是什么&#xff1f; 网络世界中的“翻译官” - NAT64技术 简而言之&…

如何批量提取pdf文件名?批量提取文件夹里的文件名,只要用对方法!

在数字化时代&#xff0c;PDF文件已经成为我们日常工作中不可或缺的一部分。然而&#xff0c;随着PDF文件数量的不断增加&#xff0c;如何高效地管理这些文件成为了一个挑战。批量提取PDF文件名&#xff0c;就是解决这一问题的关键所在。本文将为你介绍几种实用的方法&#xff…

长效IP和短效IP的使用指南分享

随着网络技术的发展&#xff0c;代理IP已经成为许多人在网络活动中不可或缺的工具。 代理IP不仅有助于保护用户的真实IP地址&#xff0c;保护用户的使用隐私&#xff0c;还可以帮助用户提升网络访问的速度等。 然而&#xff0c;在挑选代理IP时&#xff0c;用户常常会面临一个…

GDAL读取shp文件1

我们知道shp文件是一种gis文件,里面包含一张属性数据表,可以用GIS桌面软件打开; GDAL先初步读一下一个示例shp文件的信息, #include "stdafx.h" #include <ogrsf_frmts.h> #include <ogr_spatialref.h>int main() {// 为了使属性表字段支持中文,请…

图像分割模型LViT-- (Language meets Vision Transformer)

参考&#xff1a;LViT&#xff1a;语言与视觉Transformer在医学图像分割-CSDN博客 背景 标注成本过高而无法获得足够高质量标记数据医学文本注释被纳入以弥补图像数据的质量缺陷半监督学习&#xff1a;引导生成质量提高的伪标签医学图像中不同区域之间的边界往往是模糊的&…

笔记-Python读写文件

Python读写文件 1.open 使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。 file_object open(‘thefile.txt’) try: all_the_text file_object.read( ) finally: file_object.close( ) 注&#xff1a;不能把open语…

Java | Leetcode Java题解之第118题杨辉三角

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> ret new ArrayList<List<Integer>>();for (int i 0; i < numRows; i) {List<Integer> row new…

嵌入式学习(Day:28 进程间通信2 -> 信号通信)

进程间通信 》信号通信 1. 64个信号 应用&#xff1a;异步通信。 中断&#xff0c;&#xff0c; &#xff08;PCBC块中&#xff0c;64个信号&#xff0c;大部分是&#xff1a;关闭&#xff0c;暂停&#xff0c;继续&#xff09; linuxubuntu:~$ kill -l &am…

防御恶意爬虫攻击

数据抓取爬虫 数据抓取爬虫是攻击者使用自动化脚本或工具在移动应用程序中抓取敏感数据的一种方式。这些爬虫可以定向抓取用户信息、产品列表、评论和评级等数据。攻击者可能会将这些数据用于非法目的&#xff0c;例如进行身份盗窃、诈骗活动或者卖给其他恶意方。 对于移动应用…

[机缘参悟-192] - 《道家-水木然人间清醒1》读书笔记 -15- 关系界限 - IT互联网时代下的真爱的形态

目录 前言&#xff1a; 1、 既独立又结盟&#xff0c;才是最好的关系 2、世间所有的好关系&#xff0c;一定要先谈钱 3、怎么建立高品质的关系 4、恋爱是情感组合&#xff0c;婚姻是价值组合 5、什么是成熟的爱情 6、婚姻的难点 7、这个时代稀缺的女性特质 8、恋爱和婚…

YD/T 2698-2014 《电信网和互联网安全防护基线配置要求及检测要求 网络设备》标准介绍

编写背景 随着互联网技术的飞速发展&#xff0c;网络设备的安全问题日益凸显。为了加强电信网和互联网的安全防护&#xff0c;保障网络环境的稳定和用户信息的安全&#xff0c;YD/T 2698-2014标准应运而生。此标准旨在为网络设备提供一套基线配置要求&#xff0c;以及相应的安…

pytorch要点和难点具体应用案例

PyTorch是一个开源的Python机器学习库&#xff0c;由Facebook人工智能研究院&#xff08;FAIR&#xff09;开发并维护。它基于 Torch&#xff0c;是一个为深度学习而设计的动态图计算框架&#xff0c;特别适用于自然语言处理&#xff08;NLP&#xff09;等应用。 PyTorch的主要…

Docker-02-02 Docker离线下载安装与配置(linux)

一、Docker下载 官网下载地址:Index of linux/static/stable/x86_64/ (docker.com) 推荐下载最新的社区版: 二、将安装包上传至服务器并解压 将安装包上传至服务器的/usr/local目录并解压 cd /usr/local lstar -zxvf docker-18.06.3-ce.tgz三、将docker目录下的文件复制到…

ubuntu server 24.04 (Linux) 源码编译安装 OpenResty 1.25.3.1 Released

1 下载: OpenResty - 开源官方站 2 通过xftp等方式上传到ubuntu服务器 3 安装 #解压 tar zxvf openresty-1.25.3.1.tar.gz #创建运行用户 sudo groupadd www sudo useradd -g www www -s /bin/false #安装依赖软件 sudo apt update sudo apt-get install libpcre3-dev l…

OSINT 与心理学:通过开源情报进行剖析和行为分析

在不断发展的心理学领域&#xff0c;人们越来越认识到通过应用开源情报 (OSINT) 方法取得进步的潜力。OSINT 主要以其在安全和情报领域的应用而闻名&#xff0c;并且越来越多地展示其在心理分析和行为分析方面的潜力。本文探讨了 OSINT 和心理学的迷人交叉点&#xff0c;研究如…

Ajax都有哪些优点和缺点?

AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一种使用多项技术的Web开发技术&#xff0c;它允许通过异步请求与服务器交换数据&#xff0c;而无需刷新整个页面。这种技术可以显著提高Web应用程序的性能和用户体验。以下是AJAX的主要优点和缺点&#xff1a; …

c#自动生成缺陷图像-添加重命名功能--20240528

using System; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Threading

前端项目上线

目录 1项目打包 2本地服务器部署 2.1具体操作步骤 2.2解决刷新 404 问题 2.3请求无法发送问题 3nginx 服务器部署 3.2nginx 配置代理练习 安装nginx nginx部署启动项目 3.3nginx 部署前端项目 4云服务器部署 本地资源上传 配置服务器与nginx 1项目打包 ●我…

【设计模式】JAVA Design Patterns——Data Transfer Object(数据传递对象模式)

&#x1f50d;目的 次将具有多个属性的数据从客户端传递到服务器&#xff0c;以避免多次调用远程服务器 &#x1f50d;解释 真实世界例子 我们需要从远程数据库中获取有关客户的信息。 我们不使用一次查询一个属性&#xff0c;而是使用DTO一次传送所有相关属性。 通俗描述 使用…