Unity Pico手柄触摸圆盘滑动功能

Andriod小程序——简单制作游戏中控制任务移动的轮盘 Andriod小程序——简单制作游戏中控制任务移动的轮盘 说明自定义自己的view继承于View类重写onDraw()方法当我们看到这个控件的时候那个样子,如图完善onDraw()方法重写OnTouch()方法更新onDraw()方法解决遗留问题解决切割问题解决主程序的调用问题最后放上程序的完整代码重写的控件主程序中调用 说明 近期有在做一个项目,项目的其中一个要求就是,做一个控制设备上下左右的轮... 阅读详情

Pico 开发SDK 中实现了对手柄触摸圆盘中上滑,下滑,左滑,右滑的判定,只是将这些方法写进了拓展的API中,并且默认是不被启用的。所以我们通过查看源码便可轻松调用里面的方法属性。
查看SDK中Pvr_ControllerManager.cs中第304行开始。

我们发现在拓展的API中实现了长按和滑动的功能,通过ExtendedAPI控制是否启用。我们可以将ExtendedAPI设置为True,调用里面的布尔属性:

  TouchPadKey.slideright   //向右滑动
    TouchPadKey.slideleft //向左滑动
    TouchPadKey.slidedown //向下滑动
    TouchPadKey.slideup //向上滑动
 #region extended api
            //打开扩展API后,提供长按和滑动功能
            if (ExtendedAPI)
            {
                //slip
                if (TouchPadPosition.x > 0 || TouchPadPosition.y > 0)
                {
                    if (!touchClock)
                    {
                        touchXBegin = TouchPadPosition.x;
                        touchYBegin = TouchPadPosition.y;
                        touchClock = true;
                    }
                    touchXEnd = TouchPadPosition.x;
                    touchYEnd = TouchPadPosition.y;
                }
                else
                {
                    if (touchXEnd > touchXBegin)
                    {
                        if (touchYEnd > touchYBegin)
                        {
                            if (touchXEnd - touchXBegin > slipNum && ((touchXEnd - touchXBegin) > (touchYEnd - touchYBegin)))
                            {
                                //slide up
                                TouchPadKey.slideup = true;
                            }
                            if (touchYEnd - touchYBegin > slipNum && ((touchYEnd - touchYBegin) > (touchXEnd - touchXBegin)))
                            {
                                //slide right
                                TouchPadKey.slideright = true;
                            }
                        }
                        else if (touchYEnd < touchYBegin)
                        {
                            if (touchXEnd - touchXBegin > slipNum && ((touchXEnd - touchXBegin) > (touchYBegin - touchYEnd)))
                            {
                                //slide up
                                TouchPadKey.slideup = true;
                            }
                            if (touchYBegin - touchYEnd > slipNum && ((touchYBegin - touchYEnd) > (touchXEnd - touchXBegin)))
                            {
                                //slide left
                                TouchPadKey.slideleft = true;
                            }
                        }
                    }
                    else if (touchXEnd < touchXBegin)
                    {
                        if (touchYEnd > touchYBegin)
                        {
                            if (touchXBegin - touchXEnd > slipNum && ((touchXBegin - touchXEnd) > (touchYEnd - touchYBegin)))
                            {
                                //slide down
                                TouchPadKey.slidedown = true;
                            }
                            if (touchYEnd - touchYBegin > slipNum && ((touchYEnd - touchYBegin) > (touchXBegin - touchXEnd)))
                            {
                                //slide right
                                TouchPadKey.slideright = true;
                            }
                        }
                        else if (touchYEnd < touchYBegin)
                        {
                            if (touchXBegin - touchXEnd > slipNum && ((touchXBegin - touchXEnd) > (touchYBegin - touchYEnd)))
                            {
                                //slide down 
                                TouchPadKey.slidedown = true;
                            }
                            if (touchYBegin - touchYEnd > slipNum && ((touchYBegin - touchYEnd) > (touchXBegin - touchXEnd)))
                            {
                                //slide left
                                TouchPadKey.slideleft = true;
                            }
                        }
                    }
                    else
                    {
                        TouchPadKey.slideright = false;
                        TouchPadKey.slideleft = false;
                        TouchPadKey.slidedown = false;
                        TouchPadKey.slideup = false;
                    }
                    touchXBegin = 0;
                    touchXEnd = 0;
                    touchYBegin = 0;
                    touchYEnd = 0;
                    touchClock = false;
                }

                //longpress
                if (HomeKey.state)
                {
                    HomeKey.timecount += Time.deltaTime;
                    if (HomeKey.timecount >= longPressTime && !HomeKey.longPressedClock)
                    {
                        HomeKey.longPressed = true;
                        HomeKey.longPressedClock = true;
                        longPressclock = true;
                    }
                    else
                    {
                        HomeKey.longPressed = false;
                    }
                }
                else
                {
                    HomeKey.longPressedClock = false;
                    HomeKey.timecount = 0;
                    HomeKey.longPressed = false;
                }
                if (APPKey.state)
                {
                    APPKey.timecount += Time.deltaTime;
                    if (APPKey.timecount >= longPressTime && !APPKey.longPressedClock)
                    {
                        APPKey.longPressed = true;
                        APPKey.longPressedClock = true;
                        longPressclock = true;
                    }
                    else
                    {
                        APPKey.longPressed = false;
                    }
                }
                else
                {
                    APPKey.longPressedClock = false;
                    APPKey.timecount = 0;
                    APPKey.longPressed = false;
                }
                if (TouchPadKey.state)
                {
                    TouchPadKey.timecount += Time.deltaTime;
                    if (TouchPadKey.timecount >= longPressTime && !TouchPadKey.longPressedClock)
                    {
                        TouchPadKey.longPressed = true;
                        TouchPadKey.longPressedClock = true;
                        longPressclock = true;
                    }
                    else
                    {
                        TouchPadKey.longPressed = false;
                    }
                }
                else
                {
                    TouchPadKey.longPressedClock = false;
                    TouchPadKey.timecount = 0;
                    TouchPadKey.longPressed = false;
                }
                if (VolumeUpKey.state)
                {
                    VolumeUpKey.timecount += Time.deltaTime;
                    if (VolumeUpKey.timecount >= longPressTime && !VolumeUpKey.longPressedClock)
                    {
                        VolumeUpKey.longPressed = true;
                        VolumeUpKey.longPressedClock = true;
                        longPressclock = true;
                    }
                    else
                    {
                        VolumeUpKey.longPressed = false;
                    }
                }
                else
                {
                    VolumeUpKey.longPressedClock = false;
                    VolumeUpKey.timecount = 0;
                    VolumeUpKey.longPressed = false;
                }
                if (VolumeDownKey.state)
                {
                    VolumeDownKey.timecount += Time.deltaTime;
                    if (VolumeDownKey.timecount >= longPressTime && !VolumeDownKey.longPressedClock)
                    {
                        VolumeDownKey.longPressed = true;
                        VolumeDownKey.longPressedClock = true;
                        longPressclock = true;
                    }
                    else
                    {
                        VolumeDownKey.longPressed = false;
                    }
                }
                else
                {
                    VolumeDownKey.longPressedClock = false;
                    VolumeDownKey.timecount = 0;
                    VolumeDownKey.longPressed = false;
                }

            }
            #endregion

