Unity中PICO中手柄按键返回值

文章目录

  • 前言
  • 一、我们看一下每个按键返回值
    • 获取按键返回值的方法
  • 二、我们实现一个左摇杆控制平滑移动的功能
    • 1、创建一个左摇杆控制移动的脚本
    • 2、传入XR Origin对象,并且定义一个公开变量控制移动速度
    • 3、获取到摇杆是否移动,以及移动的偏移量
    • 4、如果摇杆偏移了,使用摇杆偏移值控制XR Origin移动
  • 三、测试代码


前言

在上篇文章中,我们实现了PICO中 隔空取物 和 接触抓取。

  • Unity中PICO实现 隔空取物 和 接触抓取物体

在这篇文章中,我们来实现 手柄C#脚本交互。


一、我们看一下每个按键返回值

  • 手柄&头戴输入映射

在这里插入图片描述

  • 按键Unity XR 键值菜单键CommonUsages.menuButton:
    表示菜单键的激活状态(即是否被按下)。

  • 扳机键CommonUsages.triggerButton:
    表示扳机键的激活状态。

  • CommonUsages.trigger:
    表示扳机键被按下的程度。例如,在射箭类游戏中,可以表示弓箭的拉满程度。

  • 抓握键CommonUsages.gripButton:
    表示抓握键的激活状态。

  • CommonUsages.grip:
    表示抓握键被按下的程度。例如,在射箭类游戏中,可以表示弓箭的拉满程度。

  • 摇杆CommonUsages.primary2DAxisClick:
    表示摇杆是否被按下。

  • CommonUsages.primary2DAxis:
    表示摇杆的上下左右拨动情况。

  • X/ACommonUsages.primaryButton:
    表示 X/A 键的激活状态。

  • Y/BCommonUsages.secondaryButton:
    表示 Y/B 键的激活状态。

获取按键返回值的方法

  • XRNode.LeftHand 可以修改为 右手柄
  • XXX 可以修改为以上的按键类型
  • YYY 为按键返回值

InputDevices.GetDeviceAtXRNode(XRNode.LeftHand).
TryGetFeatureValue(XXX,out YYY);


二、我们实现一个左摇杆控制平滑移动的功能

1、创建一个左摇杆控制移动的脚本

在这里插入图片描述

2、传入XR Origin对象,并且定义一个公开变量控制移动速度

public GameObject xrOrigin;
public float moveSpeed = 0.1f;

3、获取到摇杆是否移动,以及移动的偏移量

bool success = InputDevices.GetDeviceAtXRNode(XRNode.LeftHand).
TryGetFeatureValue(CommonUsages.primary2DAxis, out Vector2 result);

4、如果摇杆偏移了,使用摇杆偏移值控制XR Origin移动

  • 移动时,保证我们 推动摇杆的前方 一直 为我们视角的前方。
  • 所以,使用四元数欧拉角旋转

if (success)
{
Vector3 position = xrOrigin.transform.position;
//使用四元数欧拉角旋转控制移动,让移动的前方一直朝向摄像机的前方
Vector3 direction = new Vector3(result.x, 0, result.y);
float y = Camera.main.transform.rotation.eulerAngles.y;
direction = Quaternion.Euler(0, y, 0) * direction;
xrOrigin.transform.position = position + direction * moveSpeed;
}


三、测试代码

