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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值