1. 程式人生 > >VRTK使用心得(六):優化使用者體驗——防穿牆及自動墜落

VRTK使用心得(六):優化使用者體驗——防穿牆及自動墜落

我們知道在VR中,尤其是像HTC VIVE或Oculus這樣的裝置,體驗者除了能夠使用瞬移來移動自身位置,還可以在空間小範圍地自主移動,當距離一面牆或者障礙物比較近的時候,體驗者的頭部可以穿過牆面或障礙物的模型,看到裡面的內容(CS穿牆既視感),比如在VR房產專案中,使用者會看到隔壁房間的內容,個別會有閃躲的動作,這種體驗顯然與現實不符,從而影響到沉浸感;另外,同樣是由於自由移動引起的問題,當體驗者瞬移到一個有高度的地方以後,比如高塔、樓梯等,當走出這個高度的範圍,並沒有因為重力而下落,而是懸停在了空中,這也是影響使用者體驗的地方。

VRTK對於這兩方面都有對應的優化措施,首先,對於穿牆,使用VRTK_HeadsetCollisionFade元件,能夠在檢測到使用者與物體發生碰撞以後做一個黑屏效果,這樣體驗者就會本能地退出這個區域(如下圖),在PlayArea(見VRTK的基本配置,PlayArea用來掛載瞬移相關元件)上新增指令碼以後,使用者頭盔與碰撞體發生碰撞,場景會有一個逐漸變黑的過程。


1199677-417a14015b278c26.png

需要說明的是:當新增VRTK_HeadsetCollisionFade以後,會自動掛載另外兩個元件:
1.VRTK_HeadsetCollision:用來檢測頭盔與碰撞體的碰撞,當單獨掛載這個指令碼的時候,可以獲取到這個指令碼,使用HeadsetCollisionDetect事件來檢測碰撞發生,然後撰寫自己的碰撞檢測邏輯,比如除了黑屏,還可以播放提示音,顯示提示UI等。

    void Start () {
        GetComponent<VRTK_HeadsetCollision>().HeadsetCollisionDetect += CollisionDetect_HeadsetCollisionDetect;
    }

    private void CollisionDetect_HeadsetCollisionDetect(object sender, HeadsetCollisionEventArgs e)
    {
      //你的處理邏輯
    }

2. VRTK_HeadsetFade:用來實現黑屏。當單獨掛載時,可以在除了頭盔碰撞之外,呼叫其Fade()函式來實現黑屏效果,傳遞顏色及持續時間引數。

對於自動墜落,VRTK提供了VRTK_BodyPhysics這個元件,同樣是掛載到PlayArea上,當體驗者移出高度範圍的區域,會因為重力自動墜落到能夠承載其的下一個高度。調節引數Gravity Fall Y Threshold,設定引起墜落的值,如下圖,如果設定為1,則距離下一個高度大於1米時下落。


1199677-b98c380b9d14661c.png

其原理是,VRTK在執行時,會在CameraRig上新增兩個Collider,一個“代表”Body,一個“代表”Foot,如下圖:

1199677-fd9b703a9bdb5cad.png

FootCollider通過檢測碰撞,當沒有碰撞時,則認為懸空,繼而實現下落。

以上是VRTK中對於因為使用者自由移動引起的使用者體驗的優化,希望對你有幫助,歡迎指正。

1199677-d4942913d18cee9a.png