using UnityEngine;
using UnityEngine.XR;
using UnityEngine.XR.Interaction.Toolkit;public class LeftController : MonoBehaviour
{public GameObject xrOrigin;public float moveSpeed = 0.1f;void Update(){MoveFun();}//手柄控制移动void MoveFun(){bool success = InputDevices.GetDeviceAtXRNode(XRNode.LeftHand).TryGetFeatureValue(CommonUsages.primary2DAxis, out Vector2 result);if (success){Vector3 position = xrOrigin.transform.position;//使用四元数欧拉角旋转控制移动,让移动的前方一直朝向摄像机的前方Vector3 direction = new Vector3(result.x, 0, result.y);float y = Camera.main.transform.rotation.eulerAngles.y;direction = Quaternion.Euler(0, y, 0) * direction;xrOrigin.transform.position = position + direction * moveSpeed;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/753268.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

x264 编码器 slices_write 和 slice_write 函数

x264 264是一个开源的视频编码库,用于将视频压缩为H.264/AVC(Advanced Video Coding)格式。它是一种广泛使用的视频编码标准,能够提供高质量的视频压缩和较低的比特率。 x264库提供了一个编码器,可以将原始视频序列转换为H.264/AVC压缩的比特流。它实现了各种H.264编码算法…

Spring Data访问Elasticsearch----Elasticsearch操作

Spring Data访问Elasticsearch----Elasticsearch操作 一、用法示例二、搜索结果类型三、查询3.1 CriteriaQuery3.2 StringQuery3.3 NativeQuery3.4 SearchTemplateQuery Spring Data Elasticsearch使用多个接口来定义可以针对Elasticsearch索引调用的操作(有关响应(…

3月15/18日:复原IP地址子集

93.复原IP地址 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 &q…

Modeling Influence Diffusion over Signed Social Networks

关键词——社会系统、影响力扩散、建模、签名社交网络、影响力最大化 Abstract 在离线或在线世界中,许多社交系统可以表示为签名社交网络,包括积极和消极关系。尽管由于独特极性特征的巨大应用价值,人们对签名社交网络进行了各种研究&#x…

【Docker篇】自定义Dockerfile的操作

文章目录 🍔镜像结构🛸什么是Dockerfile⭐基于Ubuntu镜像构建一个新镜像,运行一个java项目🔎使用 java:8-alpine 🍔镜像结构 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。 我们以MySQL为例&am…

环境安装篇 之 docker安装

云原生学习路线导航页(持续更新中) 本文是 环境安装 系列文章,介绍 docker 的安装详细步骤 # 卸载旧版本docker $ sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \d…

QT网络编程之实现UDP广播发送和接收

推荐一个不错的人工智能学习网站,通俗易懂,内容全面,作为入门科普和学习提升都不错,分享一下给大家:前言https://www.captainbed.cn/ai 一.UDP通信 1.QT中实现UDP通信主要用到了以下类:QUdpSocket、QHost…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:FolderStack)

FolderStack继承于Stack(层叠布局)控件,新增了折叠屏悬停能力,通过识别upperItems自动避让折叠屏折痕区后移到上半屏 说明: 该组件从API Version 11开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件…

深度学习——数据预处理

一、数据预处理 为了能用深度学习来解决现实世界的问题,我们经常从预处理原始数据开始, 而不是从那些准备好的张量格式数据开始。 在Python中常用的数据分析工具中,我们通常使用pandas软件包。 像庞大的Python生态系统中的许多其他扩展包一样…

算法刷题day32

目录 引言一、走迷宫二、八数码三、走迷宫四、全球变暖 引言 本篇文章是讲 B F S BFS BFS 的,我发现好像蓝桥杯都很爱考陆地海洋的这种问题,这种问题就是即使你的模板背的再熟练,你想不到做法其实还是没啥用,所以多做题很重要&a…

【LeetCode每日一题】310. 最小高度树

文章目录 [310. 最小高度树](https://leetcode.cn/problems/minimum-height-trees/)思路:拓扑排序代码: 310. 最小高度树 思路:拓扑排序 首先判断节点数量n,如果只有一个节点,则直接返回该节点作为最小高度树的根节点…

阿里云ECS服务器u1通用算力型CPU性能、限制使用及收费价格表

阿里云服务器u1是通用算力型云服务器,CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器,通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xff0c…

【解读】Gartner 2023 DevOps平台魔法四象限

2023年6月5日Gartner发布了DevOps平台魔法四象限洞察报告(Magic Quadrant for DevOps Platforms DevOps),Gartner指出,DevOps平台正在成为DevOps工具链的一种更简单的替代品,为组织提供一套整合的集成能力。软件工程领…

Python:文件的操作

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) Python的os库主要用于与操作系统进行交互,它提供了多种功能,使得在Python程序中处理操作系统级任务变得容易。这里是一些…

Linux文件系统中常见文件夹的作用

在Linux文件系统中,各个文件夹有不同的作用和用途。以下是一些常见的文件夹及其功能: /:根目录,整个文件系统的起始点。/bin:二进制可执行文件的存放目录,包含许多基本的系统工具和命令,如ls、…

05 龙芯平台openstack部署搭建-placement部署

一、创建placement相关数据库、凭据与API端点 1.创建placement数据库并授权 mysql -uroot -ploongson -e “CREATE DATABASE placement;” mysql -uroot -ploongson -e “GRANT ALL PRIVILEGES ON placement.* TO ‘placement’‘localhost’ IDENTIFIED BY ‘loongson’;” …

【Linux】Ubuntu使用Netplan配置静态/动态IP

1、说明 Ubuntu 18.04开始,Ubuntu和Debian移除了以前的ifup/ifdown命令和/etc/network/interfaces配置文件,转而使用ip link set或者/etc/netplan/01-netcfg.yaml模板和sudo netplan apply命令实现网络管理。 Netplan 是抽象网络配置描述器,用于配置Linux网络。 通过netpla…

2024全新快递平台系统独立版小程序源码|带cps推广营销流量主+前端

2024全新快递平台系统独立版小程序源码|带cps推广营销流量主前端程序源码 程序介绍 快递代发快递代寄寄件小程序可以对接易达云洋一级总代 快递小程序,接入云洋/易达物流接口,支持选择快递公司,三通一达,极兔,德邦等&…

适口性猫粮哪个牌子肉源好性价比高?主食冻干性价比排行前十分享

随着科学养猫知识的普及,主食冻干喂养越来越受到养猫人的青睐。主食冻干不仅符合猫咪的饮食天性,还能提供均衡的营养,有助于维护猫咪的口腔和消化系统健康。然而,许多猫主人在选择主食冻干产品时感到迷茫。本文将深入探讨如何为猫…

蓝桥杯刷题 Day36 倒计时26天 纯练题的一天

[蓝桥杯 2022 省 B] 积木画 题目描述 小明最近迷上了积木画,有这么两种类型的积木,分别为 I 型(大小为 2个单位面积) 和 L 型 (大小为 3 个单位面积): 同时,小明有一块面积大小为2N 的画布,画布由2N 个 11 区域构成。…