本系列文章由CSDN@萌萌的一天 出品,未经博主允许不得转载。
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:如果要给一个物体添加锚点时,它上边已存在创建过的锚点,需要先删除原来的,再添加,否则创建不会成功。