Pico Neo 開發(fā)配置

??VR 一體機內(nèi)置操作系統(tǒng)跛锌,是具備獨立處理器的 VR 頭戴式顯示設備只壳。VR 一體機具備獨立運算俏拱、輸入和輸出的功能不如主機式 VR 設備強大,但由于沒有連線的束縛吼句,使用起來自由度更高锅必。

??VR 一體機作為市面上應用最為廣泛的虛擬現(xiàn)實設備,是虛擬現(xiàn)實應用開發(fā)的主要設備。典型的 VR 一體機設備為 Oculus Quest 2搞隐、Pico Neo 2驹愚,這里以 Pico Neo 為例介紹 VR 一體機設備的應用開發(fā)。


1.設備介紹

??Pico Neo 是市面上較為流行的頭戴式 VR 一體機劣纲,具備較好的性能逢捺,在這個部分,我們將介紹如何利用 Unity 進行 Pico Neo 的應用開發(fā)癞季。

??Pico Neo 硬件部分主要包括頭盔和操作手柄劫瞳,在進行開發(fā)時我們需要熟悉一下硬件部分的使用。

??通過長按頭盔的電源鍵的方式我們可以打開頭盔绷柒,打開頭盔后志于,通過按下手柄的 HOME 鍵連接手柄。

頭盔和手柄的開機操作

??在利用頭戴式顯示設備開發(fā)前废睦,需要先了解一下相應的游戲引擎伺绽。目前市面上有很多優(yōu)秀的商用游戲引擎和免費游戲引擎,其中最具代表性的商用游戲引擎有 Unreal 和 Unity嗜湃。
??Unity 是由 Unity Technologies 公司開發(fā)的跨平臺專業(yè)游戲引擎奈应,用戶可以通過它輕松實現(xiàn)諸如 3D 游戲、建筑可視化购披、實時三維動畫等類型互動內(nèi)容杖挣,然后一鍵部署到各種游戲平臺上。
??Unity 以其強大的跨平臺特性與優(yōu)秀的 3D 渲染效果而深受廣大開發(fā)者的青睞刚陡,現(xiàn)在很多商業(yè)游戲及虛擬現(xiàn)實產(chǎn)品都采用 Unity 引擎來開發(fā)程梦。

??Unreal 是 Unreal Engine 的簡寫,中文名為虛幻橘荠,由 Epic 開發(fā)屿附,是世界知名授權(quán)最廣的游戲引擎之一。Unreal Engine 是全球最開放哥童、最先進的實時 3D 創(chuàng)建工具挺份,可制作照片級逼真的視覺效果和沉浸式體驗。
??虛幻引擎是一套完整的開發(fā)工具贮懈,面向所有使用實時技術(shù)的開發(fā)者匀泊。它能為各行各業(yè)的專業(yè)人士帶去無限的創(chuàng)作自由和空前的掌控力。無論是前沿娛樂內(nèi)容朵你、精美的可視化還是沉浸式虛擬世界各聘,一切盡在虛擬引擎。


2.軟件配置

??由于 Pico Neo 是基于 Android 平臺的抡医,因此開發(fā)者在利用 Unity 進行開發(fā)時躲因,需要在 Unity 中添加相應的 Android 平臺的支持模塊早敬。如果安裝 Unity 時沒有安裝,可以在 Unity Hub 中進行相應模塊的添加大脉。

??在 Unity Hub 中點擊進入安裝界面搞监,選擇相對應的 Unity 編輯器,點擊其左上方的更多按鈕镰矿,在界面中選擇添加模塊琐驴。

添加模塊

??在添加模塊界面選擇Android Build Support模塊并安裝。

添加 Android Build Support

??利用搜索引擎搜索 Pico 找到相應頁面的方式或者直接通過網(wǎng)址 https://www.pico-interactive.com/cn/秤标,直接進入 Pico 的官方網(wǎng)站绝淡。點擊網(wǎng)站上方的開發(fā)平臺進入 Pico 開發(fā)者平臺。