方法使用示例

 void Update()
    {
        Debug.Log("x:"+TouchPadPosition.x);
        Debug.Log("y:"+TouchPadPosition.y);
        ShowText_x.text = "x:" + TouchPadPosition.x.ToString();
        ShowText_y.text = "y:" + TouchPadPosition.y.ToString();     
        
        
         
        if ( TouchPadKey.slideup )
        {           
            Debug.Log("向上滑");        
        }    
        if ( TouchPadKey.slidedown )
        {          
            Debug.Log("向下滑");         
        }
        if ( TouchPadKey.slideleft )
        {           
            Debug.Log("向左滑");        
        }
        if ( TouchPadKey.slideright )
        {         
            Debug.Log("向右滑");   
        }
        if ( TouchPadPosition.x != 0 || TouchPadPosition.y != 0 )
        {
           //to do something 
        }
    }

更多的功能可以摸索实现。

基于Pico在Unity开发中点击事件及检测的功能实现 Pico在Unity开发中点击事件及检测的功能实现 阅读详情

相关推荐

Unity中PICO中手柄按键返回值

在上篇文章中,我们实现了PICO中 隔空取物 和 接触抓取。在这篇文章中,我们来实现 手柄C#脚本交互。

楠溪泽岸的博客 3729

unity 简单的图片UI圆盘滑动

