Unity——指针跟随鼠标旋转,GTA武器菜单选择等效果实现
GTA武器菜单选择
简单实现这种效果
Demo的效果
以下是主要代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class Menu : MonoBehaviour {public Image[] items;public Color nomorlColor;public Color heightColor;int oldItemIndex = 0;// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {int currentItemindex = GetItemIndex();//设置高亮,并将其他item置回默认样式if (oldItemIndex != currentItemindex){items[currentItemindex].color = heightColor;items[oldItemIndex].color = nomorlColor;oldItemIndex = currentItemindex;}if (Input.GetMouseButtonDown(0)){//点击左键确认选择,这里未做处理}}//根据角度获得当前鼠标所处的image数组的indexint GetItemIndex(){//V是鼠标相对屏幕大小以中心点原点的2维向量Vector2 v = new Vector2(Input.mousePosition.x / Screen.width - 0.5f, Input.mousePosition.y / Screen.height - 0.5f);//f是(相对屏幕大小以中心点原点的坐标系)(0,1)与v的角度float f = Mathf.Atan2(v.x, v.y) * Mathf.Rad2Deg + 180;//根据f返回indexreturn ((int)(f / (360/items.Length)));}}
指针跟随鼠标旋转
效果1
效果2
这里可以看到,旋转的中心不再局限于屏幕中心的位置了,而是可以以任意位置为中心进行旋转.
需要注意的是
Canvas需要设置为overlay模式,其他模式下实现方式需要大家自己研究,这里只能使用overlay模式
以下是主要代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class RotateNeedle : MonoBehaviour {public Transform center;public Transform needle;public Color heightColor;private Color nomorlColor = Color.white;private Image needleImg;private bool isRotate = false;void Start () {needleImg = needle.GetComponent<Image>();nomorlColor = needleImg.color;}void Update () {if (Input.GetMouseButtonDown(0)){isRotate = true;}if (Input.GetMouseButtonUp(0)){isRotate = false;needleImg.color = nomorlColor;}if (isRotate){SetNeedleAngle(needle, center);needleImg.color = heightColor;}}void SetNeedleAngle(Transform _needle, Transform _center){if (_needle == null || _center == null){return;}var centerX = _center.transform.position.x;var centerY = _center.transform.position.y;var centerScreenPos = Camera.main.WorldToScreenPoint(center.transform.position);var mouseScreenPos = Camera.main.WorldToScreenPoint(Input.mousePosition);var angle = new Vector3(mouseScreenPos.x - centerScreenPos.x, mouseScreenPos.y - centerScreenPos.y, 0);var f = Mathf.Atan2(angle.x, angle.y) * Mathf.Rad2Deg;_needle.eulerAngles = Vector3.back* f;}
}
谢谢大家的点赞,收藏,评论,这些都是点点星光,似的前方的路,不再孤独
码云下载地址
百度网盘下载地址 提取码: r8me
Unity——指针跟随鼠标旋转,GTA武器菜单选择等效果实现相关推荐
- unity摄像机跟随鼠标旋转
第一种 float vertical = Input.GetAxis("Mouse X") float horizontal = Input.GetAxis("Mouse ...
- unity 用四元素实现摄像机的跟随鼠标旋转,缩放
此文章中的摄像机是第三人称游戏摄像机,脚本挂载在游戏人物身上 用四元素实现的unity摄像机跟随鼠标旋转缩放,并且有障碍物遮挡的时候摄像机会自动往前移. float MouseZ = -(Input. ...
- 元素跟随鼠标旋转,未待完续。。。。
本节主要讲的是元素跟随鼠标旋转主要是用到了原生js更改css的transform属性,这个属性下有很多方法,下面就只讲关于本节内容的几种方法,其他的可以私下自己去看一看 translate(x,y) ...
- Unity UI跟随鼠标移动
挂在需要跟随鼠标的UI上(Image,Text等) using System.Collections; using System.Collections.Generic; using UnityEng ...
- unity 摄像机镜头跟随鼠标拖拽
通过update方法记录变化量然后通过坐标换算移动摄像机 一.获取上一帧到当前帧鼠标位移变化量,计算过相机从上一针位置到当前帧位置移动的距离 /// <summary> / ...
- Unity跟随鼠标顺时针或逆时针旋转之美
下面要分享的是在开发过程中如何跟随鼠标实现顺时针或逆时针旋转. 代码如下: using System.Collections; using System.Collections.Generic; us ...
- Unity让物体跟随鼠标移动
前言 最近在学习Unity,记录下学习的成果吧.本文最终结果是要实现一个小飞机跟随鼠标移动的效果.看下图片. 向量 在Unity中,每个对象都有自己的位置属性,组件叫做Transform,通过Tran ...
- 鼠标旋转视角,摄像机跟随围绕主角,人物移动
{ 目录 人物移动+相机跟随脚本修改 Gpuinstance实现大面积草地 风吹麦浪+人物影响 后处理动态天空实现 动态天空实现 体积光实现的三种方法 } 草地+风场+UnityChan卡通渲染场景( ...
- 【Unity】 脚本控制人物移动/跳跃/视角跟随鼠标/脚步声
文章目录 一.目标 二.代码 三.收获 四.总结 一.目标 控制人物移动,奔跑,跳跃 人物视角跟随鼠标 移动时有背景音乐 二.代码 using System; using System.Linq; u ...
最新文章
- android加载时二级联动点击二级联动,Android实现联动下拉框二级地市联动下拉框功能...
- php读取txt插入数据库,PHP读取TXT文件插入数据库
- PyTorch基础-模型的保存和加载-09
- lightNLP:框架功能丰富,开箱即用
- android读写串口
- R语言︱集合运算——小而美法则
- 强烈推荐与孩子一起学编程(老少咸宜的编程入门奇书,荣获Jolt生产效率大
- python之time:基于python语言利用time模块计算运行时间—计算机器学习模型训练前后的时间代码实现
- CS229 Lecture 17
- DVR、NVR、DVS、IPC概念
- 用ReadyBoost提高Windows 7系统性能
- 支持jsp、php的免费空间
- 【Codeforces】Chloe and the sequence (递归)
- 闲鱼双11全链路营销体系初体验
- 智慧树知到等各大网课搜题接口及搜题公众号搭建教程
- GNN理论入门和小实践——从卷积讲起
- PowerDesigner菜单翻译
- HTML5+WebGL 3D机房开发实例
- php7.4新特性 多线程,PHP7新特性WhatwillbeinPHP7/PHPNG
- Mavlink协议概要
热门文章
- QQ聊天记录分析(R-3.5)
- C++ folly库解读(三)Synchronized —— 比std::lock_guard/std::unique_lock更易用、功能更强大的同步机制
- java web中td_Java匹马行天下之JavaWeb核心技术——JSP
- Linux 指令 关防火墙 挂载
- 杂谈POWERPOINT2010中的各项操作(三)
- 【面试准备】游戏开发中的几个岗位分别做什么考察侧重点
- 记一次spark任务调优过程
- Excel无法编辑单元格,如何撤销工作表或工作簿密码
- 安卓手机tiktok怎么下载_安卓手机清理大师下载安装-安卓手机清理大师官方下载v1.0.0 最新版...
- 第一次帮忙组装台式机