【Unity造轮子】实现一个类csgo的武器轮盘功能

news2024/10/6 18:25:44

文章目录

  • 前言
  • 素材导入
  • 开始
    • 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。如果你有任何问题,欢迎你来评论私信告诉我, 虽然有些问题我可能也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

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

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

相关文章

ModaHub魔搭社区:国产大模型名录和产品信息一览表114个

取名类型 公司名 大模型名字 序号 旧词新组 百度 文心一言 1 阿里 通义千问 2 知乎 知海图 3 云知声 山海 4 中国科学院计算技术研究所 百聆

算法通过村第二关-链表青铜笔记

文章目录 再战链表|反转链表剑指 Offer II 024. 反转链表熟练掌握这两种解法建立头节点的解决思路不采用建立头节点的方法采用循环/递归的方式解决 总结 再战链表|反转链表 提示&#xff1a;多拿些酒来&#xff0c;因为生命只有乌有。 剑指 Offer II 024. 反转链表 如果不使用…

Excel修改日期格式,改变日期的筛选方式

我们有两列日期数据&#xff1a; 左边这一列筛选会显示&#xff1a; 右边这一列筛选会显示&#xff1a; 修改格式&#xff0c;将【日期1】改为【日期2】 将【日期1】的格式修改为文本格式即可 修改格式&#xff0c;将【日期2】改为【日期1】 选中日期2&#xff0c;点击【数据…

实用调试技巧(1)

什么是bug&#xff1f;调试是什么&#xff1f;有多重要&#xff1f;debug和release的介绍。windows环境调试介绍。一些调试的实例。如何写出好&#xff08;易于调试&#xff09;的代码。编程常见的错误。 什么是Bug 我们在写代码的时候遇到的一些问题而导致程序出问题的就是Bu…

C语言——函数栈帧的创建和销毁

Hello&#xff0c;好久没有写博客了&#xff0c;前两份都是之前写的&#xff0c;看来最近有点懈怠&#xff0c;最近也得快点找回学习的状态&#xff0c;那今天开始我们新的讲解 在我们刚开始学习C语言的时候&#xff0c;不知道大家有没有困惑&#xff0c;比如我们在使用局部变量…

vue 表单form-item模板(编辑,查看,新建)

目录 formatFormData 后端数据格式​编辑 JSON解析和生成 加载&#xff08;请求前&#xff0c;await后&#xff09; formComp formatFormData 后端数据格式 为空的&#xff0c;可以直接不提交/提交null/undefined JSON解析和生成 var str {"name": "…

ERROR: No matching distribution found for wxpyhton

ERROR: No matching distribution found for wxpyhton pip install 库包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.compip install wxpython -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

Voicebox:文本引导的大规模多语言通用语音生成

说白了就是录一段你的声音&#xff0c;在最短的时间内学会你说话&#xff01; Meta AI研究团队模型&#xff0c;Voicebox是一个文本转语音的工具&#xff0c;具有多种功能和应用。根据提供的搜索结果&#xff0c;以下是Voicebox的一些功能和特点&#xff1a; 多语言支持&…

语义分割、转置卷积、风格迁移(第十二次组会)

TOC 语义分割 图像分割、实例分割 上采样、下采样 转置卷积 全卷积网络 风格迁移

操作系统_进程与线程(四)

目录 4. 死锁 4.1 死锁的概念 4.1.1 死锁的定义 4.1.2 死锁产生的原因 4.1.3 死锁的处理策略 4.2 死锁预防 4.3 死锁避免 4.3.1 系统安全状态 4.3.2 银行家算法 4.3.2.1 数据结构描述 4.3.2.2 银行家算法描述 4.3.2.3 安全性算法 4.3.3 安全性算法举例 4.3.4 银行…

【EI/SCOPUS会议征稿】第三届物联网与机器学习国际学术会议(IoTML 2023)

第三届物联网与机器学习国际学术会议&#xff08;IoTML 2023&#xff09; 2023 3rd International Conference on Internet of Things and Machine Learning 2023年物联网与机器学习国际学术会议&#xff08;IoTML 2023&#xff09;将于2023年9月15-17日在新加坡召开。会议…

安装华为模拟器

安装前需要安装虚拟机 虚拟机安装 下一步 立即安装 安装驱动 完成 一路下一步 安装完成后拖动一个2240启动

【Liux下6818开发板(ARM)】实现简易相册

(꒪ꇴ꒪ ),hello我是祐言博客主页&#xff1a;C语言基础,Linux基础,软件配置领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff01;送给读者的一句鸡汤&#x1f914;&#xff1a;集中起来的意志可以击穿顽石!作者水平很有限&#xff0c;如果发现错误&#x…

Linux NameSpace 虚拟化 资源隔离

NameSpace NameSpace介绍 在操作系统中命名空间命名空间提供的是系统资源的隔离&#xff0c;其中系统资源包括了&#xff1a;进程、网络、文件系统等等 实际上linux系统实现命名空间主要目的之一就是为了实现轻量级虚拟化服务&#xff0c;也就是我们说的容器&#xff0c;在同…

分享一个赛车动画

先看效果&#xff08;动画太大了放不上来&#xff0c;甘心去复制代码运行即可&#xff09;&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>赛车</title><…

AD21 PCB设计的高级应用(六)极坐标的应用

&#xff08;六&#xff09;极坐标的应用 在 PCB 设计过程中,特别是 LED圆形灯板的 PCB 设计,需要对 LED灯珠进行圆形等间距排列,如果每个元件都计算清楚其坐标再进行放置会非常烦琐。要实现如图 所示的元件布局效果,在 Altium Designer 软件里可以使用极坐标的方法。 (1)打开…

Vue2 第十一节 Vue的生命周期

1.生命周期的概念 2.生命周期流程图 3.生命周期分析 一.生命周期概念 生命周期又称为生命周期回调函数&#xff0c;生命周期函数&#xff0c;生命周期钩子是Vue在关键时刻帮我们调用的一些特殊名称的函数生命周期函数的名字不可更改&#xff0c;但函数的具体内容是程序员根…

【低代码开发】:加速应用开发的未来趋势

低代码开发&#xff1a;加速应用开发的未来趋势 引言什么是低代码以及功能特点&#xff1f;什么是低代码开发&#xff1f;低代码平台的特点和功能低代码平台的应用场景和优势低代码的优点低代码的缺点低代码平台项目开发流程选择和实施低代码平台 低代码未来的发展趋势低代码平…

MyBatis缓存-提高检索效率的利器--一级缓存

&#x1f600;前言 本篇博文是关于MyBatis一级缓存的介绍使用和缓存失效情况分析&#xff0c;希望能够帮助到您&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家…

c++基础知识(inline、auto、nullptr)

⭐️ 内联函数 &#x1f4ac; 为什么会有内联函数&#xff1f;   内联函数其实是为了弥补 c 的缺陷&#xff0c;比如当我们遇到了一些少量逻辑和代码的情况时&#xff0c;而这些少量的代码又需要被重复使用多次&#xff08;swap&#xff09;&#xff0c;我们往往会封装成为一…