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.hqwc.cn/news/535562.html

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

相关文章

「建议收藏」常用adb操作命令详解

1、查看当前运行的所有设备 adb devices 返回当前设备列表 这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 2、安装软件 adb install 验证是否成功。需要到设备的 data/app路径下查看是否有该包名 这个命令将指定的apk文件安装到设备上 …

Android Studio入门级教程(详细)【小白必看】[通俗易懂]

Android Studio如何使用 本文主要讲解一下Android Studio使用方法 步骤: 1.建立项目 首先点击new——new project新建项目 选择想要创建的Android 的模板,建议选择empty activity(空模板),然后next Name&#xff1…

TCP:三次握手四次挥手及相关问题:

连接—三次握手: 流程图: 过程详解: 客户端(connect)连接服务器(listen) Client将标志位SYN置为1,随机产生一个值seqx, 并将该数据包发送给Server, Client进入SYN_ SENT状态,等待Server确认。Server收到数据包后由标…

程序员来看,你选哪一门编程语言提升自己?

通过多个调查表的分析,发现大家对于GO语言的兴趣和需求非常高。GO语言是一种由Google开发的静态类型、编译型语言,最初于2007年问世。这门语言的设计者是Robert Griesemer、Rob Pike和Ken Thompson,他们的初衷是为了弥补C和Java在大规模软件工…

武汉儿童医院变电所电力运维平台系统的设计及应用

彭姝麟 Acrelpsl 1 引言 2015年国务院发布《中共中央、国务院关于进一步深化电力体制改革的若干意见》(中发[2015]9号),简称“电改9号文”。而本次新电改的重点是“三放开一独立三强化”:输配以外的经营性电价放开、售电业务放开…

勾八头歌之数据科学导论—数据预处理

第1关:引言-根深之树不怯风折,泉深之水不会涸竭 第2关:数据清理-查漏补缺 import numpy as np import pandas as pd import matplotlib.pyplot as pltdef student():# Load the CSV file and replace #NAME? with NaNtrain pd.read_csv(Tas…

Ribbon简单使用

Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端实现负载均衡算法。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,Ribbon是一个客户端负载均衡器,我们可以在配置文件中Load Balancer后…

唤醒世界童心的中国玩具,如何在产业转型中乘风破浪?

作为“世界玩具工厂”,中国拥有多个成熟的玩具产业带,包括:占全国玩具产量25%的澄海积木玩具产业带;产销量占全国80%的雄安新区毛绒玩具产业带;占全国教玩具市场份额63%、国际教玩具市场份额30%的温州永嘉桥下镇教玩具…

H5自适应程序员个人主页源码

H5自适应程序员个人主页源码 源码名称:自适应程序员个人主页源码 源码介绍:一款自适应程序员个人主页源码,带有4个页面,分别对应首页、个人技能页、我的朋友页【也可改为的我站点】、联系我页面。 需求环境:H5 下载地址&#x…

(C语言)strlen函数模拟实现(三种方法)

目录 1. strlrn函数 2. 注意事项&#xff1a; 3. 计数器法 4. 指针减指针方法&#xff1a; 5. 递归方法&#xff1a; 1. strlrn函数 头文件<string.h> 实现函数模拟须知&#xff1a; • 字符串以 \0 作为结束标志 &#xff0c;strlen函数返回的是在字符串中 \0 …

每日一题 第一期 洛谷 铺地毯

[NOIP2011 提高组] 铺地毯 https://www.luogu.com.cn/problem/P1003 题目描述 为了准备一个独特的颁奖典礼&#xff0c;组织者在会场的一片矩形区域&#xff08;可看做是平面直角坐标系的第一象限&#xff09;铺上一些矩形地毯。一共有 n n n 张地毯&#xff0c;编号从 1 …

这么可爱的小坤,那个电子爱好者能顶得住呀?

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、鸡你太美简介二、程序实现效果图三、如何实现总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 仅供娱乐、仅供娱乐、仅供娱乐&…