首先说一下效果,滑动圆盘,最上面得按钮会移出屏幕,从最下面出现。想法:1 在圆盘的中间偏左有一个标志图片,滑动圆盘,当最上面的按钮的X值小于标志图片的X值时,将按钮加入到一个List列表中,并将按钮设置为false,布尔设置为false2 当圆盘的X值大于标志图片的x值,将列表中的按钮赋值给圆盘,设置为True;首先在UI上创建一个圆盘,放在Canvas右侧,每个子物体一次旋转30°。面板上格式去...

qq_40294213的博客 8065

Pico学习笔记——物体交互(点击事件)

话不多说,直接上代码 该脚本用于控制Pico手柄,调用事件 这个是根据在导入的sdk的demo中找到的一个脚本进行修改的。 public class Pvr_PicoCtrl : MonoBehaviour { public GameObject HeadSetController; //pico预设上面的那个篮色的圈 public GameObject controller0; //手柄0 controller0 在pico的预设上面 public GameObject controller1;

qq_43667985的博客 6672

UE4 VR 手柄代替鼠标滚轮(HTC VIVE)

在网上找了好久,没找到相应的资料,自己随便查了一下函数,居然找到了,运气好。         功能:用HTC VIVE手柄模拟鼠标滚轮(wheel)。         做法如图:               So easy!!!

一个字 3910

【VR设备PICO 4教程】Unity3D中实现对PICO 4的手柄按键响应

最近在搞PICO 4开发,尝试了几种PICO 4的手柄按钮响应方法,这篇文章就总结一下几种按钮响应方法。后面,还会根据PICO 4开发的项目配置、开发环境配置、SDK导入、创建场景、移动、瞬移、射线、抓握等内容进行总结,形成PICO 4系列开发文章,尽请期待。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 3434

Pico一体机开发环境Unity工程项目文件

本项目工程使用Unity5.6.1f1,搭建Pico一体机开发环境,项目中创建了项目开发中场景用的文件夹,为便于开发,已经写好手柄射线检测的方法,在脚本中通过Pvr_Controller.CurrColliderGameObject方法调用即可。

【PS4开发】unity3d ps4手柄键位

●按钮 Square = joystick button 0 X = joystick button 1 Circle = joystick button 2 Triangle= joystick button 3 L1 = joystick button 4 R1 = joystick button 5 L2 = joystick button 6 R2 = joystick b

鱼蛋的开发小站 1万+

IQA图像质量评价 数据集介绍(LIVE、TID2013、CSIQ、LIVEC、KonIQ-10K)

LIVE、TID2013、CSIQ、LIVEC、KonIQ-10K 数据集介绍

qq_37925923的博客 1万+

Pico Neo3 通过unity实现手柄摇杆控制主角平移移动

Pico Neo3 通过unity实现手柄摇杆控制主角平移移动 Pico sdk导入以及环境搭建等前期步骤这里不进行叙述 一、功能说明 当前功能是使用pico的手柄摇杆滑动实现摇杆控制主角进行移动,是平移,不是射线传送瞬移,不过我个人认为这种方式在VR头显里面太晕了。 二、功能实现 1、前期准备 unity版本为2019.4.19,picosdk版本为PicoVR Unity SDK v2.8.11,unity编辑器和picosdk的获取比较简单,可以直接去官网下载即可 2、添加预制体和组件接入pico 在

小小魔头的BLOG 1万+

Drools vs URule:5个真实项目场景告诉你如何选择开源规则引擎

本文通过电商风控、物流计费、会员体系、保险定价和物联网告警五个真实项目场景,深度对比了Drools与URule两款开源规则引擎。分析了两者在规则复杂度、性能表现、开发运维及适用场景上的核心差异,为技术选型提供基于实战的决策指南。

k6l7m8n9的博客 943

Qt Creator 启动慢、卡顿、无响应 终极解决教程

<think>我们需根据内容生成≤150字的摘要。摘要要涵盖问题、原因、解决方案和效果。注意字数限制。</think>Qt Creator启动慢、卡顿、无响应,主因是配置文件QtCreator.ini膨胀至数十MB(正常<100KB)。删除%APPDATA%\QtProject下的膨胀配置、崩溃备份及qtcreator.db即可,启动从几十秒降至几秒,内存占用恢复正常。辅助优化:关闭有道词典取词、禁用无用插件、调整clangd设置。定期检查配置文件大小,避免多版本共用配置。

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 69

Unity之Pico手柄按键(G2控制器按键)

主要针对Pico的G2手柄 官方文档:https://sdk.picovr.com/docs/sdk/cn/chapter_five.html#pico-goblin-g2-g2-4k-vr-glasses 下面写一些常用的按键(基本都是写在Update中): 1、圆盘相关: 圆盘中心位置 1>Pvr_UnitySDKAPI.Controller.UPvr_GetKey(0,Pvr_KeyCode.TOUCHPAD)//圆盘按下(按下状态会持续触发) 2>Pvr_UnitySDKAP

团团小团团的博客 1万+

Android SystemUI——初始化流程(三)

1、Android 系统在启动之后,首先会Zygote进程,Zygote进程又会进一步启动 SystemServer进程,它会启动各种系统所需要的服务,在监听AMS启动完毕之后,还会启动SystemUIService。2、在启动SystemUIService服务之前,系统首先会创建SystemUI对应的进程,获取SystemUIAppComponentFactory实例对象,调用instantiateApplicationCompat创建SystemUIApplication实例对象并设置回调方法。

小旭的专栏 1157

七、pico+unity3d移动和转向

在 XR Interaction Toolkit 中,有一个 Locomotion System、添加后悔有自带的三个脚本,其中Snap Turn Provider就是瞬间转向、

王兆镇的博客 1043

scp 出现Permission denied错误 解决方法

第一种说辞(来源于网络),说是scp涉及root远程登录,默认是没有打开的,只需要把配置文件中的permit打开即可。最后scp的时候发现还不行,只需要将其scp的服务器用户名 修改为root即可。第二种解决方案,将scp 传输的服务器用户名改为root即可。(这是最基本的,一开始我忽视了这个问题,导致一直scp不了)window系统下,向ubuntu操作系统 scp传输文件。

码农研究僧的博客 6727

开源大语言模型GLM-5:从架构解析到部署微调全指南

大语言模型(LLM)作为当前人工智能领域的核心技术,通过海量数据预训练获得强大的语言理解和生成能力。其核心原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系,在通用语言任务上展现出卓越性能。这一技术价值在于为开发者提供了强大的基座模型,能够通过微调快速适配特定领域需求,显著降低AI应用开发门槛。在实际应用场景中,大模型被广泛用于智能对话、代码生成、内容创作等任务。本文以开源项目GLM-5为例,深入探讨其架构特点,并详细介绍了如何使用LoRA技术进行参数高效微调,以及通过量化优化实现模型在

weixin_28683165的博客 350

【Android游戏开发二十四】360°平滑游戏摇杆(触屏方向导航)

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/android-game/384.html      此章节为正在创作的游戏开发书籍中的一部分,由于写书的缘故很久没有更新了,挺对不起大家的;那么今天放出书中的一部分,让大家先睹为快吧;    在Android系统的手机,有的根本没有实...

weixin_34148456的博客 205

华为Ascend C算子开发能力认证(中级)(个人记录,有完整代码,已通过认证,仅供参考)

本文介绍了在昇腾NPU环境下实现Sigmoid算子的完整流程。首先需要在华为云ModelArts-Notebook或开发者套件上搭建环境,要求CANN版本为8.0.0.beta1。主要内容包括:1)实现SigmoidCustom算子的kernel侧核函数代码;2)完成host侧Tiling结构体实现;3)支持Float16数据类型。代码实现部分详细展示了核函数计算流程、数据拷贝和牛顿迭代优化方法。最后介绍了编译部署流程,包括环境配置、代码上传、编译执行等步骤,并提供了提交规范说明。该实现通过调用Ascend

