此教程相關(guān)的詳細(xì)教案,文檔,思維導(dǎo)圖和工程文件會(huì)放入 Spatial XR 社區(qū)。這是一個(gè)高質(zhì)量 XR 社區(qū),博主目前在內(nèi)擔(dān)任 XR 開(kāi)發(fā)的講師。此外,該社區(qū)提供教程答疑、及時(shí)交流、進(jìn)階教程、外包、行業(yè)動(dòng)態(tài)等服務(wù)。
社區(qū)鏈接:
Spatial XR 高級(jí)社區(qū)(知識(shí)星球)
Spatial XR 高級(jí)社區(qū)(愛(ài)發(fā)電)
??教程說(shuō)明
這篇教程將會(huì)介紹如何用 Meta 的 Interaction SDK,配置 Poke 交互,實(shí)現(xiàn)用手指點(diǎn)擊 UI 按鈕的功能,并且能夠推動(dòng) UI 按鈕,UI 按鈕由 3D 物體制作而成(使用 Unity 內(nèi)置的 UGUI 會(huì)額外出一期教程)。
環(huán)境配置可參考:https://blog.csdn.net/qq_46044366/article/details/133967343
配置一個(gè)基本的玩家物體可以參考前幾期教程:https://blog.csdn.net/qq_46044366/article/details/134097455
系列教程專欄:https://blog.csdn.net/qq_46044366/category_12118293.html
配套的視頻鏈接:
上半部分:https://www.bilibili.com/video/BV1D64y1H7bW
下半部分:https://www.bilibili.com/video/BV1Kj411n7WQ
?電腦操作系統(tǒng):Windows 11
使用的 VR 設(shè)備:Meta Quest 3(Quest 系列都適用)
使用的 Unity 版本:2021.3.5 LTS (這里推薦使用 2021 及以上的 LTS 版本)
Meta XR SDK 版本:v57
官方文檔:https://developer.oculus.com/documentation/unity/unity-gs-overview/
Poke 交互腳本介紹文檔:
https://developer.oculus.com/documentation/unity/unity-isdk-poke-interaction/
Poke 交互配置過(guò)程文檔:https://developer.oculus.com/documentation/unity/unity-isdk-create-poke-interactions/
最終效果:
??給玩家配置 HandPokeInteractor
在 玩家 物體下 的 OVRInteraction > OVRHands > LeftHand > HandInteractorsLeft 下添加 HandPokeInteractor 預(yù)制體(可以從 Project 窗口的搜索欄中搜到)
在 HandInteractorLeft 物體上的 Best Hover Interactor Group 腳本中添加 HandPokeInteractor:
然后展開(kāi) HandPokeInteractor 物體,激活 Visuals 子物體下的兩個(gè)子物體:
先點(diǎn)擊 HandPokeLimiter 物體,將左手的 SyntheticHand 拖到 HandPokeLimiterVisual 腳本中的 SyntheticHand 變量上,這個(gè)腳本能夠在手點(diǎn)擊按鈕的時(shí)候限定住手的姿態(tài),讓手部不與按鈕發(fā)生穿模。
然后點(diǎn)擊 HandPokeOvershootGlow 物體,按下圖所示完成腳本變量賦值:
這個(gè)腳本能夠根據(jù)按壓按鈕的程度改變手指的顏色。
右手也是類似的配置步驟。
??用 3D 物體制作可以被點(diǎn)擊的 UI 按鈕
UI 按鈕可以有兩種制作方式,一種是用 3D 物體制作,可以實(shí)現(xiàn)按鈕的推動(dòng);另一種是用 Unity 內(nèi)置的 UGUI 制作,相當(dāng)于在一個(gè)平板上操作,類似 Quest 系統(tǒng)面板的操作方式。這期教程將會(huì)介紹用 3D 物體制作可以被點(diǎn)擊的 UI 按鈕。
?搭建物體層級(jí)
按照下圖所示的層級(jí),搭建一個(gè)按鈕物體(層級(jí)模仿的是官方案例中的 UI 按鈕,可以在 Project 窗口中搜索 HoverButtons 物體):
其中,ButtonPanel 物體是一個(gè) Quad 物體,這種物體只會(huì)渲染正面,不會(huì)渲染反面,可以在 Hierarchy 面板中點(diǎn)擊鼠標(biāo)右鍵 > 選擇 3D Object > Quad,創(chuàng)建之后把物體的碰撞體刪除掉:
如果想要制作雙面渲染的按鈕,可以使用 Cube 物體,然后把 z 軸的縮放大小調(diào)成很小的值,這樣原本的方塊看上去就是一個(gè)平面。
除了,ButtonPanel 物體,其他物體都是空物體。添加好這些物體之后,可以修改根物體 Button 的 Scale 調(diào)整按鈕的大小。
?給物體添加腳本
在根物體 Button 上添加 Poke Interactable 腳本:
在 Surface 子物體上添加如下圖所示的三個(gè)腳本:
Surface 物體相當(dāng)于按鈕的底部。因?yàn)槲覀冎谱鞯?UI 按鈕可以被推動(dòng),推動(dòng)的時(shí)候不能無(wú)限向下推,而是推到一個(gè)位置就不能繼續(xù)往下推了,這個(gè)位置就是 Surface 的位置。而下圖中白色邊框的方形范圍是能夠進(jìn)行 Poke 交互的范圍,假如此范圍比按鈕模型的范圍大很多,并且按鈕是可被推動(dòng)的,那么點(diǎn)擊按鈕的時(shí)候手指在按鈕的邊緣外也是有可能推動(dòng)按鈕的,因?yàn)槟軌蝽憫?yīng) Poke 交互,促使按鈕被推動(dòng)的范圍取決于白色邊框的范圍。要想修改白色邊框的范圍,可以調(diào)整按鈕父物體 Button 的縮放大小,也可以調(diào)整 Suface 物體上的 Bounds Clipper 腳本的 Size 數(shù)值,這個(gè)稍后會(huì)講解。
然后在 ButtonVisuals 子物體上添加 PokeInteractableVisual 腳本。
?為腳本變量賦值
找到根物體 Button 上的 Poke Interactable 腳本,將 Surface 物體拖至 Surface Path 變量中。
點(diǎn)擊 Surface 子物體,按下圖所示進(jìn)行腳本變量賦值:
Bounds Clipper 的 Size 決定了按鈕可被 Poke 響應(yīng)的范圍。
然后點(diǎn)擊 ButtonVisuals 子物體,按下圖所示進(jìn)行賦值:
Poke Interactable Visual 腳本能夠控制按鈕被推動(dòng),直到推至按鈕的底部。然后配合玩家 HandPokeInteractor 子物體下的 HandPokeLimiter 中的 HandPokeLimiterVisual 腳本,能夠?qū)崿F(xiàn)推動(dòng)按鈕的時(shí)候讓手部模型不與按鈕穿模。
官方文檔原文:
If you want a button to move as you poke it as showcased in the PokeExamples scene, add the PokeInteractableVisual component, which takes a reference to the PokeInteractable and the trigger plane. The trigger plane acts as the poke limiting plane, or the “stopping point” of button travel). The transform on which this PokeLimiterVisual is placed will move as it’s pressed, stopping at the trigger plane, after which Poke Limiting will begin.
然后修改 ButtonVisuals 物體在 Z 軸上的位置,讓按鈕的模型位于 Surface 前面的一段距離,這樣才能實(shí)現(xiàn)推動(dòng)的效果。注意,需要修改的是掛載了 Poke Interactable Visual 腳本的物體或者其父物體的位置,修改 ButtonPanel 子物體是沒(méi)有作用的。
現(xiàn)在,可以被推動(dòng)的按鈕就已經(jīng)配置好了。
??模仿官方樣例按鈕的樣式
有人可能會(huì)好奇,官方樣例中的這種半透明的按鈕(如上圖所示)是怎么做出來(lái)的。其實(shí)只需要額外添加幾個(gè)東西。
找到按鈕的 ButtonPanel 子物體,將 Mesh Renderer 的 Materials 改成 RoundedBoxUnlit。
然后在 ButtonPanel 物體上添加下圖所示的腳本:
腳本變量的賦值如下圖所示:
上圖中的兩個(gè)腳本負(fù)責(zé)控制按鈕在 Normal,Hover(手指靠近按鈕),Select(手指點(diǎn)擊按鈕)時(shí)的顏色變化。
上圖中的這個(gè)腳本可以控制按鈕的長(zhǎng)寬,顏色,邊緣形狀等數(shù)值。大家可以復(fù)制官方樣例 HoverButtons 中的 Rounded Box Properties 腳本參數(shù),粘貼到自己的按鈕上,這樣自己的按鈕也能夠呈現(xiàn)出半透明的顏色,并且邊緣也成了曲面。
??在按鈕上添加文字
在 ButtonVisuals 子物體下創(chuàng)建一個(gè) 3D Object > Text - TextMeshPro,可以創(chuàng)建字體物體。
修改 TextMeshPro-Text 組件上的參數(shù)可以調(diào)整字體樣式。
??修改按鈕圖片
有時(shí)候,我們會(huì)為按鈕準(zhǔn)備圖片素材。在 Unity 中導(dǎo)入圖片文件后,需要把 Texture Type 改為 Sprite (2D and UI):
刪除 ButtonPanel 子物體上的 Mesh Filter 和 Mesh Renderer 組件,添加 Sprite Renderer 組件,然后將圖片素材引用到 Sprite 變量上:
如果要修改圖片的大小,需要修改 ButtonPanel 的父物體(ButtonVisuals)的 Scale。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-764295.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-764295.html
到了這里,關(guān)于Unity Meta Quest 一體機(jī)開(kāi)發(fā)(十二):【手勢(shì)追蹤】Poke 交互 - 用手指點(diǎn)擊由 3D 物體制作的 UI 按鈕的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!