Pico 官方網(wǎng)站

??在 Pico 開發(fā)者平臺頁面點擊下載 SDK苍姜,進入 SDK 界面够委,如下圖所示。

Pico 開發(fā)者平臺

??在下載 SDK 界面中選擇開發(fā)所采用的 Pico Neo 2 series 以及相對應的開發(fā)平臺 Unity怖现。選擇好相應的事項,點擊頁面下方的下載最新版進行 SDK 下載玉罐。

下載 PicoVR Unity SDK

??在 Unity Hub 中新建一個 Unity 工程屈嗤,新建工程完成后,選擇 Assets 菜單中的 Import Package 點擊 Custom Package吊输。

導入 Custom Package

??點擊 Custom Package 后饶号,在彈出的文件資源管理器中,選擇下載好的 PicoVR Unity SDK季蚂。SDK 有 32bit 和 64bit 兩個版本茫船,開發(fā)者根據(jù)自身設備選擇相應版本。

選擇相應版本的 SDK

??點擊打開后扭屁,系統(tǒng)會彈出一個對話框算谈,開發(fā)者可以根據(jù)需要導入相應的部分,如下圖所示料滥。

導入選項

??等待 SDK 導入完成然眼,在彈出的 Pico SDK Setting 窗口,修改相應的設置葵腹,修改完成后點擊下方的 “Apply” 后高每,關閉窗口。

Pico SDK Setting

3.演示示例

??在 Unity 的 Asset Store 搜索 “POLYGON Starter Pack” 點擊Import將資源包導入項目践宴。

導入 Asset Store 中的資源包

??找到資源包中的場景文件鲸匿,雙擊進入資源包中的場景。

選擇資源包中的場景

??進入 Project 選項卡阻肩,依次展開 Assets 中的 PicoMobileSDK带欢,找到Pvr_UnitySDK,打開 Pvr_Unity 文件夾選擇其中的 Prefabs,將 Pvr_UnitySDK 預制體拖放入場景洪囤。

Pvr_UnitySDK

??Pvr_UnitySDK 是一個集成式的預制體徒坡,能夠跟蹤頭戴式顯示器,在創(chuàng)建項目時瘤缩,可以直接將 Pvr_UnitySDK 預制體拖放至場景中喇完。

??將原場景中的攝像機刪除,并調(diào)整好 Pvr_UnitySDK 的位置剥啤。調(diào)整好位置后锦溪,點擊運行可以查看場景的雙目視圖預覽。

場景的 Game 視圖

??開發(fā)者可以通過鍵盤上的 Alt 鍵和鼠標左鍵進行運行視圖的切換府怯,開發(fā)者根據(jù)自身需要可以選擇視圖在 Game 面板的呈現(xiàn)方式刻诊,也即雙目視圖和單目全屏之間的切換。通過鍵盤上 Alt 鍵和鼠標的移動牺丙,開發(fā)者可以改變相機的朝向则涯,以此查看場景。

??接著找到 Assets 下的 Pvr_Controller 中的 Prefabs冲簿,選擇其中的 ControllerManager粟判,如下圖所示。

Project 中的 ControllerManager

??ControllerManager 主要包含 PvrController0 和 PvrController1峦剔,這兩個預制體主要對應于兩個手柄档礁。對于部分單手柄的設備,可以只使用其中的 PvrController0吝沫。將 ControllerManager 預制體拖放至 Pvr_UnitySDK 下呻澜,作為 Pvr_UnitySDK 的子物體。

ControllerManager

??拖放完成后惨险,點擊運行羹幸。在 Game 視圖中,可以看到兩個白色透明手柄的模型辫愉。

添加 ControllerManager 后的運行顯示圖

