ps-------HoloTookit-Unity所有預設體和腳本

一、預設體

1、 Cursor:光標,遊標,類似於pc端的鼠標,在holokit中它包含了很多的種類   

              DefaultCursor一個基本的光標 ,類似於hololens界面中的光標,一般是白色的圈,點擊的時候是一個白點,自帶燈光和動畫,分爲三種狀態 激活狀態,禁用狀態,取消狀態。

              Cursor   集成在holokit中的光標,集成了Cursor類中的四種不同的光標狀態。

              BasicCursor 是集成在holokit中最基本的光標,他是藍色的。

              CursorWithFeedback 一個自帶反饋的光標,也就是說他可以反饋當前物體的各種狀態,例如旋轉狀態的時候是一個旋轉的光標。

2.     FPSDisplay:是一個反饋當前場景的FPS值的預製體。   畫面每秒傳輸的幀數

3.    HoloLensCamera:一個已經集成好的hololens相機。這個相機自帶一個用於控制鏡頭運動的腳本。

4.    inputManager:是一個集成了凝視,手勢輸入,穩定相機抖動,手勢管理的預製體。

5.    Directional Light:是一個集成了通用環境下的hololens適用的燈光系統。

6.    InputManager:輸入管理的類,下面解析他裏面腳本的用法,首先是

           GazeManager:他的作用是凝視的經理, 管理着與其他物體相互作用的凝視光線。

                 Singleton是一個全局管理的單例,如果你在holok上快速開發你的項目,這是一個很好的捷徑,他已經規避了很多的風險,但是還是要謹慎的使用。

                 IsGazingAtObject是一個bool值,你可以通過判斷這個值的true或者false來決定當前是否凝視在某個物體上。

                 HitInfo 是公用的射線,這是一個很重要的屬性,通過外部用RaycastHit m_ray = hitInfo;這種方式來鏈接這個射線。                       HitObject這是當前凝視的對象,你可以判斷這個值是否爲null來做一些很必要的操作。

                 HitPosition凝視的位置。

                 GazeOrigin凝視的來源。

                 GazeNormal正常凝視的時候。

                 MaxGazeCollisionDistance凝視與物體接觸的最大距離,這個值是10,再大的值沒有經過測量。

                 RaycastLayerMasks層?Yes,No()=>Yes。Stabilizer當前一個固定的方法(A),用於消除凝視射線產生的數據 這個方法其實是手勢的處理。如果這裏不做處理,就不會根據碰撞或者觸發來判斷,如果當前是離開的話,就不會執行這個A方法。                   GazeTransform當前凝視的來源和位置,默認是相機發出來的。

                  FocusedObjectChanged當焦點一直處於某個對象或者更換了對象之後。

                  raycastResultList一個射線的集合。

                  UnityUIPointerEvent UI指針事件,如果你沒有調用他,it isNull;在他的實現方法中,所有的凝視都是實時更新的,而且要處理UI層,以及當前凝視物體的狀態和物體的更新。

               GazeStabilizer :一個穩固凝視放置光標抖動的類。他的功能大概就是如此。



二、unity 中HoloTookit 的接口

IFocusable 凝視(進入和退出)類似鼠標的OnMouseEnter和Exit

IHoldHandler  (一個保持手勢)比如說一直抓着。他是wins的持有手勢。當你開始抓的時候,正在抓的時候,抓完了,抓的過程中掉了

IInputClickHandler(點擊手勢)所有的點功能都在這裏面實現,類似click

INavigationHandler(導航手勢)這裏的導航手勢是用於旋轉或者物體移動狀態改變的

IInputHandler(輸入手勢)類似鍵盤的按下 擡起 點擊 

IInputSource (輸入源)當檢測到的時候 當丟失的時候,比如說,當你的手舉起來的時候hololens檢測到了你的手,當你吧手垂下的時候hololens丟     失了你的手

IManipulationHandler  (操作手勢)這個手勢一般是移動物體或者改變他的移動狀態的

ISpeechHandler(語音)如果你要實現語音。so->this

ISourceStateHandler(輸入源狀態)

在這裏holokit給我們提供了一個腳本叫做 HandDraggable 他能夠實現拖拽的功能。或許你有時候只需要對她稍微修改,他就可以實現你想要的功能。

 

二、unity 中HoloTookit 的腳本  詳解:https://blog.csdn.net/wdmzjzlym/article/details/53812615

