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,一经查实,立即删除!

相关文章

Modeling Influence Diffusion over Signed Social Networks

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

【Docker篇】自定义Dockerfile的操作

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

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生态系统中的许多其他扩展包一样…

【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】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 区域构成。…

一些很实用的技巧提高自动化测试覆盖率

自动化测试一直是测试人员的核心技能,也是测试的重要手段之一。尤其是在今年所谓的互联网寒冬的行情下,各大企业对测试人员的技术水平要求的很高,而测试人员的技术水平主要集中在三大自动化测试领域,再加测试辅助脚本的编写&#…

大模型知识积累——幻觉

什么是大模型幻觉 在大语言模型的文本生成场景下,幻觉是指一本正经的胡说八道。逻辑连贯的自然表述中,有理论或者事实错误,捏造事实等问题。 幻觉问题的危害 LLM幻觉可能产生传播错误知识的后果。对于医疗应用中结果安全和可信AI尤为重要&a…

气液分离器的概念和原理

气液分离器也叫低压储液器,在热泵或制冷系统中使用,主要是将出蒸发器、进压缩机气流中的液滴分离出来,防止压缩机发生液击,用于工质充注量较大、压缩机进气可能带液且压缩机对湿压缩较敏感的情况 。 液击主要出现在活塞式压缩机中…

PMP能两周快速通过吗?

两周时间有点赶,一般备考要2个月左右,有时间尽量多准备准备。 分享一篇左羊学霸的备考总结,希望能帮你 前言 作为⼀名通过PMP项⽬管理认证并且拿到3A成绩 ( PMP认证最好成绩) 的 学习者, 来跟⼤家分享下我考取PMP证书的动机与过程…

学会Python爬虫只需9步

爬虫是一种技术实现的功能,大部分编程语言都可以实现爬虫,但是对于初学者来说,想要快速学习爬虫技术,建议大家学习Python爬虫。Python编程语言相对于Java要更简单入门更容易,同时相对PHP使用范围更广泛,有利…

用户需求助力产品创新 4大注意事项

通过用户需求进行产品创新,是项目应遵循的原则,也是项目成功的关键因素之一。通过深入理解用户需求,有助于明确产品功能和定位,使得产品更符合用户期望。有助于树立正确的创新方向,推动企业的发展。如果不了解用户需求…

软件工程-第2章 软件过程

开发逻辑,是正确获取软件的关键。 2.1 软件生存周期过程 编程之前的工作。软件生存周期是软件产品或系统的一系列相关活动的全周期。95年发布国际标准,“ISO/IEC软件生存周期过程12207-1995”,给出了软件开发需要的任务,即回答了…