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

VR UI的問題在于如何展示出立體效果熔掺。之前給大家介紹了一個(gè)2D UI和3D UI。

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

3D UI之前給大家介紹了使用3D 模型制作的UI,結(jié)合TextMesh來做堪唐。這個(gè)在AR場(chǎng)景中也是OK的巡语。但是VR場(chǎng)景中,想達(dá)到立體的效果淮菠,UI也必須要分屏處理男公。

今天主要給大家介紹一下Cardboard SDK中使用的UI系統(tǒng)。在介紹這個(gè)UI系統(tǒng)之前合陵,先要說下UGUI的事件系統(tǒng)EventSystem枢赔。

當(dāng)我們?cè)趫?chǎng)景中創(chuàng)建任一UI對(duì)象后,Hierarchy面板中都可以看到系統(tǒng)自動(dòng)創(chuàng)建了對(duì)象EventSystem曙寡,可以看到該對(duì)象下有三個(gè)組件:EventSystem糠爬、StandaloneInputModule、TouchInputModule(5.x版本貌似沒有了)举庶,后面兩個(gè)組件都繼承自BaseInputModule执隧。

Unity5.3.0f4


Unity4.6.4f1


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

EventSystem組件主要負(fù)責(zé)處理輸入、射線投射以及發(fā)送事件户侥。一個(gè)場(chǎng)景中只能有一個(gè)EventSystem組件镀琉。

StandaloneInputModule和TouchInputModule組件是系統(tǒng)提供的標(biāo)準(zhǔn)輸入模塊和觸摸輸入模塊,我們可以通過繼承BaseInputModule實(shí)現(xiàn)自己的輸入模塊蕊唐。? ? ? ? 除了以上兩個(gè)組件屋摔,還有一個(gè)很重要的組件通過EventSystem對(duì)象我們看不到,它是BaseRaycaster組件替梨。BaseRaycaster也是一個(gè)基類钓试,前面說的輸入模塊要檢測(cè)到鼠標(biāo)事件必須有射線投射組件才能確定目標(biāo)對(duì)象。系統(tǒng)實(shí)現(xiàn)的射線投射類組件有PhysicsRaycaster, Physics2DRaycaster, GraphicRaycaster副瀑。這個(gè)模塊也是可以自己繼承BaseRaycaster實(shí)現(xiàn)個(gè)性化定制弓熏。

總的來說,EventSystem負(fù)責(zé)管理糠睡,BaseInputModule負(fù)責(zé)輸入挽鞠,BaseRaycaster負(fù)責(zé)確定目標(biāo)對(duì)象,目標(biāo)對(duì)象負(fù)責(zé)接收事件并處理,然后一個(gè)完整的事件系統(tǒng)就有了信认。更多內(nèi)容請(qǐng)看: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)材义。有的知識(shí)對(duì)于所有VR UI都是適用的。

VR UI的問題在于如何展示出立體效果嫁赏。之前給大家介紹了一個(gè)2D UI和3D UI其掂。

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

3D UI之前給大家介紹了使用3D 模型制作的UI护蝶,結(jié)合TextMesh來做。這個(gè)在AR場(chǎng)景中也是OK的翩迈。但是VR場(chǎng)景中持灰,想達(dá)到立體的效果,UI也必須要分屏處理负饲。

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

在VR場(chǎng)景中堤魁,結(jié)合頭控裝置,可以將UI的位置設(shè)置在用戶視線范圍內(nèi)返十,或者視線范圍外妥泉。在非特殊情況下,建議設(shè)置在用戶視線范圍內(nèi)洞坑。

Cardboard 的UI 系統(tǒng)是基于UGUI制作的盲链。另外,他也有使用了OnGUI的方式來制作VR UI(這個(gè)不推薦大家使用)迟杂。

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

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

正如前面所說,這里還隱藏了一個(gè)組件BaseRaycaster.這樣才能會(huì)發(fā)射一些射線监氢。

前面也介紹了EventSystem,并且介紹了其綁定的幾個(gè)腳本布蔗。注意他們的順序,如果的層級(jí)更高誰就會(huì)最先獲取數(shù)據(jù)浪腐。比如 StandaloneInputModule在前纵揍,那么就會(huì)獲取鼠標(biāo)的事件。

OK牛欢,接下來主要看GazeInputModule.cs這個(gè)腳本骡男,主要的方法是process():

public override void Process()

{

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

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

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

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

{

// Drag is only supported if TapIsTrigger is false.

HandleDrag(); // 拖動(dòng)狀態(tài)吮炕,鼠標(biāo)按下腊脱,這個(gè)倒是沒試過

}

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ù)制代碼

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

這個(gè)是UGUI的機(jī)制陕凹。

如果需要檢測(cè)普通GameObject的碰撞,則需要在Camera上添加 PhysicsRaycaster組件鳄炉。

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末杜耙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拂盯,更是在濱河造成了極大的恐慌佑女,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谈竿,死亡現(xiàn)場(chǎng)離奇詭異团驱,居然都是意外死亡迁筛,警方通過查閱死者的電腦和手機(jī)疮薇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赴邻,“玉大人呀洲,你說我怎么就攤上這事紊选。” “怎么了两嘴?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵丛楚,是天一觀的道長。 經(jīng)常有香客問我憔辫,道長趣些,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任贰您,我火速辦了婚禮坏平,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锦亦。我一直安慰自己舶替,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布杠园。 她就那樣靜靜地躺著顾瞪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陈醒,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天惕橙,我揣著相機(jī)與錄音,去河邊找鬼钉跷。 笑死弥鹦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爷辙。 我是一名探鬼主播彬坏,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼膝晾!你這毒婦竟也來了栓始?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤玷犹,失蹤者是張志新(化名)和其女友劉穎混滔,沒想到半個(gè)月后洒疚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歹颓,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年油湖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了巍扛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乏德,死狀恐怖撤奸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情喊括,我是刑警寧澤胧瓜,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站郑什,受9級(jí)特大地震影響府喳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蘑拯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一钝满、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧申窘,春花似錦弯蚜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春收厨,著一層夾襖步出監(jiān)牢的瞬間悍引,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工帽氓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留趣斤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓黎休,卻偏偏與公主長得像浓领,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子势腮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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