嗨嗨嗨
知识点捏
这个部分其实很杂哼乱,没有一个系统的教学。我们以目前可公开的信息来统合我们的知识点
目前可公开的信息
- Quest3 开发使用的是Mate已经研究出的一份较为完善的架构,可以在unity的资源商店里面找到all in one SDK ,它提供了很多的工具包,实际上就是各种各样的预制体,脚本,组件,工具,可以帮助我们快速的进行开发。
- Quest3 使用的是一个魔改版的安卓系统,我们目前的开发调试的实现方式主要以串流到小型利姆露上进行unity的调试
- 由于我们找到的教程是比较散的,因为这个up主是买课的,所以原理等方面好像没怎么涉及,提供的都是功能实现的操作,怎么说呢,有好有坏吧
- 在Quest3 中交互主要是通过控制器以及手势追踪来实现的,它的交互系统主要分为两大板块,一个是交互物体interactor,另一个是可交互物体interactable。
- 我们interactor研究的主要是手,手部的交互以grab,push等为主,这些交互行为都有四个状态disable normal hover select 禁用了的就是disable,正常情况下就是normal,手部检测器与可交互物体相交进入hover状态,表示已准备交互,之后进行操作了进入select状态执行操作。
- 左右synthetic手,可以限制手部模型的动作从而避免手部模型的穿模。
- 手部追踪,实现这个功能我们需要知到一些必须的组件,物体脚本。
ovrcameraRig:这个预制体,其实就是我们的玩家拥有追踪到的数据但是无法产生交互,这就需要我们往上面添加一些东西,
ovrinteraction,预制体,将其作为ovrcamerarig的子物体,它将作为父物体控制所有的负责交互的物体。
ovrhanderprefab 预制体是虚拟手部的模型,把它放在handanchor作为其子物体(这玩意有左右之分),并且将他上面的脚本勾选启用物理胶囊,把上面的左右手选择选项选择正确。
overhands 预制体,放在ovrinteraction下作为子物体来处理手部的交互。
此时现在开始运行,可以出现虚拟的手部模型,并且可以同步手势追踪
进行改进我们可以在ovrhands的中加入左右synthetic手,这个手上有个空需要填入ovrhands中的左右手,因为我们又加了一双synthetic手,这个玩意也是有它对应的模型的,从而产生重复渲染的手部叠加,所以我们把ovrhands中的左右手的handvisual手禁用掉 - 手势追踪常用抓取操作,一般有hand grab 就是手的夹捏等操作,touch hand grab 是在物体的碰撞体上抓,就像粘在手上一样的抓取,一种就是distance hand grab 通过射线进行远程抓取
- handgrabinteractor 这个是负责抓取交互的物体,他下面有很多子物体,其中api就是api,那个wrist控制虚拟手部于游戏中的偏移位置。下面的rd中可以有grippoint,他是控制手的抓取动作的碰撞器检测范围,它的子物体就是那个碰撞器,处于碰撞器中出于hover状态,之后抓就可以把物体抓到手上。可以有pinchgrab,它是指手指的捏合操作,可以捏着操作物体,也可以控制其的触发器偏移。下面那个没啥用,后面的visual中有两个子物体,第一个是用来与synthetic连接从而限制手部姿势的,第二个用来控制交互的时的一些特效,比如说hover时手是什么颜色。
- interactable 这是可交互物体的代称,我们可以自己制作可交互物体,新建一个mesh,加上碰撞体以及刚体,碰撞体勾上触发器的选项。
- handgrabinteractable 预制体,把它加到可交互物体上作为子物体,它上面有脚本,可以自动读取父物体的碰撞体以及刚体信息,他下面有支持的抓取方式的选项,有grib握取,pitch夹取,等,下面还有选项可以选择出发动作需要怎样的手,比如大拇指必须,食指必须,中指随便,小拇指忽视,这样的,最后有一个选择release,它的含义是只要有一个require的手指松开后,那么就停止交互动作,all release是所有require以及option的手指松开后才停止交互动作。下面的选项可以选择交互动作是物体到手上还是手到物体上,等选择。下面的一个表是用来应对不同大小的手产生不同的抓取姿势的。在运行后,这个物体上会生成一个脚本move towords target provider,该脚本来控制物体到手的速度,speed越大越慢。这个也可以手动添加,添加之后要把该脚本赋予给上面的脚本中的movement provide 栏中,当然还有不同的移动脚本,比如说把这边的towords改成from,就是手到物体。follow target provider 让物体到手的时候有一个阻尼衰减的效果,值越小效果越明显。
- 之前介绍了手势追踪,接下来我们介绍手部的交互之一,抓取
handgrabinteractor 预制体,把它放入ovrhands中的左右手anchors下面作为子物体,注意由于是我们自主添加的交互,有些组件需要我们自己去添加,在handgrabinteractor中有visual,这个我们介绍过,他下面的两个子物体一个需要对应的synthetic手。另一个需要对应的synthetic手上面的的子物体,handvisual,以及其子物体的最后一个,把他们拖入即可。接下来找到左右手的handinteractor,上面有列表,把我们最先的handgrabinteractor拖入其中,这个列表表明产生互动的物件以及他们的优先级,从上到下优先级一次减少,到此即可 - 接下来介绍抓取的可交互物体(interactable)的设置,这个部分还是挺简单的,要交互的物体,添加碰撞体以及刚体,再加上一个grabbable脚本,加入一个interactable作为子物体即可。
这里要注意的是,我们在运行的时候grabbable脚本下会自动添加一个脚本,one grab free transformer ,这个是决定了交互能使被交互物体产生怎样的变化,这个脚本是free 且是one 也就是说控制被交互物体的位置以及旋转变化,当然有但控制旋转与位置变化的脚本。two,也就是用两只手控制的脚本要求使用需要把grabbable上面的左右交替控制的选项取消勾选才能够使用,two新增了控制缩放的功能。也可以既单手操作又双手操作,只需注意自己添加的脚本要把其拖入grabbable中。
可交互物体其实也是可以根据交互的过程产生特殊的效果,就比如说hover为绿色,选择为蓝色等,那么首先在这个可交互物体上添加一个空的子物体,命名为visual,之后在该空物体上增加脚本interactable color visual ,这个脚本需要一个editor脚本,一个view脚本,那么我们就手动创建,首先是editor脚本material properity block editor,这个脚本的render列中我们需要把可交互物体的mesh网格拖进去,之后是view脚本interactable group view, 这个的interactables栏把对应的interactable预制体拖进去,之后把这两个脚本拖到最上面的那个脚本里面,那个脚本的选项展开后可以设置颜色之类的。随后直接开始运行即可。 - 接下来实现一个物理投掷的效果
首先我们先把可交互物体身上的碰撞体的istigger去掉,然后把刚体的重力打开,但是重力的效果会很呆板,我们需要增加额外的脚本去模拟一个速度效果,
在可交互物体上添加一个physical grabbable,他会自动识别物体的刚体信息,之后在物体的interactable预制体上的脚本中找到physical 栏,把刚刚创建的脚本塞进去。这可以优化重力的效果,但是模拟投掷的速度还需要添加一个叫做 handvelocitycalculate的预制体,把它装载于ovrhands 的左右手上,这个预制体上有个空让塞入对应的手,那就把对应的手塞进去 - 接下来我们来发挥synthetic手的特性,录制特定的抓取手势,一共有两种方法,
一种就是在文件栏中搜索handgrabposetool,在meta提供的专门录制抓取手势的场景里进行录制,第一要你需要录制专区手势所要配对的物体,在上面加上碰撞体以及刚体选项,是触发器的选项也要勾选,之后加入一个grabbable脚本即可开始运行,在场景中,在物体上做出你想呈现的抓取手势,随后按下旁边的按钮,在设置的时间后他就会拍照,之后在运行模式把处理好的物体制作微预制体,之后退出运行模式,把原来的物体删掉,把预制体拖入,此时住区预制体采取的就是刚才录制的抓取手势,在原先的可抓取物体上可以看见新增了一个interactable预制体,他的子物体可以进行抓取手势的微调,或者设置手指的相关参数,比如转化为设定的抓取手势后,虚拟的手指哪些可以动,哪些不能动,锁定的就不能动,constrained 的物体可以抬起来,free 的手指随便你怎么动都没有什么问题,如果想要去掉那个白手,只需要把它禁用掉即可。
另外一种就是使用Oculus窗口,interaction里面的hand grab pose recorder 这个会调出一个面板,我们你可以根据这个面板的要求实现手势的录制,首先需要一个被交互物体,上面要有碰撞体,刚体,grabbable脚本,接下来把它拖到面板上面的刚体栏中,还有一个空让你填记录哪只手的交互,你就在ovrcamerarig里面的interaction里面的hands 里面拖对应的手进去,接下来就可以进入到运行模式摆好相应的手势,它要求需要用鼠标点击它的面板窗口激活后,按下一个键,默认的是空格键进行录制,录制成功会有一个八色的手部模型停在哪里,之后点击下面一步的保存进行数据保存,之后就可以退出运行模式,退出之后进入到第四部,向原有的被交互物体上点击按钮导入interactable预制体,导入成功后可以看到手的白模,之后把其制作为预制体。开启运行模式就可以依照录制的手势进行抓取了。
小知识点,我们在interactable脚本中那个滑条可以对手的模型进行缩放来适配不同的手型,滑动进行缩放后,点击add添加新的scale的 模型,最下面一个按钮,可以制造左右手的镜像手势,也可以对一个物体录制不同的抓取手势,在第一第二种方法中一次录完也行,他会根据不同的抓取位置适配不同的手势。注意这个抓取手势的录制要和刚体物体的距离相近,否则会出错
2025年2月17日22:06:53
我们看的教程更新了2025年的重置版,但是感觉有点水哈,还是 要付费吗,哈吉王,你这家伙。
我们只能东拼西凑了
首先我们来谈一谈这次的更新都更新了些啥
我们成功的导入了All in one SDK,使用的是URP的项目,这个All in one SDK 还是有点实力的,有些东西可以直接拖出来使用,方便的很,但这个新的教程没有什么干货的知识点,这还是让人挺难受的。