qq_73044452的博客 1107

只需要通过蓝牙让安卓手机成为PC游戏方向盘手柄-支持《旋转轮胎》

前面的博客《使用BluetoothHidDevice将安卓手机同时模拟成鼠标和键盘》介绍了通过蓝牙将Android设备模拟成鼠标/键盘,但总归是个副产品,因为我一开始的想法是将Android机模拟成游戏手柄或方向盘,最后阴差阳错地实现了键鼠功能。经过一段时间的学习和研究后才实现了游戏方向盘的功能,所以才有了本文。先来一张图片看看,设备在《旋转轮胎》(又叫Spin Tires)的控制菜单中的效果。 如果我们的设备成功被Win10识别为游戏控制器的话,在游戏的控制设置页面就会看到我们自己的设备。那么在游戏控制

hurst2011的博客 1万+

C#开发的OpenRA游戏之网络接收后找到游戏对象

而这个队列是在创建这个游戏对象时组件,因为一个游戏对象有很多特性,当发现创建游戏对象时有IResolveOrder继承接口的对象,就添加到这个数组。在这里先检查一下命令是否有效的,接着就调用命令的执行对象,即是游戏对象来执行这个命令了。order.Subject就是上面解释游戏对象ID,并从游戏世界里找到的游戏对象,再从各个字段里找到对应的信息,再把这个动作交给游戏世界里的对象执行。从前面分析可知,要找到游戏世界里的对象,就需要游戏对象的ID,因此, 我们来分析游戏对象的ResolveOrder函数。

