pico+unity3d手部动画

在这里插入图片描述
在 Unity 开发中,输入系统的选择和运用对于实现丰富的交互体验至关重要。本文将深入探讨 Unity 中的 Input System 和 XR Input Subsystem 这两种不同的输入系统,并详细介绍它们在控制手部动画方面的应用。

一、Input System 和 XR Input Subsystem 的区别

Input System 是 Unity 提供的一套功能强大且扩展性高的输入检测系统,适用于键盘、手柄、鼠标、摇杆等多种设备。它将输入设备与动作逻辑分离,通过配置映射来处理输入信息。我们能够在其中定义动作,使一个动作对应多个输入操作,或者将动作与多个设备输入操作进行绑定。
XR Input Subsystem 则是 UnityXR SDK 中的重要部分,主要用于获取按钮、摇杆和设备跟踪信息。它作为用户控制数据输入到 Unity 引擎的核心子系统,会将输入信息传递给 InputDevices 和 InputSystem。

二、使用 Input System 控制手部动画

创建新脚本 Animator Hand Controller


以下是为您注释的上述代码:```csharp
using System.Collections;  // 引入 System.Collections 命名空间,提供了一些通用的集合类型
using System.Collections.Generic;  // 引入 System.Collections.Generic 命名空间,提供了一些泛型集合类型
using UnityEngine;  // 引入 Unity 引擎的基本功能和类
using UnityEngine.InputSystem;  // 引入 Unity 的输入系统相关的类和功能/*** AnimateHandController 类,用于控制手部动画*/
public class AnimateHandController : MonoBehaviour
{// 公开的输入动作属性 - 捏合动作public InputActionProperty pinchActionProperty;// 公开的输入动作属性 - 握取动作public InputActionProperty gripActionProperty;// 私有变量,存储捏合动作private InputAction pinchAction;// 私有变量,存储握取动作private InputAction gripAction;// 私有变量,存储动画器private Animator animator;// Start 方法,在游戏对象实例化后的第一帧更新之前调用,用于初始化void Start(){//设置后在物体上添加脚本,进行绑定pico的值// 将 pinchActionProperty 中的动作赋值给 pinchActionpinchAction = pinchActionProperty.action;// 将 gripActionProperty 中的动作赋值给 gripActiongripAction = gripActionProperty.action;// 获取当前游戏对象的动画器组件并赋值给 animatoranimator = GetComponent<Animator>();}// Update 方法,每一帧都会被调用,用于实时更新逻辑void Update(){// 读取捏合动作的值并转换为 float 类型float triggerValue = pinchAction.ReadValue<float>();// 设置动画器的 "Trigger" 参数为读取到的捏合值animator.SetFloat("Trigger", triggerValue);// 读取握取动作的值并转换为 float 类型float gripValue = gripAction.ReadValue<float>();// 设置动画器的 "Grip" 参数为读取到的握取值animator.SetFloat("Grip", gripValue);}
}

然后倒入pico中已经定义的值,左右手柄都要绑定
在这里插入图片描述
在这个脚本中,我们首先定义了输入动作属性,然后在 Start 方法中获取对应的输入动作,并获取动画器组件。在 Update 方法中,读取输入动作的值并设置动画器的相应参数,从而实现手部动画的控制。
要使用这个脚本,需要在物体上添加脚本,并进行 Pico 中定义值的绑定。
具体怎么查看、合适的键、双击文件能看到对应的pico映射
在这里插入图片描述

2、 unityXR


using System.Collections;  // 引入 System.Collections 命名空间,用于处理非泛型集合
using System.Collections.Generic;  // 引入 System.Collections.Generic 命名空间,用于处理泛型集合
using UnityEngine;  // 引入 UnityEngine 命名空间,用于访问 Unity 引擎的基本功能和组件
using UnityEngine.XR;  // 引入 UnityEngine.XR 命名空间,用于处理虚拟现实和增强现实相关的功能/*** HandPresence 类,用于处理手部存在和动画相关的操作*/
public class HandPresence : MonoBehaviour
{// 输入设备的类型:头部设备、控制器等;可以多选,手部动作的话,选择左右和控制器public InputDeviceCharacteristics controllerCharacteristics;  // 目标输入设备private InputDevice targetDevice;  // 手部动画器private Animator handAnimator;  // 在游戏开始时执行的初始化方法private void Start(){// 获取当前游戏对象的动画器组件handAnimator = GetComponent<Animator>();  // 尝试初始化输入设备TryInitialize();  }// 尝试初始化输入设备的方法private void TryInitialize(){// 创建一个新的输入设备列表List<InputDevice> devices = new List<InputDevice>();  // 根据指定的特征获取输入设备,并将其添加到列表中InputDevices.GetDevicesWithCharacteristics(controllerCharacteristics, devices);  // 如果找到的设备数量大于 0,则将第一个设备设置为目标设备if (devices.Count > 0){targetDevice = devices[0];}}// 实时更新手部动画的方法private void UpdateHandAnimation(){// 尝试获取trigger按钮的触发值,如果成功则设置动画参数,否则设置为 0if (targetDevice.TryGetFeatureValue(CommonUsages.trigger, out float triggerValue)){handAnimator.SetFloat("Trigger", triggerValue);}else{handAnimator.SetFloat("Trigger", 0);}// 尝试获取grip按键的握取值,如果成功则设置动画参数,否则设置为 0if (targetDevice.TryGetFeatureValue(CommonUsages.grip, out float gripValue)){handAnimator.SetFloat("Grip", gripValue);}else{handAnimator.SetFloat("Grip", 0);}}// 实时每帧更新的方法private void Update(){// 如果目标设备无效,则重新尝试初始化if(!targetDevice.isValid){TryInitialize();}else{// 否则更新手部动画UpdateHandAnimation();}}
}
}

选择输入设备输入设备的类型:头部设备、控制器等;可以多选,手部动作的话,选择左右和控制器
在这里插入图片描述

在这个脚本中,我们首先定义了输入设备的特征,然后在 Start 方法中获取动画器组件并尝试初始化输入设备。通过不断检测设备的有效性,并根据获取到的输入值更新手部动画的参数。
对于不同厂商设备按键与动作输入的映射,您可以参考 Unity 官方文档的不同厂商设备按键与动作输入的映射表 。
综上所述,Input System 和 XR Input Subsystem 为我们在 Unity 中处理输入和实现手部动画控制提供了丰富的选择和可能性,开发者可以根据项目的具体需求灵活运用。

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

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

相关文章

Java性能优化-书写高质量SQL的建议(如何做Mysql优化)

场景 Mysql中varchar类型数字排序不对踩坑记录&#xff1a; Mysql中varchar类型数字排序不对踩坑记录_mysql vachar排序有问题-CSDN博客 为避免开发过程中针对mysql语句的写法再次踩坑&#xff0c;总结开发过程中常用书写高质量sql的一些建议。 注&#xff1a; 博客&#…

Java面试题--JVM大厂篇之深入解析JVM中的Serial GC:工作原理与代际区别

目录 引言&#xff1a; 正文&#xff1a; 一、Serial GC工作原理 年轻代垃圾回收&#xff08;Minor GC&#xff09;&#xff1a; 老年代垃圾回收&#xff08;Major GC或Full GC&#xff09;&#xff1a; 二、年轻代和老年代的区别 年轻代&#xff08;Young Generation&a…

docker快速安装(环境CentOS7)

1. 查看自己的Linux系统 cat /etc/redhat-release 2. 安装依赖插件 yum -y install gcc yum -y install gcc-c yum install -y yum-utils yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast yum -y insta…

MongoDB常用命令大全,概述、备份恢复

文章目录 一、MongoDB简介二、服务启动停止、连接三、数据库相关四、集合操作五、文档操作六、数据备份与恢复/导入导出数据6.1 mongodump备份数据库6.2 mongorestore还原数据库6.3 mongoexport导出表 或 表中部分字段6.4 mongoimport导入表 或 表中部分字段 七、其他常用命令八…

养猪管理如何实现远程监控

在现代化农业快速发展的背景下&#xff0c;养猪管理的智能化与远程监控技术的应用日益成为提升养殖效率、保障动物健康及优化资源配置的关键手段。实现养猪管理的远程监控&#xff0c;不仅能够实时掌握猪场环境参数与生猪生长状况&#xff0c;还能有效预防疾病、提高生产性能&a…

Spring Cloud环境搭建

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;Spring学习之路&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 1. 开发环境安装 1.1 安装JDK ​1.2 安装MySQL 2. 案列介绍 2.1 …

C语言指针超详解——进阶篇

C语言指针系列文章目录 入门篇 强化篇 进阶篇 文章目录 C语言指针系列文章目录1. 字符指针变量2. 数组指针变量2. 1 概念2. 2 数组指针变量的初始化 3. 二维数组传参的本质4. 函数指针变量4. 1 函数指针变量的创建4. 2 指针变量的使用4. 3 两个有趣的代码4. 3. 1 代码一4. 3. …

汽车底盘控制系统Autosar初步接触

最近接触到汽车底盘控制部分&#xff0c;作为小白&#xff0c;原以为汽车底盘也是要自己手敲代码&#xff0c;结果发现完全不是。记录一下最近的学习心得&#xff0c;初步接触东西不全&#xff0c;但可以当作参考。 对于底盘控制部分的简单理解&#xff1a;simulink做汽车底盘的…

大数据技术基础

一、大数据平台 1.大数据平台方案步骤&#xff1a; ①市场上有哪些大数据平台 ②硬件、系统、业务增长等方面 ③方案是否通过 通过后&#xff1a;按照一期目标投入 先虚拟环境部署联系&#xff0c;再实际部署 《大数据架构介绍》《Hadoop架构解析》《Hadoop集群规划》 《H…

PX4 运行 make px4_sitl_default gazebo 报错

报错原因&#xff1a;最开始我把依赖一直都是在base环境下安装的&#xff0c;没有conda deactivate&#xff0c;而pip install的东西应该装在系统环境&#xff0c;不能装在base环境下&#xff0c;sudo apt 是装在系统环境的 1.检查ros 用鱼香ros安装 wget http://fishros.…

南平建网站公司推荐 好用的b2b独立站模板

床品毛巾wordpress独立站模板 床单、被套、毛巾、抱枕、靠垫、围巾、布艺、枕头、乳胶枕、四件套、浴巾wordpress网站模板。 https://www.jianzhanpress.com/?p4065 打印耗材wordpress自建独立站模板 色带、墨盒、碳粉、打印纸、硒鼓、墨盒、墨水、3D打印机、喷头wordpress…

Pr 2024下载安装,Adobe Premiere pro2024剪辑软件下载合集获取

Premiere Pro 2023中文版简称Pr&#xff0c;pr2023是一款视频编辑软件。 pr 2023不仅可以帮助用户对各种视频进行剪辑、旋转、分割、合并、字幕添加、背景音乐等基础的处理&#xff0c;还能帮助用户进行视频颜色校正、颜色分级、稳定镜头、调整层、更改片段的持续时间和速度、效…

Sentinel规则持久化Push模式两种实现方式

文章目录 sentinel持久化push推模式微服务端的实现具体实现源码分析读数据源写数据源的实现 微服务端解析读数据源流程 修改源码的实现官方demo修改源码实现配置类flowauthoritydegreadparamsystemgateway修改源码 测试补充 前置知识 pull模式 sentinel持久化push推模式 pull拉…

Pycharm 导入 conda 环境

使用时经常在此处卡壳&#xff0c;在此做个记录。 这个位置选择 conda 安装路径下的 python.exe 文件即可

自学鸿蒙HarmonyOS的ArkTS语言<十>@BuilderParam装饰器

作用&#xff1a;当子组件多处使用时&#xff0c;给某处的子组件添加特定功能 一、初始化 1、只能被Builder装饰的方法初始化 2、使用所属自定义组件的builder方法初始化 3、使用父组件的builder方法初始化 - 把父组件的builder传过去&#xff0c;参数名和子组件的builderPar…

ESP32部署TensorFlow Lite

本来是想找一篇中文教程&#xff0c;不过只看到一个英文官方的&#xff0c;也行吧&#xff0c;虽然效率会慢丢丢。 GitHub - espressif/esp-tflite-micro: TensorFlow Lite Micro for Espressif Chipsets 看了一圈&#xff0c;有个中文的&#xff1a; esp-dl/README_cn.md a…

TS 入门(七):TypeScript模块与命名空间

目录 前言回顾泛型编程1. 模块a. 导入和导出b. 默认导出c. 重命名导入和导出 2. 命名空间a. 定义命名空间b. 嵌套命名空间 3. 动态导入与条件导入a. 动态导入b. 条件导入 结语 前言 在前几章中&#xff0c;我们学习了 TypeScript 的基础知识、函数与对象类型、接口与类、以及泛…

K8S 上部署 Emqx

文章目录 安装方式一&#xff1a;快速部署安装方式二&#xff1a;定制化部署1. 使用 Pod 直接部署 EMQX Broker2. 使用 Deoloyment 部署 Pod3. 使用 Services 公开 EMQX Broker Pod 服务4. 通过 kubernetes 自动集群 EMQX MQTT 服务器5. 修改 EMQX Broker 的配置 安装方式一&am…

Large Language Model系列之二:Transformers和预训练语言模型

Large Language Model系列之二&#xff1a;Transformers和预训练语言模型 1 Transformer模型 Transformer模型是一种基于自注意力机制的深度学习模型&#xff0c;它最初由Vaswani等人在2017年的论文《Attention Is All You Need》中提出&#xff0c;主要用于机器翻译任务。随…

【ollama】ollama运行GLM4-9B和CodeGeeX4-ALL-9B

一、下载GGUF模型 glm-4-9b-chat-GGUFcodegeex4-all-9b-GGUF 使用modelscope下载 先安装 pip install modelscope 命令1 modelscope download --modelLLM-Research/glm-4-9b-chat-GGUF --local_dir . glm-4-9b-chat.Q5_K.gguf命令2 modelscope download --modelLLM-Researc…