教你怎么開發(fā)VR游戲系列教程六:Cardboard sdk UI交互系統(tǒng)

VR UI的問題在于如何展示出立體效果抗斤。之前給大家介紹了一個2D UI和3D UI。

2D UI就和正常UI一樣畜伐,在分屏的狀態(tài)下依然使用單屏顯示就OK,使用NGUI/UGUI都可以馍惹,不過還是推薦大家使用UGUI,我后面介紹的這些內(nèi)容也都是使用UGUI的玛界。

3D UI之前給大家介紹了使用3D 模型制作的UI万矾,結(jié)合TextMesh來做。這個在AR場景中也是OK的慎框。但是VR場景中良狈,想達到立體的效果,UI也必須要分屏處理笨枯。

今天主要給大家介紹一下Cardboard SDK中使用的UI系統(tǒng)薪丁。在介紹這個UI系統(tǒng)之前,先要說下UGUI的事件系統(tǒng)EventSystem馅精。

當(dāng)我們在場景中創(chuàng)建任一UI對象后严嗜,Hierarchy面板中都可以看到系統(tǒng)自動創(chuàng)建了對象EventSystem,可以看到該對象下有三個組件:EventSystem洲敢、StandaloneInputModule漫玄、TouchInputModule(5.x版本貌似沒有了),后面兩個組件都繼承自BaseInputModule压彭。

Unity5.3.0f4

Unity4.6.4f1

file:///C:/Users/ANTVR-~1/AppData/Local/Temp/enhtmlclip/Image(2).png

EventSystem組件主要負責(zé)處理輸入称近、射線投射以及發(fā)送事件。一個場景中只能有一個EventSystem組件哮塞。

StandaloneInputModule和TouchInputModule組件是系統(tǒng)提供的標(biāo)準(zhǔn)輸入模塊和觸摸輸入模塊刨秆,我們可以通過繼承BaseInputModule實現(xiàn)自己的輸入模塊。? ?? ???除了以上兩個組件忆畅,還有一個很重要的組件通過EventSystem對象我們看不到衡未,它是BaseRaycaster組件。BaseRaycaster也是一個基類家凯,前面說的輸入模塊要檢測到鼠標(biāo)事件必須有射線投射組件才能確定目標(biāo)對象缓醋。系統(tǒng)實現(xiàn)的射線投射類組件有PhysicsRaycaster, Physics2DRaycaster, GraphicRaycaster。這個模塊也是可以自己繼承BaseRaycaster實現(xiàn)個性化定制绊诲。

總的來說送粱,EventSystem負責(zé)管理,BaseInputModule負責(zé)輸入掂之,BaseRaycaster負責(zé)確定目標(biāo)對象抗俄,目標(biāo)對象負責(zé)接收事件并處理脆丁,然后一個完整的事件系統(tǒng)就有了。更多內(nèi)容請看:Unity 5.0事件系統(tǒng)的說明http://docs.unity3d.com/Manual/SupportedEvents.html[url=http://docs.unity3d.com/ScriptReference/EventSystems.EventSystem.html]http://docs.unity3d.com/ScriptRe ... ms.EventSystem.html[/url]

那么再來看看Cardboard的UI系統(tǒng)动雹。有的知識對于所有VR UI都是適用的槽卫。

VR UI的問題在于如何展示出立體效果。之前給大家介紹了一個2D UI和3D UI胰蝠。

2D UI就和正常UI一樣歼培,在分屏的狀態(tài)下依然使用單屏顯示就OK,使用NGUI/UGUI都可以,不過還是推薦大家使用UGUI茸塞,我后面介紹的這些內(nèi)容也都是使用UGUI的躲庄。

3D UI之前給大家介紹了使用3D 模型制作的UI,結(jié)合TextMesh來做钾虐。這個在AR場景中也是OK的噪窘。但是VR場景中,想達到立體的效果禾唁,UI也必須要分屏處理效览。

Cardboard SDK官方開發(fā)指南:https://developers.google.com/cardboard/unity/guide

在VR場景中,結(jié)合頭控裝置荡短,可以將UI的位置設(shè)置在用戶視線范圍內(nèi)丐枉,或者視線范圍外。在非特殊情況下掘托,建議設(shè)置在用戶視線范圍內(nèi)瘦锹。

Cardboard 的UI 系統(tǒng)是基于UGUI制作的。另外闪盔,他也有使用了OnGUI的方式來制作VR UI(這個不推薦大家使用)弯院。