這個文件夾下包含了很多通用的腳本,這裏試試大概說明其功能,具體的參數需要自己翻譯。

Billboard 讓一個物體總是面對着攝像頭。

interPolationUtilities 有一些插值相關的靜態方法

interpolator 提供了一些移動 旋轉 縮放的差值。他的用法會在後面的空間聲音詳細說道。

NearPlaneFade 他會根據和相機的位置進行顯示或者隱藏(差值型的)

SimpleTagalong 讓某個物體和相機保持固定的距離。

Singleton 一個單例,適用於全局。

SphereBasedTagalong 讓一個球一直跟隨你,但他始終面想你,你可以根據他來實現開始界面的菜單跟隨功能。

Tagalong 讓一個物體在相機的範圍內一直不變。他加上Billboard可以實現開始界面的菜單跟隨功能。

WorldAnchorManager 一個空間錨管理類。在空間錨部分會詳細的說明。

Timer 一個時間管理類,注重於流程的控制吧

TextToSpeechManager 文字播放類

三、詳細解析:

1:Billboard.cs 可以讓一個全息物體總是面對着攝像頭。

  (該腳本配合Tagalong.cs可以實現Hololens主菜單效果,即平滑追蹤+始終面對功能)

      參數:

               PivotAxis:旋轉中心軸。參數:free(default):物體每個軸都可以自由旋轉;Y:物體只繞着Y軸旋轉(即左右轉頭物體會面向你,上下轉頭        物體不會面向你)。

2:DirectionIndicator.cs 方向指示腳本,讓一個方向指示器始終指向該腳本上的對象。

     參數:

             Cursor:該物體在場景中被當作光標,方向指示器會顯示在這個物體旁邊。

             DirectionIndicatorObject:方向指示器物體,該物體會一直指向附加該腳本的對象。對象可以是2D或者3D。

             DirectionIndicatorColor:方向指示器的顏色(方向指示器材質裏的Shader必須要有“_TintColor”屬性,否則顏色不會變)

             VisibilitySafeFactor: 範圍[-0.3,0.3] ,當物體在攝像機視錐的某個百分比範圍中,方向指示器纔會顯示。(例如此值爲0時,當物體完全離開        攝像機視錐之後方向指示器纔會顯示;此值爲0.1時,物體在視錐範圍的90%之外,方向指示器纔會顯示;此值爲-0.1時,物體在視錐範圍的110%        之 ,方向指示器纔會顯示)

             MetersFromCursor:方向指示器從原中心到它面向方向(forward)的一個偏移值。

 3:FixedAngularSize.cs 讓一個物體在攝像機裏的大小始終不變。

        (該腳本無視物體和攝像機之間的距離,只要在攝像機視錐範圍中,它的大小比例始終相同)  

         參數:

          SizeRatio:比例值,該值爲0時,此腳本不起作用。增大該值後,物體在攝像機內的比例會增大,推薦值0.1左右。

4:FpsDisplay.cs 輔助顯示當前場景的FPS值。

       (推薦直接使用Prefabs文件夾下的FPSDisplay,裏邊已經集成好相應的字體和顯示方式)  

         參數:

          Frame Range:計算FPS值的平均幀數,不可小於1。(例如此值爲10時,會統計10幀的FPS值,然後顯示10幀的平均數)

5:HeadsUpDirectionIndicator.cs在攝像機裏顯示一個指針,該指針會始終指向某個物體。

       (該腳本功能和DirectionIndicator.cs相近。推薦直接使用Prefabs文件夾下的HeadsUpDirectionIndicator預製體,指針模型均已集成好)  

         參數:  

        TargetObject:指針指向的物體對象。

        Depth:指針物體的深度值,該值越大,指針越小。

        Pivot:對象位置中心點的偏移位置,推薦設置爲(0,0.5,0)。

        PointerPrefab:指針物體。

        IndicatorMarginPercent:目標物體在視距內的某個百分比時,指針會自動到達中心。

        DebugDrawPointerOrientationPlanes:在Scene面板繪製指針到目標物體間的某些線? 

 

6:InterPolationUtilities.cs 存儲了一些和插值相關的靜態方法。

7:Interpolator.cs 對物體的Position、Transfrom和Scale進行插值。

 

8:NearPlaneFade.cs 讓物體根據它和攝像機的相對位置漸隱或者漸顯。    

 

9:PriorityQueue.cs 輔助類,貌似低優先級的對象將會首先在隊列中刪除。(待研究~~)

 

