Unity 使用有限状态机 完美还原 王者荣耀 虚拟摇杆
Unity 使用有限状态机 完美还原 王者荣耀 虚拟摇杆
效果如图所示
摇杆的UI组成
如图所示 简单的可以认为摇杆由1、2、3贴图组成
- 为摇杆的底座
- 为摇杆的杆
- 为摇杆的指向
可以理解这就是街机上的摇杆
详解---摇杆显示规则
如图所示
- 最外面绿色的矩形为可点击区域
- 黑色矩形为摇杆的显示区域
摇杆在操作结束后会回到抬起位置(如图状态)
摇杆的可点击区域有限制(如图绿色框)
摇杆的显示区域有限制(如图黑色框 作用:防止摇杆一半在屏幕外 )
摇杆的中心位置随点击位置改变(如果在显示区域外则取临界值)
更据上面的规则定义public变量可以方便策划大佬运行状态随时修改
详解---操作摇杆的几种动作、状态
首先我们把摇杆系统分解成状态、动作
- 闲置(状态)
- 按下(动作)
- 抬起(动作)
- 准备(状态)
- 拖动(状态)
动作、状态区别(重点)
- 动作:一旦执行完毕就结束了(调用一次)
- 状态:如果没有外部条件的触发,一个状态会一直持续下去(不停的调用)
- 闲置---状态
- 不需要做任何处理
- 按下---动作(手指按下屏幕 触发)
- 获取手指按下坐标
- 设置摇杆的位置(如左图)
- 如果坐标在显示区域外,则取临界值(如右图)
- UI、特效的显示或隐藏
- 抬起---动作(手指离开屏幕 触发)
- 摇杆回到抬起位置
- UI、特效的显示或隐藏
- 准备---状态(手指按下屏幕动作完成 触发)
- 获取手指的实时坐标
- 如果实时坐标与按下坐标的距离大于设定值则切换到拖动状态
- UI、特效的显示或隐藏
- 拖动---状态(手指滑动 触发)
- 获取手指的实时坐标
- 获取实时坐标与摇杆的坐标的距离P
- 设置杆的位置
- 如果杆的位置超过可拖动的最大值则取最大值
- 设置指向的位置
- 如果距离P大于显示指向最小值则显示指向同时
- 否则隐藏指向
这些动作、状态是我边测试边写代码总结出来的
使用枚举定义摇杆的几种状态、动作
可源代码中找到对应的方法
详解---几种状态、动作之间切换
手指按下切换到---按下动作
手指抬起切换到---抬起动作
按下动作执行完成切换到---准备状态
准备状态达成条件切换到---拖动状态
使用到的API和方法
如果你理解了摇杆系统,但遇到了一些技术上的问题,下面的方法可能帮助你
- 计算两个坐标的距离
float distance = Vector3.Distance(Vec0, Vec1);
- 获取手指按下位置
Vector3 mousePosition = UICamera.currentTouch.pos;
- 计算手指按下相对于摇杆的位置
//转换为世界坐标
mousePosition = UICamera.currentCamera.ScreenToWorldPoint(mousePosition);
//转换为本地坐标
mousePosition = transform.InverseTransformPoint(mousePosition);
- 设置摇杆指向的角度
//mouseLocalPosition手指按下相对于摇杆的坐标
//background摇杆
//direction指向
Double angle = Math.Atan2((mouseLocalPosition.y - background.localPosition.y), (mouseLocalPosition.x - background.localPosition.x)) * 180 / Math.PI;
//设置摇杆指向的角度
direction.eulerAngles = new Vector3(0, 0, (float)angle);
如果有更好的办法 求大佬赐教
老规矩工程链接:https://github.com/QiangZou/Joystick
UI、适配由NGUI实现,需要导入NGUI到工程中(NGUI有点大,没上传)
Unity 使用有限状态机 完美还原 王者荣耀 虚拟摇杆的更多相关文章
- Unity 使用 陀螺仪 实现 《王者荣耀》 登入界面 背景动态效果
在 <王者荣耀> 登入界面 左右上下晃动手机(有些手机不支持)可以看到背景在变化 我使用的是iPhone SE 效果如下: 对比两张图片的左下角 可以看到差异 至于为什么要这么做: 1.使 ...
- Unity3d项目入门之虚拟摇杆
Unity本身不提供摇杆的组件,开发者可以使用牛逼的EasyTouch插件或者应用NGUI实现相关的需求,下面本文通过Unity自身的UGUI属性,实现虚拟摇杆的功能. 主参考 <Unity:使 ...
- Unity制作王者荣耀商业级手游
<王者荣耀>这种现象级手机游戏是如何制作出来的呢?本文以<王者荣耀>MOBO类型的多人在线战术竞技游戏为入口,覆盖Unity游戏制作开发前端与Node.js服务器端的开发必备知 ...
- 《王者荣耀》技术总监复盘回炉历程:没跨过这三座大山,就是另一款MOBA霸占市场了
如今已经大获市场成功的<王者荣耀>一直是业内各方关注的对象,而我们也知道这款产品在成为国民级游戏之前,也遇到过一段鲜有人知的调优期.也就是在2015年8月18号正式不删档测试版本推出之后, ...
- 【转】《王者荣耀》技术总监复盘回炉历程:没跨过这三座大山,就是另一款MOBA霸占市场了
如今已经大获市场成功的<王者荣耀>一直是业内各方关注的对象,而我们也知道这款产品在成为国民级游戏之前,也遇到过一段鲜有人知的调优期.也就是在2015年8月18号正式不删档测试版本推出之后, ...
- 王者荣耀是怎样炼成的(一)《王者荣耀》用什么开发,游戏入门,unity3D介绍
在国内,如果你没有听说过<王者荣耀>,那你一定是古董级的人物了. <王者荣耀>(以下简称“农药”),专注于移动端(Android.IOS)的MOBA游戏.笔者看到这么火爆,就萌 ...
- 基于NABCD评论作业-王者荣耀交流协会PSP DAILY
一.根据(不限于)NABCD评论作品的选题 N(Need,需求):在我知道PSP DAILY这款软件的时候,就认为这款软件对于学习软件工程课的学生来说有很大的需要.对于需求来说,软件工程课程中的学 ...
- [0]尝试用Unity3d制作一个王者荣耀(持续更新)->游戏规划
太得闲了于是想写个农药,虽然可能会失败但是还是要试一试. 因为是自学的不是Unity专业的可能表达语言会有些不标准!望见谅! 结构: 以组件式(比如说摇杆控制和玩家部分的编写是分离的,可以自由拼装)作 ...
- 当会打王者荣耀的AI学会踢足球,一不小心拿下世界冠军!
难得的元旦小假期,没有什么比得上在慵懒的冬日艳阳下放松自己,拿起手机,叫上了许久未一起作战的小伙伴,到王者荣耀中激战了一番,仿佛又回到了当年那个年轻的自己. 厉害不,毕竟当年DD也是王者五十星的水平, ...
随机推荐
- 类里面的非static const成员
类里面的成员变量可以用const修饰,在只用const不用static修饰的情况下,这种使用的限制比较多 (1)不能定义处初始化,必须在类的构造函数初始化列表里面初始化(虽然在vs中,可以在定义处初始 ...
- 情境领导II
情境领导理论认为,领导者的行为要与被领导者的准备程度相适应,才能取得有效的领导效果,也就是说领导风格不是一成不变的,而要根据环境及员工的变化而改变. 三大技巧分别为诊断.弹性与约定领导型态.诊断是评估 ...
- 2018.09.05 任务安排(斜率优化dp)
描述 这道题目说的是,给出了n项必须按照顺序完成的任务,每项任务有它需要占用机器的时间和价值.现在我们有一台机器可以使用,它每次可以完成一批任务,完成这批任务所需的时间为一个启动机器的时间S加上所有任 ...
- 2018.08.18 NOIP模拟 game(数位dp)
Game 题目背景 SOURCE:NOIP2015-SHY4 题目描述 Alice 和 Bob 正在玩一个游戏,两个人从 1 轮流开始报数,如果遇到 7 的倍数或者遇到的这个数的十进制表示中含 7 , ...
- 实现WIFI MAC认证与漫游
前言 单位里有10来个网件的AP(WNAP210),需要对接入端(主要是手机)进行MAC认证,原来采用AP本地MAC认证,但是人员经常变动(离职),另外人员的岗位(流水线)也经常调整,这样就需在变动后 ...
- 如何更改myecelipse、eclipse的Project Explorer的背景颜色
这个是我研究了很久发现的,因为myecelipse.eclipse本身是随着系统的颜色改变而改变的,windows系统都会随着系统改变而改变的,所以找了很多资料都没能改变它的背景色,今天发现了一个不错 ...
- MATLAB实现截位的问题
讨论MATLAB怎样提取10进制中的位的方法,因为做FFT时要用到截位,相去验证它,向同庆请教, 原来只是除以2的N次方,取模取余就行了,可恨我还想了一下午,也没有一个好办法. 接下来的问题是,对于负 ...
- 池建强 博客 Mac使用技巧 第一季
第1天: 今天推送的Mac技巧: 使用OS X,我们可以充分利用系统提供的多个Space,把不同的程序放到不同的Space,让我们的系统更有扩展性.如何增加Space呢?四指上推,在桌面的最上方会出现 ...
- HDU1078 FatMouse and Cheese(DFS+DP) 2016-07-24 14:05 70人阅读 评论(0) 收藏
FatMouse and Cheese Problem Description FatMouse has stored some cheese in a city. The city can be c ...
- POJ1410_还是没考虑全面——线段是否与矩形有共同的垂直投影
题意如题目 有几个点1.怪我没读好题目:给出的矩形两个端点不一定都是左上右下,但是肯定能勾勒出一个矩形. 2.现在才发现很多线段相交的判断我都没有仔细考虑这一个问题 bool ssinsert(Poi ...