浅析Hololens HoloToolkit中Utilities下通用脚本的用法

来源:互联网 发布:淘宝立体服装拍摄姿势 编辑:程序博客网 时间:2024/06/08 02:42

1Billboard.cs 可以让一个全息物体总是面对着摄像头。

  (该脚本配合Tagalong.cs可以实现Hololens主菜单效果,即平滑追踪+始终面对功能)

      参数:

               PivotAxis:旋转中心轴。参数:free(default):物体每个轴都可以自由旋转;Y:物体只绕着Y轴旋转(即左右转头物体会面向你,上下转头        物体不会面向你)。

2DirectionIndicator.cs 方向指示脚本,让一个方向指示器始终指向该脚本上的对象。

     参数:

             Cursor:该物体在场景中被当作光标,方向指示器会显示在这个物体旁边。

             DirectionIndicatorObject:方向指示器物体,该物体会一直指向附加该脚本的对象。对象可以是2D或者3D。

             DirectionIndicatorColor:方向指示器的颜色(方向指示器材质里的Shader必须要有“_TintColor”属性,否则颜色不会变)

             VisibilitySafeFactor: 范围[-0.3,0.3] ,当物体在摄像机视锥的某个百分比范围中,方向指示器才会显示。(例如此值为0时,当物体完全离开        摄像机视锥之后方向指示器才会显示;此值为0.1时,物体在视锥范围的90%之外,方向指示器才会显示;此值为-0.1时,物体在视锥范围的110%        之 ,方向指示器才会显示)

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


 3FixedAngularSize.cs 让一个物体在摄像机里的大小始终不变。

        (该脚本无视物体和摄像机之间的距离,只要在摄像机视锥范围中,它的大小比例始终相同)  

         参数:

          SizeRatio:比例值,该值为0时,此脚本不起作用。增大该值后,物体在摄像机内的比例会增大,推荐值0.1左右。


4FpsDisplay.cs 辅助显示当前场景的FPS值。

       (推荐直接使用Prefabs文件夹下的FPSDisplay,里边已经集成好相应的字体和显示方式)  

         参数:

          Frame Range:计算FPS值的平均帧数,不可小于1。(例如此值为10时,会统计10帧的FPS值,然后显示10帧的平均数)


5HeadsUpDirectionIndicator.cs在摄像机里显示一个指针,该指针会始终指向某个物体。

       (该脚本功能和DirectionIndicator.cs相近。推荐直接使用Prefabs文件夹下的HeadsUpDirectionIndicator预制体,指针模型均已集成好)  

         参数:  

        TargetObject:指针指向的物体对象。

        Depth:指针物体的深度值,该值越大,指针越小。

        Pivot:对象位置中心点的偏移位置,推荐设置为(0,0.5,0)。

        PointerPrefab:指针物体。

        IndicatorMarginPercent:目标物体在视距内的某个百分比时,指针会自动到达中心。

        DebugDrawPointerOrientationPlanes:Scene面板绘制指针到目标物体间的某些线? 

 

6InterPolationUtilities.cs 存储了一些和插值相关的静态方法。


7Interpolator.cs 对物体的PositionTransfromScale进行插值。

 

8NearPlaneFade.cs 让物体根据它和摄像机的相对位置渐隐或者渐显    

 

9PriorityQueue.cs 辅助类,貌似低优先级的对象将会首先在队列中删除。(待研究~~)

 

10SimpleTagalong.cs 让一个物体始终和摄像机保持固定的距离。

    (该脚本无视物体和摄像机之间的距离,只要在摄像机视锥范围中,它的大小比例始终相同)  

      参数:  

      TagalongDistance:物体和摄像机之间的固定距离。

      EnforceDistance:让物体始终跟随相机,即时物体不必再进行移动。

      PositionUpdateSpeed:物体更新速率(以 /秒为单位)。

      SmoothMotion:物体是否平滑移动。

      SmoothingFactor:平滑因子,仅当SmoothMotiontrue时有效。

 

11Singleton.cs 单例基类,遵循单例设计原则,每个继承它的脚本应当只有一个实例(Instance    

 

12SphereBasedTagalong.cs 让一个物体始终和摄像机保持固定的距离,该物体处于一个球体半径范围内。

   (该脚本是性能最好的跟随脚本,占用资源最少)  

      参数:   

      SphereRadius:球体半径。

      MoveSpeed:物体跟随摄像机的速度。

      DebugDisplaySphere:Scene面板显示球体的线框。

      DebugDisplayTargetPosition:Scene面板显示目标位置。  

 

13Tagalong.cs 让一个物体在摄像机里的大小始终不变。

    (该脚本无视物体和摄像机之间的距离,只要在摄像机视锥范围中,它的大小比例始终相同)  

     参数:

      SizeRatio:比例值,该值为0时,此脚本不起作用。增大该值后,物体在摄像机内的比例会增大,推荐值0.1左右。


14TextToSpeechManager.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为例:

[csharp] view plain copy
  1. public class SpeechTest: MonoBehaviour  
  2.   
  3.     //将TextToSpeechManager拖到这里  
  4.      public TextToSpeechManager TextToSpeech;  
  5.      Void Start()  
  6.       {  
  7.         if (TextToSpeech != null)  
  8.            {                
  9.                var voiceName = Enum.GetName(typeof(TextToSpeechVoice), TextToSpeech.Voice);  
  10.   
  11.               
  12.                var msg = string.Format("The Windows Device Portal for HoloLens lets you configure and manage your device", voiceName);  
  13.               
  14.                  
  15.                TextToSpeech.SpeakText(msg);  
  16.            }  
  17.       }  

15Timer.csTimerScheduler.cs 定时器

    (定义时间分配,有点类似Unity里的Invoke方法)  

      用法:

       此类用起来很简单,如下所示:

[csharp] view plain copy
  1. private Timer timer;  
[csharp] view plain copy
  1. // Use this for initialization  
  2. void Start ()   
[csharp] view plain copy
  1. {  
  2.      timer = new Timer(1);  
  3.      float durationInSec = 5.5f;  
  4.      Timer.Start(durationInSec, TimerCallback);  
  5.  }  
[csharp] view plain copy
  1. private void TimerCallback()  
  2. {  
  3.    //add something here  
  4. }  
  5.   
  6. private void CallMethodAtNextFrame()  
  7. {  
  8.     Timer.StartNextFrame(TimerCallback);  
  9. }  
  10.   
  11. private void StopTimer()  
  12. {  
  13.   timer.Stop();  
  14.  }  


16WorldAnchorManager.cs 空间锚管理类。

     用法:

     1:创建一个空物体,命名为Manager,将WorldAnchorManager.cs附加到此物体上。

     2:当要给一个物体创建空间锚点时,调用anchorManager.AttachAnchor(this.gameObject, SavedAnchorName)方法,其中SavedAnchorName是识别空间锚物体对象的唯 一Name,不可重复。

     3:删除空间锚点时,调用 anchorManager.RemoveAnchor(gameObject)方法即可

     4:如果要给一个物体添加锚点时,它上边已存在创建过的锚点,需要先删除原来的,再添加,否则创建不会成功。


原创粉丝点击