10:SimpleTagalong.cs 讓一個物體始終和攝像機保持固定的距離。

    (該腳本無視物體和攝像機之間的距離,只要在攝像機視錐範圍中,它的大小比例始終相同)  

      參數:  

      TagalongDistance:物體和攝像機之間的固定距離。

      EnforceDistance:讓物體始終跟隨相機,即時物體不必再進行移動。

      PositionUpdateSpeed:物體更新速率(以 米/秒爲單位)。

      SmoothMotion:物體是否平滑移動。

      SmoothingFactor:平滑因子,僅當SmoothMotion爲true時有效。

 

11:Singleton.cs 單例基類,遵循單例設計原則,每個繼承它的腳本應當只有一個實例(Instance)。    

 

12:SphereBasedTagalong.cs 讓一個物體始終和攝像機保持固定的距離,該物體處於一個球體半徑範圍內。

   (該腳本是性能最好的跟隨腳本,佔用資源最少)  

      參數:   

      SphereRadius:球體半徑。

      MoveSpeed:物體跟隨攝像機的速度。

      DebugDisplaySphere:在Scene面板顯示球體的線框。

      DebugDisplayTargetPosition:在Scene面板顯示目標位置。  

 

13:Tagalong.cs 讓一個物體在攝像機裏的大小始終不變。

    (該腳本無視物體和攝像機之間的距離,只要在攝像機視錐範圍中,它的大小比例始終相同)  

     參數:

      SizeRatio:比例值,該值爲0時,此腳本不起作用。增大該值後,物體在攝像機內的比例會增大,推薦值0.1左右。

14:TextToSpeechManager.cs 文字語音播放管理類  

       (該腳本利用帶Win10裏的語音庫Media.SpeechSynthesis,可以將文本或者SSML協議文檔的內容轉換成語音輸出,目前Hololens只支持其語音庫下的MSTTS_V110_enUS_MarkM、MSTTS_V110_enUS_ZiraFM和MSTTS_V110_enUS_DavidM三種英文庫,中文庫目前無法導入。)  

     參數:

      audioSource:語音播放控件,此處必須要添加已有的Audio Source控件,否則無法播放。

      voice:語音選項,可選默認、David、Zira以及Mark這幾種類型。

      用法:

              創建一個新物體,在上邊添加Audio Source組件以及TextToSpeechManager.cs腳本,將Audio Source組件拖到TextToSpeechManager.cs裏的audioSource上,voice隨       意選擇即可。之後再新物體上新添加一個聲音控制腳本,如下以SpeechTest.cs爲例:

 public class SpeechTest: MonoBehaviour
{
     //將TextToSpeechManager拖到這裏
      public TextToSpeechManager TextToSpeech;
      Void Start()
       {
         if (TextToSpeech != null)
            {              
                var voiceName = Enum.GetName(typeof(TextToSpeechVoice), TextToSpeech.Voice);
 
             
                var msg = string.Format("The Windows Device Portal for HoloLens lets you configure and manage your device", voiceName);
             
                
                TextToSpeech.SpeakText(msg);
            }
       }
}

15:Timer.cs和TimerScheduler.cs 定時器

    (定義時間分配,有點類似Unity裏的Invoke方法)  

      用法:

       此類用起來很簡單,如下所示:

    private Timer timer;
 
    // Use this for initialization
    void Start () 
   {
        timer = new Timer(1);
        float durationInSec = 5.5f;
        Timer.Start(durationInSec, TimerCallback);
    }
 
    private void TimerCallback()
    {
       //add something here
    }
 
    private void CallMethodAtNextFrame()
    {
        Timer.StartNextFrame(TimerCallback);
    }
 
    private void StopTimer()
    {
      timer.Stop();
     }

   
16:WorldAnchorManager.cs 空間錨管理類。

     用法:

     1:創建一個空物體,命名爲Manager,將WorldAnchorManager.cs附加到此物體上。

     2:當要給一個物體創建空間錨點時,調用anchorManager.AttachAnchor(this.gameObject, SavedAnchorName)方法,其中SavedAnchorName是識別空間錨物體對象的唯 一Name,不可重複。

     3:刪除空間錨點時,調用 anchorManager.RemoveAnchor(gameObject)方法即可

     4:如果要給一個物體添加錨點時,它上邊已存在創建過的錨點,需要先刪除原來的,再添加,否則創建不會成功。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章