【Unity造轮子】实现一个类csgo的武器轮盘功能
文章目录
- 前言
- 素材导入
- 开始
- 1.放背景和中间的圆圈,调整合适的宽高和位置
- 2.添加选择图像框
- 3.添加一些武器道具选择
- 4.书写脚本RadialMenuManager
- 5.绑定脚本和对象
- 6.运行效果,按tab键开启关闭轮盘
- 7.优化添加显示选中的武器文本
- 8.添加鼠标选中放大的效果
- 9.添加打开轮盘动画效果
- 源码下载
- 参考
- 完结
前言
欢迎来到这篇文章,今天我们将探讨如何使用Unity制作一个功能——武器轮盘。这个功能不仅可以为你的游戏增添新的元素,还可以用于在抽奖活动中增添趣味性。本文都将指导你如何创建一个类似于CS:GO的武器轮盘功能。
在CS:GO等类似游戏中,武器轮盘是一种常见且备受喜爱的功能。它给予玩家机会从一个包含各种珍贵武器的轮盘中随机选择一个。这种机制不仅提供了一种刺激和可玩性,还帮助玩家获取稀有且强大的武器装备。
我们的目标是在Unity中通过使用一些基本的编程和设计技巧,来创建一个简单而又有趣的武器轮盘功能。通过本文,你将学习如何布置轮盘、添加可选项、实现旋转效果以及处理轮盘停止时选择的结果。
无论你是一个经验丰富的Unity开发者,还是刚刚开始学习游戏开发,本文都将为你提供有用的指导和建议。让我们一起开始吧,为你的游戏或者活动带来全新的乐趣!
先看本文实现的最终效果,以决定你是否要看下去
源码在文章末尾
素材导入
GUI PRO Kit - Sci-Fi,可以去资源商城购买:
https://assetstore.unity.com/packages/2d/gui/gui-pro-kit-sci-fi-194741
也可以下载我准备的(免费)
https://download.csdn.net/download/qq_36303853/88131958
开始
1.放背景和中间的圆圈,调整合适的宽高和位置
2.添加选择图像框
通过控制z轴的值控制旋转
3.添加一些武器道具选择
4.书写脚本RadialMenuManager
// 引入所需的库
using System.Collections;
using System.Collections.Generic;
using UnityEngine;// 定义一个名为RadialMenuManager的公共类,该类继承自MonoBehaviour
public class RadialMenuManager : MonoBehaviour
{// 定义公共变量public Transform center;public Transform selectobject;public GameObject RadialMenuRoot;bool isRadialMenuActive;// 在第一帧更新之前调用Start方法void Start(){// 初始化RadialMenu为非激活状态isRadialMenuActive = false;//默认关闭轮盘RadialMenuRoot.SetActive(false);}// 每一帧都会调用Update方法void Update(){// 检测是否按下了tab键if (Input.GetKeyDown(KeyCode.Tab)){// 切换RadialMenu的激活状态isRadialMenuActive = !isRadialMenuActive;if (isRadialMenuActive){// 如果RadialMenu处于激活状态,则设置RadialMenuRoot为激活RadialMenuRoot.SetActive(true);}else{// 如果RadialMenu处于非激活状态,则设置RadialMenuRoot为非激活RadialMenuRoot.SetActive(false);}}// 如果RadialMenu处于激活状态if (isRadialMenuActive){// 计算中心位置和鼠标位置的差值Vector2 delta = center.position - Input.mousePosition;// 计算角度float angle = Mathf.Atan2(delta.y, delta.x) * Mathf.Rad2Deg;angle += 180;for (int i = 0; i < 360; i += 45){if (angle > i && angle < i + 45){// 设置选中对象的旋转角度selectobject.eulerAngles = new Vector3(0, 0, i);}}}}
}
5.绑定脚本和对象
6.运行效果,按tab键开启关闭轮盘
7.优化添加显示选中的武器文本
补充脚本
using TMPro;//文本组件
public TextMeshProUGUI HighlightedWeaponName;
//道具名称列表
public string[] InventoryWeaponNames;...int index = 0;
for (int i = 0; i < 360; i += 45){if (angle > i && angle < i + 45){// 设置选中对象的旋转角度selectobject.eulerAngles = new Vector3(0, 0, i);//显示对应名称HighlightedWeaponName.text = InventoryWeaponNames[index];}index++;
}
绑定文本和配置武器名称,注意武器是按逆时针排序的
效果
8.添加鼠标选中放大的效果
补充代码
//储存道具列表
public Transform[] itemSlots;...int index = 0;
for (int i = 0; i < 360; i += 45){if (angle > i && angle < i + 45){// 设置选中对象的旋转角度selectobject.eulerAngles = new Vector3(0, 0, i);HighlightedWeaponName.text = InventoryWeaponNames[index];//设置只有选中的进行缩放foreach(Transform t in itemSlots){t.transform.localScale = new Vector3(1, 1, 1);}itemSlots[index].transform.localScale = new Vector3(1.3f, 1.3f, 1.3f);}index++;
}
绑定道具,记得顺序不要错,前面我没有注意道具顺序,所以道具都是乱的,所以这里我重新调整了道具的顺序
效果
9.添加打开轮盘动画效果
新增动画,通过动画录制功能,很快就可以实现
最终效果
源码下载
https://download.csdn.net/download/qq_36303853/88137246
参考
【视频】https://www.youtube.com/watch?v=pmqs5zsKTTs
完结
赠人玫瑰,手有余香!如果文章内容对你有所帮助,希望你不要吝啬自己的点赞评论和关注
,第一时间告诉我,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
好了,我是向宇,https://xiangyu.blog.csdn.net/
一位在小公司默默奋斗的开发者,出于兴趣爱好,于是最近才开始自习unity。如果你有任何问题,欢迎你来评论私信告诉我, 虽然有些问题我可能也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
相关文章:

【Unity造轮子】实现一个类csgo的武器轮盘功能
文章目录 前言素材导入开始1.放背景和中间的圆圈,调整合适的宽高和位置2.添加选择图像框3.添加一些武器道具选择4.书写脚本RadialMenuManager5.绑定脚本和对象6.运行效果,按tab键开启关闭轮盘7.优化添加显示选中的武器文本8.添加鼠标选中放大的效果9.添加…...

代码随想录算法训练营第三十天 | 单调栈系列复习
单调栈系列复习 每日温度未看解答自己编写的青春版重点题解的代码日后再次复习重新写 下一个更大元素 I未看解答自己编写的青春版重点题解的代码日后再次复习重新写 下一个更大元素II未看解答自己编写的青春版重点题解的代码日后再次复习重新写 接雨水未看解答自己编写的青春版…...
redis数据未到过期时间被删除
1. 问题描述 使用了jeecgboot开发后端代码,代码设置的redis过期时间为24小时,部署使用的宝塔面板,在redis中看到的过期时间也是为24小时,但是并未到过期时间,数据就被删除。 2. 解决办法 观察了一下redis中的数据&a…...

32.选择器
选择器 html部分 <div class"toggle-container"><input type"checkbox" id"good" class"toggle"><label for"good" class"label"><div class"ball"></div></label&…...

Linux--验证命令行上运行的程序的父进程是bash
1.输入以下代码: #include <stdio.h> #include <unistd.h> int main() {printf("hello world: pid: %d, ppid: %d\n",getpid(),getppid());return 0; }2.编译得到可执行程序 3.运行得到ppid 4.输入指令 ps axj | head -1 &&am…...

MySQL数据库关于表的一系列操作
MySQL中的数据类型 varchar 动态字符串类型(最长255位),可以根据实际长度来动态分配空间,例如:varchar(100) char 定长字符串(最长255位),存储空间是固定的,例如&#…...

Spring基于注解管理bean及全注解开发
文章目录 spring概述Spring定义Spring核心Spring Framework的特点 基于注解管理bean依赖开启组件扫描使用注解定义Bean案例:Autowired注入属性注入set注入形参上注入只有一个构造函数,无注解Autowire注解和Qualifier注解联合 Resource注入Spring全注解开发 spring概…...

QtC++ 技术分析3 - IOStream
目录 iostreamscanf/printfiostream 整体架构流相关类流缓冲区 模板特化后整体结构文件流文件流对象创建常见文件流操作输出格式设定文件流状态 字符串流字符串流内部缓冲区字符串流使用 流缓冲区用户自定义 IO iostream scanf/printf 几种常见的输入输出流函数 scanf 从键盘…...

2023年Q2京东环境电器市场数据分析(京东数据产品)
今年Q2,环境电器市场中不少类目表现亮眼,尤其是以净水器、空气净化器、除湿机等为代表的环境健康电器。此外,像冷风扇这类具有强季节性特征的电器也呈现出比较好的增长态势。 接下来,结合具体数据我们一起来分析Q2环境电器市场中…...

TCP/UDP的首部
TCP/UDP首部信息 TCP首部第一个4字节第二个4字节与第三个4字节第四个4字节第五个4字节选项最大报文段长度(MSS)选项窗口扩大选项时间戳选项 什么时候发送RST包UDP首部 TCP首部 TCP 首部长度为20字节,加上选项部分最大可达60字节。 第一个4…...
Kubernetes(K8s)从入门到精通系列之四:K8s的基本概念和术语之集群类
Kubernetes K8s从入门到精通系列之四:K8s的基本概念和术语之集群类 一、Master二、Node三、命名空间集群表示一个由Master和Node组成的K8s集群。 一、Master Master指的是集群的控制节点。在每个K8s集群都需要有一个或一组被称为Master的节点,来负责整个集群的管理和控制。M…...

黑马头条---day1
手机端查看 docker 容器,镜像操作命令 1、docker删除所有镜像命令 删除所有镜像的命令是Docker中一个非常常见的操作。下面是具体的实现步骤和命令示例: $ docker stop $(docker ps -aq) 停止所有正在运行的容器。 $ docker rm $(docker ps -aq) 删…...

【序列化工具JdkSerialize和Protostuff】
序列化工具对比 JdkSerialize:java内置的序列化能将实现了Serilazable接口的对象进行序列化和反序列化, ObjectOutputStream的writeObject()方法可序列化对象生成字节数组 Protostuff:google开源的protostuff采用更为紧凑的二进制数组&#…...

C++ 多线程编程导论(下)
文章目录 参考资料线程安全(续)门闩与屏障——latch 对象与 barrier 对象门闩(latch)屏障(barrier) 一次性调用——once_flag 对象与 call_once 函数 异步任务未来与承诺——future 对象与 promise 对象fut…...

Java并发系列之一:JVM线程模型
什么是线程模型: Java字节码运行在JVM中,JVM运行在各个操作系统上。所以当JVM想要进行线程创建回收这种操作时,势必需要调用操作系统的相关接口。也就是说,JVM线程与操作系统线程之间存在着某种映射关系,这两种不同维…...

容灾独家技术揭秘:HyperBDR无主机数据同步技术
01、一对一单机热备-传统灾备方式 单机热备是一种备份解决方案,它使用两台服务器来确保高可用性,是市场上最为常见的灾备模式。 在单机热备中,一台主服务器和一台备用服务器保持同步,以确保在主服务器出现故障或宕机时可以立即切换…...

FANUC机器人SRVO-050碰撞检测报警和SRVO-053干扰值过大故障报警总结
FANUC机器人SRVO-050碰撞检测报警和SRVO-053干扰值过大故障报警总结 前面和大家分享了关于SRVO-050碰撞检测报警和SRVO-053干扰值过大的原因分析以及处理方法,感兴趣的朋友可以参考以下链接中的内容: FANUC机器人SRVO-050碰撞检测报警原因分析及处理对策...

微信如何提高回复信息速度?
规范流程话术有什么用?为了提高回复客户的效率和质量,可以事先设计好的一套标准化的对话模板。它通常包括多个环节和问题,帮助客服人员或销售人员在与客户沟通时,按照标准化的流程进行,以提高工作效率和客户满意度。 如…...

模拟Stevens Lewis描述的小型飞机纵向动力学的非线性动态反演控制器研究(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 💥1 概述 针对Stevens和Lewis描述的小型飞机纵向动力学的非线性动态,研究非线性动态反演控制器可以是一个有趣的课题。动态反演控制器的目标…...

【C++从0到王者】第十二站:vector基本使用
文章目录 一、vector基本介绍二、vector的基本使用三、vector\<char> 和string的区别四、vector接口介绍1.vector的模板参数2.构造函数3.迭代器4.size和max_size5.resize和reserve6.operator[]和at7.front和back8.data9.push_back和pop_back10.insert和erase11.assign12.…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...