Unity Meta Quest 一体机开发(八):实现 Hand Grab 扔物体功能

文章目录

  • 📕教程说明
  • 📕设置刚体和碰撞体
  • 📕给物体添加 Physics Grabbable 脚本
  • 📕给手部添加 Hand Velocity Calculator 物体

此教程相关的详细教案,文档,思维导图和工程文件会放入 Seed XR 社区。这是一个高质量知识星球 XR 社区,博主目前在内担任 XR 开发的讲师。此外,该社区提供教程答疑、及时交流、进阶教程、外包、行业动态等服务。

知识星球链接:Seed XR 高级社区

在这里插入图片描述


📕教程说明

这篇教程将会介绍如何在能够抓取物体的基础上实现扔物体的物理效果。

配置一个基本的玩家物体可以参考前几期教程:https://blog.csdn.net/qq_46044366/article/details/134097455

实现抓取物体的效果可以参考上一篇教程:https://blog.csdn.net/qq_46044366/article/details/134488224
这篇教程将基于上一篇教程的配置来讲解,因为实现扔物体的前提是实现物体的抓取

系列教程专栏:https://blog.csdn.net/qq_46044366/category_12118293.html

配套的视频链接:
https://www.bilibili.com/video/BV12j411L7YQ

​电脑操作系统:Windows 11

使用的 VR 设备:Meta Quest 3(Quest 系列都适用)

使用的 Unity 版本:2021.3.5 LTS (这里推荐使用 2021 及以上的 LTS 版本)

Meta XR SDK 版本:v57

官方文档:https://developer.oculus.com/documentation/unity/unity-gs-overview/

实现扔物体的效果:
https://developer.oculus.com/documentation/unity/unity-isdk-throw-object/

Interaction SDK 物理组件:https://developer.oculus.com/documentation/unity/unity-isdk-using-with-physics/

最终效果:

在这里插入图片描述


📕设置刚体和碰撞体

要想实现扔物体的物理效果,可抓取物体就需要拥有重力效果,并且能和其他物体发生碰撞。我们需要取消勾选碰撞体组件上的 Is Trigger,并且勾选刚体组件上的 Use Gravity

在这里插入图片描述

📕给物体添加 Physics Grabbable 脚本

在可抓取物体的身上添加 Physics Grabbable 脚本

在这里插入图片描述

这个脚本会自动引用物体身上的 Rigidbody 和 Grabbable 脚本。如果 Rigidbody 和 Grabbable 在添加 Physics Grabbable 脚本之后被添加,需要手动引用。

然后找到物体的 HandGrabInteractable 子物体,找到 HandGrabInteractable 脚本,将物体身上的 Physics Grabbable 脚本拖到 Optionals 下的 Physics Grabbable 变量上

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Physics Grabbable 脚本能够保证物体在被抓取和释放的时候不会出现奇怪的物理效果。物体被抓取时,Physics Grabbable 会将刚体的 Is Kinematic 设为 true。

Unity 的物理系统有这么几个特性:

  • 两个物体产生碰撞的条件是:两个物体都有碰撞体,至少有个物体有刚体。
  • 物体加了刚体会受到力的效果。

is Kinematic 设为 true 的物体不会对其他刚体的碰撞和力做出反应,但依然会对其他刚体产生物理影响,比如可以撞击其他刚体,或者其他刚体撞击自己,其他刚体会被弹开。也就是我撞别人,能撞动别人;别人撞我,我没反应,别人可能会被弹开。

然后抓取的物体被释放后,Is Kinematic 会恢复成 false。然后会给物体施加一个力,让物体掉落时的物理效果看起来正常一点。如果没有添加 Physics Grabbable 脚本,在释放物体后物体会非常快速地落下。但是添加了Physics Grabbable 脚本后,物体就会以正常的重力效果掉落。

📕给手部添加 Hand Velocity Calculator 物体

在 Project 窗口的搜索栏搜索 Hand Velocity Calculator,将 Hand Velocity Calculator 这个 Prefab 拖到玩家物体的 LeftHand 下:

在这里插入图片描述
在这里插入图片描述

点击 Hand Velocity Calculator 物体,找到它的 Hand Pose Input Device 脚本,将 LeftHand 拖到 Hand 变量上

在这里插入图片描述

然后找到左手的 HandInteractorsLeft 下的 HandGrabInteractor,将左手的 Hand Velocity Calculator 物体拖到 HandGrabInteractor 脚本的 Veclocity Calculator 变量上

在这里插入图片描述
在这里插入图片描述

右手也是同样的道理。

在这里插入图片描述

当我们配置好了物体和手部后,就能实现 Hand Grab 扔物体的效果。

而 Hand Velocity Calculator 上的 StandardVelocityCalculator 脚本就能模拟物体扔出去后的速度。

在这里插入图片描述

最终效果:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二叉树前序、中序以及后序遍历(递归展开图)

目录 1.二叉树前置说明 2.前序遍历 2.1函数实现 2.2递归展开图 3.中序遍历 3.1函数实现 3.2递归展开图 4.后序遍历 4.1函数实现 4.2递归展开图 1.二叉树前置说明 在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作…

如何通过信息化为燃气管道提供数据监控、智能的调度和作业技术?

关键词:智慧燃气、燃气监控、智慧管网、智慧燃气管网、智慧燃气管网解决方案、城市燃气管网 在信息化迅猛发展的历史潮流中,如何通过信息化为燃气管道提供更广泛的数据监控、更紧密的数据集成、更智能的调度和作业、更智慧的分析和决策,为安…

干法制程中的辉光放电