大坡3D软件开发 1034

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Pico neo3 快捷键汇总

Pico neo3快捷键汇总 头盔 电源键 短按 灭屏(休眠)/亮屏(唤醒) 长按 开机/关机 Home键 短按 进入Launcher界面 长按 头盔校准 组合键 Home键 + 确认键 + 音量键- = 两个手柄均解绑(进入头控模式) Home键 + 确认件 + 返回键 = 进入2D设置模式 手柄 Home键 短按 进入Launcher界面 长按1s 头盔校准 长按8s 手柄关机 组合键 Trigger键 + Home键 长按4s

Q540670228的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Unity功能篇:PICO按键事件绑定

/定义手柄按键。

qq_60586261的博客 3004

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Pico Neo 2✨二、手柄事件管理

手柄事件管理

星河造梦坊 7270

Pico Neo3 VR Pro 开发新手入门有感(避坑与心得,新手学习必备,瞬移射线传送,移动,射线传送光圈效果,传送指定区域)

Pico Neo3 Pro VR开发教程,射线传送,移动,转向,瞬移。 参考了各路大神以及官方SDK文档

mordan97的博客 6070

Unity Pico开发之键盘输入

在Pico的开发过程中,发现了一个严重的问题,Pico没有办法像手机那样调取键盘输入,如果想要调取,需要Pico那面的技术支持,非常的麻烦,所以就自己做了一个输入键盘,唯一的缺点就是不能进行中文输入,只能输入英文和数字。有需要的小伙伴可以借鉴一下,如果有更好的方法,欢迎指导,大家共同学习。工程文件会在文章末尾分想给大家 效果如下: 下面来分享一下实现过程: Pico开发最好不要用UI(Canva...

6315
上一篇: Unity 使用Loom插件实现主线程与C#线程之间的切换
下一篇: Unity 摄像机实现镜面显示效果
爱尚游Bin
博客等级 码龄9年 86粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值