??顯示手柄后睹欲,我們需要利用手柄與場景進行交互,使用操作手柄的按鍵與搖桿之前需要了解手柄的相應按鍵的作用一屋,以及對應的接口 API窘疮。操作手柄主要包含 HOME 鍵、操作鍵冀墨、搖桿闸衫、側(cè)按鍵以及扳機鍵,這些鍵在不同應用中常對應著不同的功能诽嘉。在開發(fā)過程中蔚出,我們根據(jù)需求自定義按鍵對應的功能弟翘,并為此編寫相應的響應事件處理程序,來實現(xiàn)手柄按鍵與應用的交互骄酗。

手柄按鍵示意圖

??在應用開發(fā)時稀余,我們常常需要根據(jù)手柄的接口 API,對手柄的按鍵進行配置趋翻,利用接口 API 實現(xiàn)相應的交互睛琳,例如響應手柄按下事件等。下表即為 Pico Neo 不同按鍵對應的輸入事件踏烙。

按鍵 輸入事件
HOME鍵 Pvr_KeyCode.HOME
APP返回鍵 Pvr_KeyCode.APP
扳機鍵 Pvr_KeyCode.TRIGGER
側(cè)按鍵 Pvr_KeyCode.Right(手柄1為Right)
Pvr_KeyCode.Left(手柄0為left)
搖桿 Pvr_KeyCode.TOUCHPAD
X鍵 Pvr_KeyCode.X(手柄0)
Y鍵 Pvr_KeyCode.Y(手柄0)
A鍵 Pvr_KeyCode.A(手柄1)
B鍵 Pvr_KeyCode.B(手柄1)

??通過將按鍵對應的輸入事件與 API 接口函數(shù)相結(jié)合使用师骗,即可通過腳本獲取手柄的交互信息。

??通過 UPvr_GetControllerState 函數(shù)能夠獲取 Controller 連接狀態(tài)讨惩,可以用來判斷手柄控制器是否連接并且能夠使用辟癌。

UPvr_GetControllerState 函數(shù)詳解

??結(jié)合上圖中 UPvr_GetControllerState 函數(shù)的定義,我們可以發(fā)現(xiàn)函數(shù)的返回值為 ControllerState 類型荐捻,ControllerState 為枚舉類型黍少,包含三種狀態(tài),Connected 即為連接成功处面。

ControllerState

??同樣的厂置,我們可以利用 UPvr_GetKey 函數(shù)獲取手柄控制器的按鍵是否被按住,UPvr_GetKey 函數(shù)如下所示鸳君。在調(diào)用函數(shù)時,我們需要指定手柄控制器(hand)患蹂,以及需要檢測的按鍵(key)或颊。通過函數(shù)的返回值我們可以知道相應的按鍵是否被按住,按鍵被按住即返回 true传于,按鍵未按住即返回 false囱挑。

UPvr_GetKey 函數(shù)詳解

??介紹了上述接口函數(shù),我們在項目中新建文件夾沼溜,并命名為 Scripts平挑,在 Scripts 文件夾中新建腳本并命名為 ControllerDemo。利用這個腳本演示相應函數(shù)的使用系草。

新建腳本

??雙擊打開腳本通熄,在腳本中添加相應的檢測代碼如下所示。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Pvr_UnitySDKAPI;

public class PicoControllerDemo : MonoBehaviour
{
    void Update()
    {
        if(Controller.UPvr_GetControllerState(0) == ControllerState.Connected)
            if(Controller.UPvr_GetKey(0, Pvr_KeyCode.TRIGGER))
                Debug.Log("正在按Trigger鍵找都!");
    }
}

??在腳本中唇辨,我們在if條件語句的判斷條件中填入表達式,利用 UPvr_GetControllerState 判斷 PvrController0 是否接入成功能耻。如果接入成功赏枚,再利用 if 語句結(jié)合 UPvr_GetKey 判斷指定手柄控制器的 Trigger 鍵是否被按住亡驰。

??相應的函數(shù)調(diào)用時通過傳入 0/1 的方式來指定函數(shù)判斷相應手柄控制器,根據(jù)傳入的相應按鍵判斷按鍵是否被按下饿幅。

