Unity EasyTouch摇杆插件使用示例详解
作者:小紫苏xw 发布时间:2023-01-26 17:09:17
标签:Unity,EasyTouch,插件
EasyTouch摇杆插件使用,先给大家展示下效果图:
Demo展示
双指缩放在电脑端无法掩饰,竖屏将就看看吧;
插件名叫EasyTouch,有需要给我留言,不想开仓库传了;
创建摇杆点这里:
初始化
On_JoystickMove这个回调是用来控制移动的;分两个方向,x和y轴;
void OnEnable()
{
EasyJoystick.On_JoystickMove += OnJoystickMove;
}
private void OnDisable()
{
EasyJoystick.On_JoystickMove -= OnJoystickMove;
}
private void OnDestroy()
{
EasyJoystick.On_JoystickMove -= OnJoystickMove;
}
自定义On_JoystickMove
我的摇杆物体名称叫做MoveControl;
void OnJoystickMove(MovingJoystick move)
{
if (move.joystickName != "MoveControl")
{
return;
}
float PositionX = move.joystickAxis.x; //获取摇杆偏移摇杆中心的x坐标
float PositionY = move.joystickAxis.y; //获取摇杆偏移摇杆中心的y坐标
Vector2 value = move.joystickValue;
if (PositionY != 0 || PositionX != 0)
{
//设置控制角色或物体方块的朝向(当前坐标+摇杆偏移量)
//transform.LookAt(new Vector3(transform.position.x + PositionX, transform.position.y,transform.position.z + PositionY));
//移动角色或物体的位置(按其所朝向的位置移动)
Vector3 dir = new Vector3(PositionX, PositionY, 0);
transform.Translate(dir * Time.deltaTime * speed);
}
}
这两个物体控制摇杆,EasyTouch一定不能删除;
手势功能
这套插件还支持双指缩放,滑动,手指画圈,点击,多指触碰,拖拽等;
具体api看注释:
public class Zoom : MonoBehaviour
{
bool isStart = false;
public Button BtnReset;
public Button BtnLoadScene;
public Text log;
void OnEnable() {
EasyTouch.On_Swipe += On_Swipe;
EasyTouch.On_Drag += On_Drag;
EasyTouch.On_Swipe2Fingers += On_Swipe2Fingers;
EasyTouch.On_PinchEnd += On_PinchEnd;
EasyTouch.On_PinchIn += On_PinchIn;
EasyTouch.On_PinchOut += On_PinchOut;
BtnReset.onClick.AddListener(ResetScene);
BtnLoadScene.onClick.AddListener(OnLoadScene);
}
void OnDisable() {
EasyTouch.On_Swipe -= On_Swipe;
EasyTouch.On_Drag -= On_Drag;
EasyTouch.On_Swipe2Fingers -= On_Swipe2Fingers;
EasyTouch.On_PinchEnd -= On_PinchEnd;
EasyTouch.On_PinchIn -= On_PinchIn;
EasyTouch.On_PinchOut -= On_PinchOut;
BtnReset.onClick.RemoveListener(ResetScene);
}
void OnDestroy() {
EasyTouch.On_Swipe -= On_Swipe;
EasyTouch.On_Drag -= On_Drag;
EasyTouch.On_Swipe2Fingers -= On_Swipe2Fingers;
EasyTouch.On_PinchEnd -= On_PinchEnd;
EasyTouch.On_PinchIn -= On_PinchIn;
EasyTouch.On_PinchOut -= On_PinchOut;
BtnReset.onClick.RemoveListener(ResetScene);
}
/// <summary>
/// 重置cube和相机
/// </summary>
void ResetScene() {
transform.position = Vector3.zero;
transform.rotation = Quaternion.Euler(Vector3.zero);
Camera.main.transform.position = new Vector3(0, 0, -10);
}
/// <summary>
/// 滑动使cube旋转
/// </summary>
/// <param name="ges"></param>
void On_Swipe(Gesture ges) {
Vector3 vec = new Vector3(ges.deltaPosition.y, ges.deltaPosition.x, 0);
transform.Rotate(vec ,Space.World);
log.text = "滑动使cube旋转";
}
/// <summary>
/// 拖拽移动cube
/// </summary>
/// <param name="ges"></param>
void On_Drag(Gesture ges) {
if (ges.pickObject == gameObject) {
transform.position = ges.GetTouchToWordlPoint(10);//相机z=-10 cube 0
log.text = "拖拽移动cube";
}
}
/// <summary>
/// 双指滑动 平面移动相机
/// </summary>
/// <param name="ges"></param>
void On_Swipe2Fingers(Gesture ges)
{
Camera.main.transform.Translate(new Vector3(-ges.deltaPosition.x*Time.deltaTime*25,
-ges.deltaPosition.y*Time.deltaTime*25, 0));
log.text = "双指滑动移动相机";
}
/// <summary>
/// 拉近拉远相机
/// </summary>
/// <param name="ges"></param>
private void On_PinchIn(Gesture gesture){
if (gesture.pickObject == gameObject){
float zoom = Time.deltaTime * gesture.deltaPinch;
isStart = true;
Vector3 scale = transform.localScale ;
transform.localScale = new Vector3( scale.x - zoom, scale.y -zoom, scale.z-zoom);
}
}
private void On_PinchOut(Gesture gesture){
if (gesture.pickObject == gameObject){
float zoom = Time.deltaTime * gesture.deltaPinch;
isStart = true;
Vector3 scale = transform.localScale ;
transform.localScale = new Vector3( scale.x + zoom, scale.y +zoom,scale.z+zoom);
}
}
private void On_PinchEnd(Gesture gesture){
if(isStart ){
if (gesture.pickObject == gameObject){
print ("End");
}
}
}
void OnLoadScene()
{
SceneManager.LoadScene("TestJoyStick");
}
}
来源:https://www.cnblogs.com/littleperilla/p/15435638.html


