【Unity插件】游戏摇杆Joystick
文章目录
- 前言
- 一、Joystick摇杆类型
- 二、摇杆基本属性
- 三、摇杆使用方法
- 四、其他功能及扩展
- 总结
前言
最近开发很多游戏Demo中都有用到游戏摇杆Joystick。个人还是挺喜欢用这个插件的,很方便。今天在这里简单介绍一下。
一、Joystick摇杆类型
Joystick Pack包含多个不同的虚拟游戏杆,可通过简单的拖放轻松在项目中使用(很适合小游戏开发,轻量级别)。
动态摇杆 Dynamic Joystick
动态摇杆是识别玩家触摸的地方,从触摸的地方开始,然后随着触摸位置的变化在屏幕上移动。
固定摇杆 Fixed Joystick
固定摇杆是当你开发时设置好它在场景中的位置,它就保持在固定位置。玩家在游戏中也只能触摸该位置进行控制。
浮动摇杆 Floating Joystick
浮动摇杆是识别玩家按下的地方,保持固定在该位置,直到释放触摸为止。当玩家再次触摸时,位置会重新调整到玩家按下的位置。
可变摇杆 Variable Joystick
可变摇杆可以在以上三种模式之间切换。比较适用于游戏中玩家决定使用哪个
二、摇杆基本属性
以可变摇杆为例
手柄范围 Handle Range:
从摇杆中心移动到边缘的距离。
盲区 Dead Zone:
与中心输入保持的距离,在该盲区半径内不响应拖动事件。
轴选项 Axis Options:
摇杆使用哪个轴,水平或垂直,或者两个轴都有使用。
Snap X:
将输入沿水平轴对齐到整数值。(1、0或-1)
Snap Y:
将输入沿垂直轴对齐到整个值。(1、0或-1)
移动阈值 Move Threshold:
该属性适用于摇杆类型为动态Dynamic。
当中心输入开始移动之前,必须与摇杆保持的一定距离。
摇杆类型Joystick Type:
只可变摇杆有该功能。可以设置当前的摇杆类型。
例如将摇杆设置为固定模式,代码如下:
variableJoystick.SetMode(JoystickType.Fixed);
背景 Background:
背景对象上的RectTransform组件。
可以通过Image组件的Source Image改变摇杆背景的样式。
摇杆 Handle:
摇杆柄对象上的RectTransform组件。
可以通过Image组件的Source Image改变摇杆柄的样式。
三、摇杆使用方法
1.将摇杆添加到场景中
找到Joystick Pack下Prefabs文件夹,选择要使用的摇杆并将其拖到场景中。记住哦,它是UI元素,要确保它在画布中。
2.编辑脚本:通过摇杆移动目标
可以给目标加上刚体,获取摇杆的横向值和纵向值来确定移动方向,然后给刚体添加对应方向的力让目标动起来。
也可以通过直接控制目标的位置信息来移动目标。
public float moveSpeed;//移动速度
public VariableJoystick variableJoystick;//摇杆
public Rigidbody rb;//刚体private void FixedUpdate()
{//根据摇杆方向设置目标移动的方向Vector3 direction = Vector3.forward * variableJoystick.Vertical + Vector3.right * variableJoystick.Horizontal;//给刚体添加一个力使其向该方向移动rb.AddForce(direction * moveSpeed * Time.fixedDeltaTime, ForceMode.VelocityChange);//或者直接控制目标位置信息来移动目标//base.transform.position += direction * moveSpeed * Time.fixedDeltaTime;
}
3.编辑脚本:通过摇杆来控制目标旋转
public float rotateSpeed;//旋转速度
public VariableJoystick variableJoystick;//摇杆private void FixedUpdate()
{//根据摇杆方向设置目标移动的方向Vector3 direction = Vector3.forward * variableJoystick.Vertical + Vector3.right * variableJoystick.Horizontal;//这里判断移动的数值是否不等于0,保证按下未位移时不做旋转运动(也可以通过设置VariableJoystick的盲区值大于0,比如0.1)if(!Mathf.Approximately(Mathf.Abs(m_VariableJoystick.Vertical), 0.0f) || !Mathf.Approximately(Mathf.Abs(m_VariableJoystick.Horizontal), 0.0f)){//计算角度floatangle = Vector3.Angle(Vector3.forward, direction);//计算角度方向angle *= (Vector3.Dot(Vector3.up, Vector3.Cross(Vector3.forward, direction)) < 0? -1 : 1);//根据角度信息获取旋转信息Quaternion targetQuaternion = Quaternion.Euler(newVector3(0, angle, 0));//利用Quaternion.Slerp对目标旋转进行球形插值计算base.transform.rotation = Quaternion.Slerp(base.transform.rotation, targetQuaternion, Time.fixedDeltaTime * rotateSpeed);}
}
4.将脚本挂载在需要移动的目标上,并设置上对应的信息。
四、其他功能及扩展
游戏过程中不显示摇杆信息
很多小游戏中希望玩家操作摇杆时不显示摇杆信息。我们可以通过将组件Background和Handle的Image组件Color的Alpha值设为0。
摇杆是否正在拖拽中
游戏中有时候我们需要知道摇杆是否正在拖拽中,例如我们希望未拖拽时玩家为待机模式,而拖拽过程中玩家为奔跑移动模式。
找到Joystick.cs脚本,在脚本中添加如下代码:
public bool IsDraging { get; private set; }//获取当前是否拖拽中
找到OnPointerDown函数,添加如下代码:
public virtual void OnPointerDown(PointerEventData eventData)
{OnDrag(eventData);//以下是需要添加的代码IsDraging = true;
}
找到OnPointUp函数,如下添加代码:
public enum PlayerMode
{Idle = 0,Move = 1
}public VariableJoystick variableJoystick;//摇杆
public PlayerMode playerMode = PlayerMode.Idle;
private void FixedUpdate()
{if (variableJoystick.IsDraging){this.playerMode = PlayerMode.Move;}else{this.playerMode = PlayerMode.Idle;}
}
监听摇杆拖拽进行时驱动事件
在Joystick.cs脚本添加如下代码:
public class OnChangeEvent : UnityEvent<Vector2> { }
[FormerlySerializedAs("OnValueChange")]
[SerializeField]
private OnChangeEvent m_OnValueChanged = new OnChangeEvent(); //事件
public OnChangeEvent OnValueChange
{get { return m_OnValueChanged; }set { m_OnValueChanged = value; }
}private void Update()
{if (IsDraging) //摇杆拖拽进行时驱动事件{m_OnValueChanged.Invoke(Direction);}
}
玩家对应的脚本处注册OnValueChanged 事件监听
public VariableJoystick variableJoystick;//摇杆
private void Start()
{this.variableJoystick.OnValueChange.AddListener(direction => this.OnValueChanged(direction));
}private void OnValueChanged(Vector2 direction)
{//在这里就可以获取偏移量来控制游戏对象运动
}
总结
如果有不懂的可以留言或者私信给我哦~~~
Joystick Pack可以直接在Unity Assets Store中搜索关键字Joystick获取,或者点击下方链接下载:
https://assetstore.unity.com/packages/tools/input-management/joystick-pack-107631
【Unity插件】游戏摇杆Joystick相关推荐
- Unity UGUI通过摇杆joystick 控制角色移动 标准的第三人称视角手游-左侧控制移动,右侧控制视角和方向
Unity UGUI通过摇杆joystick 控制角色移动 标准的第三人称视角手游-左侧控制移动,右侧控制视角和方向 效果图显示 附上demo下载地址 备注:资源是URP的,普通平台修改资源材质即可 ...
- Arduino使用游戏摇杆joystick
这是我买的37款传感器套件中的一款,下面是截图: 根据参考文献1,了解到游戏摇杆的五个引脚的意义,除了电源正极和负极之外: VRx表示X轴方向的输出 VRy表示Y轴方向的输出 SW输出0表示按下摇杆, ...
- [Unity][插件]游戏中显示FPS帧数
在Unity 的Asset Store 商店中搜索 FPS.这些插件用于显示 FPS帧数 FPS Counter,FPS Label,Fps Graph Analyzer
- PS2游戏摇杆joystick与arduino uno简单实验
某宝上买的joystick 可以看到有五个引脚:Vcc,GND,VRx,VRy,SW(switch即按钮) 网上有很多例子都是说SW接arduino数字IO口,我把它接到模拟输入IO后经过调试,发现我 ...
- Unity—UGUI游戏摇杆的制作
using UnityEngine; using System.Collections; using System;//新增命名空间 using UnityEngine.EventSystems;// ...
- linux 驱动程序 摇杆 游戏,SDL游戏摇杆(Joy Stick)开发
一直以为LINUX下SDL游戏摇杆(JoyStick)编程好象没有什么含意,没有什么合适的硬件来测试.近日去找华强北找实验模块,偶然找到USB的游戏摇杆.买来来一试,插上Linux直接支持,并且以在支 ...
- Arduino简单实例之四_PS2游戏摇杆
1) 说明: PS2 游戏双轴摇杆传感器模块由采用金属 PS2 摇杆电位器制作,具有(X,Y)2 轴模拟输出,(Z) 1路按钮数字输出.可制作遥控器等互动作品. SW引脚按下去时输出低电平,反之输出高 ...
- Unity游戏摇杆解决方案--OneJoystick
Unity游戏摇杆解决方案–OneJoystick 通过摇杆的输入来控制玩家的移动是常见的游戏控制方案.目前市面上的遥感方案缺少具体的示例,有些方案功能又过于复杂.OneJoystick是一个相对来说 ...
- AR+LBS街景实景红包PokemonGo游戏捉妖夺宝营销解决方案定制开发暨百度高德地图Unity插件SDK
AR+LBS街景实景红包PokemonGo游戏捉妖夺宝营销解决方案定制开发暨百度高德地图Unity插件SDK 作者 komstone https://blog.csdn.net/komstone/ar ...
最新文章
- Java TCP 编程简介
- mysql匹配数据结构_MySQL索引背后的数据结构及原理
- 调用视频流html代码,如何将/“流”视频文件发送到HTML5视频标签
- vc++ List Control控件获得所有选中行的序号
- JavaScript 字符串处理方法总结
- c++ 多个线程操作socket要同步吗_基础知识深化:NIO优化原理和Tomcat线程模型
- processing动态代码大全_做一张动态海报需要多少步?
- 微软将终止支持 Win7;今日头条不与微信竞争;诺基亚芬兰裁员 | 极客头条
- 使用Perl实现系统管理自动化(第二版) 中文电子版
- 第29期:蓝桥杯练习-2022/2/12
- matlab小波分析特征提取,基于小波分析的特征信号提取的matlab程序
- 【git学习】fatal: unable to access XXX: Failed to connect to github.com port 443: Timed out怎么解决
- java阴历阳历_Java 阴历阳历转换
- matlab图像取样和量化,数字图像基础之图像取样和量化
- ODN中主干光交和配线光交的数量比例
- Vue解决导出pdf文件图片展示不全问题
- 目前重庆橱柜市场分析
- 解决论文目录页码对不齐问题
- html中outline属性,css的outline属性的作用是什么
- Heavy Transportation(最短路)