??在 API 函數(shù)中凡辱,還用兩個函數(shù) UPvr_GetKeyDown、UPvr_GetKeyUp 來判斷按鍵的狀態(tài)栗恩。UPvr_GetKeyDown 函數(shù)可以判斷按鍵是否被按下透乾,UPvr_GetKeyUp 可以用來判斷按鍵是否被抬起。

UPvr_GetKeyDown 和 UPvr_GetKeyUp 函數(shù)詳解

??這兩個函數(shù)和前面介紹的函數(shù)類似摄凡,傳入?yún)?shù)為 hand 和 key续徽,這兩個參數(shù)即為指定手柄控制器和手柄控制器的按鍵。

??Pico Neo 2 的手柄控制器中包含搖桿鍵亲澡,對于搖桿不能和其他按鍵一樣钦扭。搖桿與觸摸板類似,撥動搖桿的值和觸摸板的值類似床绪。在早期版本中客情,獲取觸摸板的主要利用 UPvr_GetTouchPadPosition 函數(shù)獲取觸摸板的 touch 值。后來癞己,觸摸板和搖桿樣式的操作手柄進行統(tǒng)一膀斋,統(tǒng)一利用 UPvr_GetAxis2D 函數(shù)。

不同樣式的操作手柄

??在觸摸板上痹雅,以觸摸板的中心為坐標中心仰担,建立一個 -1 到 1 的兩個坐標軸,手指觸摸觸摸板的相應位置绩社,坐標軸能夠得到相應的觸摸位置摔蓝。搖桿也可以和觸摸板一樣,利用類似的原理愉耙,可以獲取搖桿的撥動值贮尉,如下圖所示。

觸摸板示意圖

??在 API 函數(shù)中朴沿,可以利用 UPvr_GetAxis2D 函數(shù)猜谚,獲取搖桿的撥動值。UPvr_GetAxis2D 函數(shù)需要傳入 hand赌渣,也即指明操作手柄魏铅。UPvr_GetAxis2D 函數(shù)的返回值為二維向量(Vector2),返回值的范圍為 -1 到 1坚芜。

UPvr_GetAxis2D 函數(shù)詳解

??Pico 一體機除了手柄按鍵沦零,頭戴式顯示器上也有相應的按鍵。下表列出了一體機頭戴式顯示器上的常用按鍵與 Unity 里的鍵值對應關系货岭。

HMD按鍵 Unity輸入鍵
返回值 KeyCode.Escape
確認值 KeyCode.JoystickButton0

??頭戴式顯示器同手柄控制器按鍵類似路操,可以使用相應的同手柄按鍵類似的 API 接口函數(shù)疾渴,檢測頭戴式顯示器上的按鍵狀態(tài)。

??需要注意的是屯仗,頭戴式顯示器的按鍵與操作手柄的按鍵的接口 API 函數(shù)使用存在不同搞坝,操作手柄的 API 接口函數(shù)的調(diào)用需要使用 Controller,對于頭戴式顯示器的按鍵的使用是通過 Input 輸入系統(tǒng)魁袜。

??類似的桩撮,我們可以編寫腳本結(jié)合 if 判斷語句判斷相應的按鍵的使用情況,對于相應的按鍵可以按照按鍵對應的事件的對照表指定相應的按鍵峰弹。

if(Input.GetKeyDown(KeyCode.Joystick1Button0))
{
    Debug.Log(“頭戴式顯示器確認鍵被按下店量!”);
}

??在腳本中編寫相應的內(nèi)容后,將腳本掛載到游戲場景中的物體上鞠呈,由于腳本內(nèi)容需要和手柄控制器進行交互融师。因此編寫完成相應的腳本后,需要結(jié)合設備進行相應的調(diào)試蚁吝,腳本的完整內(nèi)容如下所示旱爆。