在芯片制程中,几乎所有的干法制程,如PVD,CVD,干法刻蚀等,都逃不过辉光放电现象。辉光放电,是一种在低压下电离气体的过程,它在半导体制程中的许多重要步骤中有着核心作用。那您知道什么是“启辉”吗&#x…

UE4/UE5 c++绘制编辑器场景直方图(源码包含场景中的像素获取、菜单添加ToolBar)

UE4/UE5 c场景直方图 UE4/UE5 C绘制编辑器场景直方图绘制原理:元素绘制坐标轴绘制 源码处理 UE4/UE5 C绘制编辑器场景直方图 注:源码包含场景中的像素获取、菜单添加ToolBar 实现效果: 这个是用于美术统计场景中像素元素分布,类…

【100个Cocos实例】编码不规范,接手泪两行...

点击上方亿元程序员关注和★星标。 引言 规范编码,从文件头部注释规范做起。 头部注释规范是一种在代码文件开头添加注释信息的做法,通常用于描述文件的基本信息、作者、创建日期、修改历史等。 这有助于团队成员更好地理解和维护代码。 本文将介绍一…

JVM执行引擎

目录 (一)执行引擎概述 (二)Java代码编译和执行过程 (三)机器码,指令,汇编语言,字节码 1、机器码 2、指令 3、指令集 4、汇编 5、字节码 (四&#x…

一、Oceanbase基础

一、集群相关概念 集群:整个分布式数据库。Region:表示区域,是地域的逻辑概念,如1个城市,1个集群可以有多个Region,用于跨城市远 距离容灾。Zone:表示分区,是机房或机架的逻辑概念…

深度学习【二】

1.运行时错误 1.1 ModuleNotFoundError: No module named ‘torch_scatter’ 参考 https://blog.csdn.net/weixin_42421914/article/details/132875571 pip install --no-index torch-scatter -f https://pytorch-geometric.com/whl/torch-1.13.1%2Bcpu.html

某思路等考通一级MSOffice的分析

看到有朋友寻求2021版的等级考试一级软件,秉承授人以鱼不如授人以渔的理念,特写这个帖子。 某思路等考通一级MSOffice,版本6.5。 用到的软件,ScanId,de4dot,dnSpy。 第一步:分析 软件启动后有在线激活提示&…

华为云CDN刷新与查询余量的Go实现及在Jenkins中的部署

引言 在华为云上,对CDN缓存内容进行刷新是一个常见的需求,以确保最新的内容能尽快被用户访问到。通过使用Go语言,我们可以开发一个自动化的工具来实现这一需求,并将其集成到Jenkins中以实现持续部署。下面我们将分步骤讲解如何实…

MySQL递归查询:洞悉数据的层层关联

在处理关系型数据库时,我们经常会遇到这样的情况:某些数据之间存在层级关系,例如目录、组织结构、评论等。在这些场景下,我们需要一种灵活的查询技术来处理这种层级关系。今天我们就来探讨MySQL中的递归查询,体验其独特…

ThinkPHP6学生选课管理系统

有需要请加文章底部Q哦 可远程调试 ThinkPHP6学生选课管理系统 一 介绍 此学生选课管理系统基于ThinkPHP6框架开发,数据库mysql8,前端bootstrap。系统角色分为学生,教师和管理员。学生登录后可进行选课,教师登录后可查看选课情况…

Android : 获取、添加、手机联系人-ContentResolver简单应用

示例图: MainActivity.java package com.example.mygetdata;import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat;import android.Mani…

图书管理系统源码,图书管理系统开发,图书借阅系统源码四TuShuManager应用程序MVC视图View

Asp.net web应用程序MVC之View视图 .ASP.NET MVC页面也就是要说的视图基本被放在Views文件夹下; 2.利用APS.NET MVC模板生成框架,Views文件夹下的默认页面为.cshtml页面; 3.ASP.NET MVC默认页面为Razor格式的页面,因此默认页面为.…

三、Lua变量

文章目录 一、变量分类二、变量赋值三、索引 一、变量分类 lua变量分为全局变量,局部变量。 全局变量:默认,全局有效。 局部变量:从作用范围开始到作用范围结束,需加local 修饰。 a1function ff()local b1 endprint(a…

spring boot的redis连接数过多导致redis服务器压力过大的一次问题排查

一、背景 在今天上午的时候,突然收到大量的sentry报错,都是关于redis连接超时的警告。 首先想到的是去查看redis的监控,发现那个时间段,redis的请求数剧增,cpu使用率和带宽都陡增双倍。 下面的是redis监控的cpu情况 …

Module build failed: Error: ENOENT: no such file or directory

前言 这个错误通常发生在Node.js 和 vue,js项目中,当你试图访问一个不存在的文件或目录时。在大多数情况下,这是因为你的代码试图打开一个不存在的文件,或者你的构建系统(例如Webpack)需要一个配置文件,但找…

程序员为什么要一直坚持写博客

shigen日更文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 今天的文章其实说和技术有关系也没有什么问题,算起来我日更文章已经快四个月了,从最初的…

四、Lua循环

文章目录 一、while(循环条件)二、for(一)数值for(二)泛型for(三)repeat util 既然同为编程语言,那么控制逻辑里的循环就不能缺少,它可以帮助我们实现有规律的重复操作,而…

洗地机应该怎么选?希亦、必胜、米博、添可、小米洗地机实测推荐

作为一个常年测评智能家居的博主,关于洗地机的测评使用这些年也积累了不少的体验感受。以至于常被周边的朋友问到,洗地机到底是不是真的好用?洗地机有什么优点吗?选购的时候应该怎么选呢?洗地机什么牌子比较好呢&#…