關(guān)于怎么使用UGUI自制一個VR UI,我們下一篇來介紹泪掀。

Cardboard SDK的demo將一個GazeInputModule.cs腳本加到EventSystem中听绳。這個腳本控制人眼視角發(fā)射的射線并觸發(fā)相應(yīng)的事件。

正如前面所說异赫,這里還隱藏了一個組件BaseRaycaster.這樣才能會發(fā)射一些射線椅挣。

前面也介紹了EventSystem,并且介紹了其綁定的幾個腳本。注意他們的順序塔拳,如果的層級更高誰就會最先獲取數(shù)據(jù)负懦。比如 StandaloneInputModule在前眠菇,那么就會獲取鼠標(biāo)的事件。

OK撑教,接下來主要看GazeInputModule.cs這個腳本则吟,主要的方法是process():

public override void Process()

{

CastRayFromGaze();// 控制射線發(fā)射割去,先將3D坐標(biāo)轉(zhuǎn)換為2D UI坐標(biāo)系,發(fā)出射線

UpdateCurrentObject(); // 更新選中物體的狀態(tài),比如按鈕會設(shè)置選中狀態(tài)等

PlaceCursor();// 計算相機近平面與碰撞物體之間的距離类浪,并根據(jù)距離計算Cursor的尺寸,如果scaleCursorSize為true

if (!Cardboard.SDK.TapIsTrigger && ! Input.GetMouseButtonDown(0) && Input.GetMouseButton(0))

{

// Drag is only supported if TapIsTrigger is false.

HandleDrag(); // 拖動狀態(tài)弯予,鼠標(biāo)按下戚宦,這個倒是沒試過

}

else if (Time.unscaledTime - pointerData.clickTime < clickTime)

{

// Delay new events until clickTime has passed.

}

else if (!pointerData.eligibleForClick &&

( Cardboard.SDK.Triggered || ! Cardboard.SDK.TapIsTrigger && Input.GetMouseButtonDown(0)))

{

// New trigger action.

HandleTrigger(); //觸發(fā)事件

} else if (!Cardboard.SDK.Triggered && ! Input.GetMouseButton(0))

{

// Check if there is a pending click to handle.

HandlePendingClick(); // 懸而未決个曙,就是光標(biāo)選中锈嫩,啥也沒干

}

}

復(fù)制代碼

主要流程:計算并發(fā)出射線->檢測射線碰撞的對象(UGUI組件)->處理事件

這個是UGUI的機制。

如果需要檢測普通GameObject的碰撞垦搬,則需要在Camera上添加 PhysicsRaycaster組件呼寸。

聯(lián)系方式:0755-81699111

課程網(wǎng)址: http://www.vrkuo.com/course/vr.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市猴贰,隨后出現(xiàn)的幾起案子对雪,更是在濱河造成了極大的恐慌,老刑警劉巖米绕,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瑟捣,死亡現(xiàn)場離奇詭異,居然都是意外死亡栅干,警方通過查閱死者的電腦和手機迈套,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碱鳞,“玉大人桑李,你說我怎么就攤上這事×” “怎么了贵白?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長崩泡。 經(jīng)常有香客問我禁荒,道長,這世上最難降的妖魔是什么角撞? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任呛伴,我火速辦了婚禮,結(jié)果婚禮上靴寂,老公的妹妹穿的比我還像新娘磷蜀。我一直安慰自己,他們只是感情好百炬,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布褐隆。 她就那樣靜靜地躺著,像睡著了一般剖踊。 火紅的嫁衣襯著肌膚如雪庶弃。 梳的紋絲不亂的頭發(fā)上衫贬,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音歇攻,去河邊找鬼固惯。 笑死,一個胖子當(dāng)著我的面吹牛缴守,可吹牛的內(nèi)容都是我干的葬毫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼屡穗,長吁一口氣:“原來是場噩夢啊……” “哼贴捡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起村砂,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤烂斋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后础废,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汛骂,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年评腺,在試婚紗的時候發(fā)現(xiàn)自己被綠了帘瞭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡歇僧,死狀恐怖图张,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诈悍,我是刑警寧澤祸轮,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站侥钳,受9級特大地震影響适袜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舷夺,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一苦酱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧给猾,春花似錦疫萤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春尾序,著一層夾襖步出監(jiān)牢的瞬間钓丰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工每币, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留携丁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓兰怠,卻偏偏與公主長得像梦鉴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子痕慢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

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