猜你喜欢
- 1.前言本来想拿学校机房的Android编辑器直接粘到自己电脑上用,发现它的eclipse是32位的,而我的JDK是64位的,于是想到干脆装
- 本文实例讲述了Android开发中应用程序分享功能。分享给大家供大家参考,具体如下:Intent shareIntent = new Int
- 一、线程异常我们在单线程中,捕获异常可以使用try-catch,代码如下所示:using System;namespace Multithr
- 前言快捷方式是一种特殊的文件,扩展名为 lnk。有很多种方式来创建快捷方式,首先我们看一下快捷方式是什么。对快捷方式点右键,选择属性菜单,在
- java读写ini文件、FileOutputStream在上课让学生练习文件读写,就让他们做了一个使用文件保存账号和密码的练习,有一个比较爱
- 本文实例讲述了Android开发之组件GridView简单使用方法。分享给大家供大家参考,具体如下:案例:简单的图片浏览器,保存图片到相册保
- 一、API简介Thread.sleep()是Thread类的一个静态方法,使当前线程休眠,进入阻塞状态(暂停执行),如果线程在睡眠状态被中断
- Spring-boot JMS 发送消息慢的问题解决1、在《ActiveMQ 基于zookeeper的主从(levelDB Master/S
- 缓存可以说是加速服务响应速度的一种非常有效并且简单的方式。在缓存领域,有很多知名的框架,如EhCache 、Guava、HazelCast等
- 点击按钮,先自动进行下拉刷新,也可以手动刷新,刷新完后,最后就多一行数据。有四个选项卡。前两天导师要求做一个给本科学生预定机房座位的app,
- 今天突然想起来,java产生随机数的问题,上机试了一下,找到了一点区别,在这里总结一下;直接调用Math.random()是产生一个[0,1
- 开发Android程序时,有时候在程序运行的时候,不能让系统休眠,否则有一些运行会停止,因此我们需要设置禁止休眠,有两种方式: &
- 一、配置xml路径mybatis-plus:mapper-locations: classpath:mapper/*.xml二、编写Mapp
- 前言Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBa
- 当我们打开app的时候是不是会有一瞬间的白屏然后再进入主活动,虽然这并不会造成什么不好的后果,但是感觉用户体验就不是很好。像网易云音乐等等
- 一、举个栗子public class BeanServiceImpl implements BeanService {}@Configura
- 在windows应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Microsoft .Net Framework的
- 完成支付宝支付、查询的接口之后,我们应该还需要定时与支付宝进行对账,以确保商户系统的订单信息是正确的,想知道支付宝支付、查询接口实现过程的亲
- java字段值为null,不返回该字段类上打注解@JsonSerialize(include = JsonSerialize.Inclusi
- 本文实例讲述了Android编程实现AIDL(跨进程通信)的方法。分享给大家供大家参考,具体如下:一. 概述:跨进程通信(AIDL),主要实