public class ControllerDemo : MonoBehaviour
{
    void Update()
    {
        if (Controller.UPvr_GetControllerState(0) == ControllerState.Connected)
        {
            if (Controller.UPvr_GetKey(0, Pvr_KeyCode.TRIGGER))
                Debug.Log("正在按Trigger鍵!");

            if (Controller.UPvr_GetKeyDown(0, Pvr_KeyCode.TRIGGER))
                Debug.Log("Trigger鍵被按下窘茁!");

            if (Controller.UPvr_GetKeyUp(0, Pvr_KeyCode.TRIGGER))
                Debug.Log("Trigger鍵被松開怀伦!");

            Vector2 DialValue = Controller.UPvr_GetAxis2D(0);
            Debug.Log("搖桿的撥動值:" + DialValue);            
        }

        if (Input.GetKeyDown(KeyCode.Joystick1Button0))
            Debug.Log("頭戴式顯示器確認鍵被按下!");
    }
}

??在進行調(diào)試時山林,需要事先對項目進行打包房待。在 Unity 編輯器中,通過 Unity 上方菜單欄中的 File 下的 Build Settings 進入項目打包界面驼抹。

File 菜單欄

??通過 Build Settings 進入項目打包界面后桑孩,點擊界面上 “Add Open Scenes”,添加當前場景進入打包列表砂蔽。在下方的 Platform 中選擇 Android洼怔,點擊界面的左下角的 “Player Settings” 進入玩家設置界面署惯。

項目打包界面

??在 Player Settings 界面中左驾,選擇 Other Settings,在 Other Settings 界面中修改 PackageName极谊,同時 Minimum API Level 和 Target API Level 選擇相對應版本的 API level诡右。

Player Settings 界面

??將頭戴式顯示器與電腦上處于同一個局域網(wǎng)下或者通過數(shù)據(jù)線將設備與電腦進行連接,等待設備接入完成后轻猖,在 Build Settings 界面中點擊 “Refresh”帆吻。刷新完成后,在 Run Device 中添加 Pico Neo 2 即可指定運行設備咙边。

添加運行設備

??修改完相應設置后猜煮,點擊界面右下角的 “Build And Run”(也可以點擊 Build 后續(xù)再在 Pico 設備中點擊運行)次员,在彈出來的文件資源管理器中新建文件夾 AndroidPackage 并將打包好的 apk 文件命名后存入指定的文件夾。

將 apk 文件存放至指定文件夾
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末王带,一起剝皮案震驚了整個濱河市淑蔚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愕撰,老刑警劉巖刹衫,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搞挣,居然都是意外死亡带迟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門囱桨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仓犬,“玉大人,你說我怎么就攤上這事蝇摸∩艏纾” “怎么了?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵貌夕,是天一觀的道長律歼。 經(jīng)常有香客問我,道長啡专,這世上最難降的妖魔是什么险毁? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮们童,結(jié)果婚禮上畔况,老公的妹妹穿的比我還像新娘。我一直安慰自己慧库,他們只是感情好跷跪,可當我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著齐板,像睡著了一般吵瞻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上甘磨,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天橡羞,我揣著相機與錄音,去河邊找鬼济舆。 笑死卿泽,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的滋觉。 我是一名探鬼主播签夭,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼齐邦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了第租?” 一聲冷哼從身側(cè)響起侄旬,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎煌妈,沒想到半個月后儡羔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡璧诵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年汰蜘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片之宿。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡族操,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出比被,到底是詐尸還是另有隱情色难,我是刑警寧澤,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布等缀,位于F島的核電站枷莉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏尺迂。R本人自食惡果不足惜笤妙,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望噪裕。 院中可真熱鬧蹲盘,春花似錦、人聲如沸膳音。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祭陷。三九已至苍凛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颗胡,已是汗流浹背毫深。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工吩坝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留毒姨,地道東北人。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓钉寝,卻偏偏與公主長得像弧呐,于是被迫代替她去往敵國和親闸迷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內(nèi)容