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");
    }
}

到此这篇关于Unity EasyTouch摇杆插件使用的文章就介绍到这了,更多相关Unity EasyTouch摇杆插件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Unity3D控件Easytouch控制主角移动

    本文实例为大家分享了Unity3D控件Easytouch控制主角移动的具体代码,供大家参考,具体内容如下 开发步骤: 1.导入Charactor Controller资源包: 2.导入Easy Touch 3.1.0的资源包: 3.创建一个人物模型: 4.新建一个Plane作为地板. 5.新建一个joystick,添加步骤如下图所示: 6.设置摇杆的相关属性: 注:如图中属性一定要设置好,不然的话会出现摇杆没有反应的情况!!! 7.为主角(即需要Easytouch摇杆控制移动的模型)新建一个脚本

  • Unity EasyTouch摇杆插件使用示例详解

    EasyTouch摇杆插件使用,先给大家展示下效果图: Demo展示 双指缩放在电脑端无法掩饰,竖屏将就看看吧: 插件名叫EasyTouch,有需要给我留言,不想开仓库传了: 创建摇杆点这里: 初始化 On_JoystickMove这个回调是用来控制移动的:分两个方向,x和y轴: void OnEnable() { EasyJoystick.On_JoystickMove += OnJoystickMove; } private void OnDisable() { EasyJoystick.O

  • 独立使用umi的核心插件模块示例详解

    目录 引言 实践 结语 引言 今天我们做一个有趣的尝试,将 umi 的核心插件模块独立出来作为另一个框架的基础架构,这里我们将它称为 konos. 介于 umi 自身的源码的独立拆分,要实现这个功能其实非常的简单.只需要单独使用 @umijs/core 就好. 实践 先看具体实践吧.以下步骤都是常规编写 cli 的一些步骤,我就不做过多的说明,如果你看不懂其中的某些代码,可以评论区留言,或者查看我的其他文章. 新建空白文件夹,mkdir konos 你可以根据你使用的电脑执行对应的命令来新建一个

  • kotlin android extensions 插件实现示例详解

    目录 前言 原理浅析 总体结构 源码分析 插件入口 配置编译器插件传参 编译器插件接收参数 注册各种Extension IrGenerationExtension ExpressionCodegenExtension StorageComponentContainerContributor ClassBuilderInterceptorExtension PackageFragmentProviderExtension 总结 前言 kotlin-android-extensions 插件是 Ko

  • mybatis的插件机制示例详解

    前言 Mybatis作为一个应用广泛的优秀的ORM框架,已经成了JavaWeb世界近乎标配的部分,这个框架具有强大的灵活性,在四大组件(Executor.StatementHandler.ParameterHandler.ResultSetHandler)处提供了简单易用的插件扩展机制.Mybatis对持久层的操作就是借助于四大核心对象.MyBatis支持用插件对四大核心对象进行拦截,对mybatis来说插件就是拦截器,用来增强核心对象的功能,增强功能本质上是借助于底层的动态代理实现的,换句话说

  • jQuery.Validate表单验证插件的使用示例详解

    jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求. 请在这里查看示例 validate示例 示例包含 验证错误时,显示红色错误提示 自定义验证规则 引入中文错误提示 重置表单需要执行2句话 源码示例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <

  • Unity实现植物识别示例详解

    接口介绍: 可识别超过2万种常见植物和近8千种花卉,接口返回植物的名称,并支持获取识别结果对应的百科信息:还可使用EasyDL定制训练平台,定制识别植物种类.适用于拍照识图.幼教科普.图像内容分析等场景. 创建应用: 在产品服务中搜索图像识别,创建应用,获取AppID.APIKey.SecretKey信息: 查阅官方文档,以下是植物识别接口返回数据参数详情: 定义数据结构: using System; /// <summary> /// 植物识别 /// </summary> [S

  • Unity游戏开发实现背包系统的示例详解

    目录 引言 一.UI设计 二.UI 2.1 Slot中的物品显示 2.2 物品切换 2.3 SlotUI的实现 2.4 物品描述信息的展示 三.数据 四.逻辑 引言 背包是游戏中经常使用的一个组件,它负责管理玩家在游戏中所获得的道具.一个完整的背包系统应当具有将物品放置进背包.对背包内物品进行管理和使用背包内物品等功能.而往往一个背包系统的逻辑关系较为复杂,如果把所有功能都放在一个脚本中实现会使代码显得十分冗杂且缺乏逻辑.所以在背包系统的设计过程中,我们常将其分解为数据.逻辑和UI三部分分别来进

  • babel插件去除console示例详解

    目录 起因 介绍 窥探 初见AST Program ExpressionStatement CallExpression MemberExpression Identifier StringLiteral 公共属性 如何写一个babel插件? 构造visitor方法 去除所有console 增加env api 增加exclude api 增加commentWords api 细节完善 对于后缀注释 对于前缀注释 发布到线上 安装 使用 起因 已经颓废了很久 因为实在不知道写啥了 突然我某个同事对

  • vue3自定义插件的作用场景及使用示例详解

    目录 插件的作用场景 插件的定义(注册) 插件的安装 插件的使用 插件中的Provide/inject 插件的作用场景 在vue2的插件那篇文章我们介绍过插件其实就是vue的增强功能.通常来为vue添加全局功能的.在vue3中插件的功能也是一样的,只是它们在定义上有所不同. 通过app.component()和app.directive()注册一到多个全局组件或自定义指令 通过app.provide()使一个资源可被注入进整个应用 向app.config.globalProperties中添加一

  • Unity实现卡片循环滚动效果的示例详解

    目录 简介 定义卡片的摆放规则 调整卡片的层级关系 调整卡片的尺寸大小 动态调整位置.层级和大小 移动动画 按钮事件 简介 功能需求如图所示,点击下一个按钮,所有卡片向右滚动,其中最后一张需要变更为最前面的一张,点击上一个按钮,所有卡片向左滚动,最前面的一张需要变更为最后一张,实现循环滚动效果. 最中间的一张表示当前选中项,变更为选中项的滚动过程中,需要逐渐放大到指定值,相反则需要恢复到默认大小. 实现思路: 定义卡片的摆放规则: 调整卡片的层级关系: 调整卡片的尺寸大小: 卡片向指定方向移动,

随机推荐