1.资源导入
导入SteamVR
MRTK:Microsoft.MixedReality.Toolkit.Unity.Foundation.2.7.2.unitypackage
LeapMotion:Core.unitypackage
MRTK: Microsoft.MixedReality.Toolkit.Unity.Examples.2.7.2.unitypackage
解决报错:删除报错的代码
2.集成MRTK和LeapMotion
MixedReality->Toolkit->Utilityies->LeapMotion->IntegrateLeapMotionUnityModules
3.添加LeapMotion数据提供程序
3.1打开HandInteractionExamples场景->Hierarchy的MixedRealityToolkit身上的MixedRealityToolkit.cs右侧的Clone,克隆该脚本,然后Hierarchy的
MixedRealityToolkit身上的MixedRealityToolkit.cs上就是新克隆的,可更改
3.2Input-> Clone 自动改成新的Profile
InputDataProviders->AddDataProvider->Type->LeapMotionInput->LeapMotionDeviceManager
Clone->选择不同的模式:放在桌子上/头盔

4.安装
Leap_Motion_Installer_v4-2020-release-updates_public_win_x64_4.1.0+52211_ah1889.exe
5.应用
5.1近距离交互
ObjectManipulator.cs:
ManipulationType:单手、双手
AllowFarManipulation是否允许远距离
OneHandedManipulation 旋转模式
Constraints约束管理器 EnableConstraints使用约束管理器
ConstraintManager.cs约束管理器 可以添加约束条件
AutoConstraintSelection自动添加,选择之后约束脚本自动添加到物体上
ManualConstraintSelection手动
FixedRotationToWorldConstraint.cs HandType选择哪只手约束哪只手
Physics:物理效果,需要添加Rigidbody
ManipulationEvents 事件
NearInteractionGrabbable.cs
CursorContextObjectManipulator.cs 显示光标
5.2关闭跟随摄像机的显示面板
MixedRealityToolkit->Diagnostics->EnableDiagnosticsSystem去掉勾选
6.新建MRTK场景
6.1 MixedReality->Toolkit->Add to Scene and Configure
6.2 配置MixedRealityToolkit.cs 选择新建的
NewMixedRealityToolkitConfigurationProfile
ExperienceSettings -> TargetExperienceScale 可改Room/Standing
Camera->Clone->DisplaySettingsProviders->QualitySetting ->VeryHigh
6.3让物体可抓取、移动、旋转、缩放
添加ObjectManipulator.cs,自动添加约束管理器ConstraintManager.cs
Add Near Interaction Grabbable 允许近距离抓取
7.BoundsControl组件 根据boxcollider显示包围框 选中包围框上的点进行移动、缩放、旋转
TargetObject
Activation 什么情况下显示
BoundsOverride 把碰撞盒放进去
BoxPadding 修改显示框的大小
FlattenAxis 在指定轴对包围框挤压
UniformScaleOnFlattenedAxis 是否统一缩放
Visuals:
ScaleHandlesConfiguration:缩放操纵柄
LinksConfiguration 包围框点与点之间的连线
ShowWireframe是否显示这个连线
ProximityConfiguration手或者Point接触到物体时包围框的点的效果
ProximityEffectActive是否启用该效果
BoxConfiguration
8.缩放约束
ConstraintManager.cs -> Add Constraint to GameObject ->MinMaxScaleContraint
Relative To Initial State 勾选的话,每次缩放,以上次缩放的大小为基础,继续缩放,不勾选,以原始大小为基础进行缩放
9.PressableButton组件
PressableButtonHoloLens2.cs检测手,不能检测射线
PhysicalPressEventRouter.cs 检测Interactable.cs的事件
Interactable.cs检测射线、语音识别
General->SpeechCommand:在MixedRealityToolkit->Input->Speech->Clone->
Add a New Speech Command
Profiles
Events
OnClick仅支持远距离交互需要使用PhysicalPressEventRouter.cs,其他事件不影响
Receivers
ButtonConfigHelper.cs
OnClick与Interactable.cs的OnClick关联,删除就会一起删除
10.创建Theme与States
10.1创建Theme
Project面板Create->MixedReality=>Toolkit->Theme,将创建的State拖到Theme的States里面
在State里添加状态
将Theme拖动给物体Interactable General States
在物体里面编辑 ThemeRuntime ->InteractableScaleTheme Easing√
10.2创建State
Project面板Create->MixedReality=>Toolkit->State
11.Cube按钮
11.1 PressableButton近距离点击按钮
给物体Cube添加PressableButton.cs, Add NearInteractionTouchable component
MovingButtonVisuals 移动的按钮Cube托上去
双击Cube,
DistanceSpaceMode World 最远距离就是MaxPushDistance的位置
浅蓝 StartPushDistance控制,开始点击的动画距离
深蓝 MaxPushDistance控制,最大的移动距离
黄色PressDistance,执行Press事件的距离, DistanceSpaceMode Local模式
离StartPushDistance近才能触发,World模式远也能触发
11.2 Interactable.cs远距离 触发按钮
SpeechCommand添加一个语音关键词
Profiles
Traget 拖入Cube ,CreateandAssignNewTheme,ThemeRuntime选择
ScaleOffsetColorTheme,
远距离事件
Receivers ->AddEvent ->EventReceiverType ->InteractableOnPressReceiver,
InteractionFilter ->FarOnly
11.3 OnClick 远近距离都使用
删除之前添加的Press/Release上的声音事件
在Interactable的OnClick添加点击事件,此时,只是远距离可以触发。
添加PhysicalPressEventRouter.cs,将Cube拖入RoutingTarget,在
PressableButton.cs的Events添加事件,拖入Cube,
PhycalPressEventRouter.OnHandPressTouched/ PhycalPressEventRouter.OnHandPressUntouched/ PhycalPressEventRouter.OnHandPressTriggered/ PhycalPressEventRouter.OnHandPressCompleted
12.让TextMeshPro支持中文:
Window -> TextMeshPro -> FontAssetCreator
SourceFontFile拖入字体文件,字体文件不能包含中文
AtlasResolution 8192*8192
CharacterSet改为CharactersfromFile,拖入中文文本
GenerateFontAtlas
Save
将新生成的字体给TextMeshPro
13.和UGUI交互
将Canvas转为MRTK支持的
ConverttoMRTKCanvas
AddNearInteractionTouchableUnityUI
NearInteractionTouchableUnityUI -> EventsToReceive ->Pointer
14.跟随摄像机
跟随物体上添加FollowMeToggle.cs
15.TouchInteraction.cs
Cube:
HandInteractionTouchRotate.cs:将cube拖入TargetObjectTransform
NearInteractionTouchable.cs
16.PinchSlider:3D滑动
SliderTrack:SliderAxis轴向;SliderStartDistance起始点;SliderEndDistance终点
17.听写
DictationExample场景
在MixedRealityToolkit->Input中有WindowsDictationInput,添加
LeapMotionDeviceManger
运行,点击StartRecording,开始听写
DictationPanel->DictationHandler.cs->RecordingTime一次听写时间
连续听写:
RecordingTime 改为0,运行听写报错,通过报错位置,修改
WindowsDictationInputProvider.cs
Microphone.Start(deviceName, false, recordingTime, samplingRate)中的false改为true
RecordingTime改为非0.就会连续听写,但仍然手InitialSilenceTimeout和
AutiSilenceTimeout限制
事件触发:
OnDictationHypothesis 说话时一直触发
OnDictationResult说话停顿时触发
OnDictationComplete说话停止Timeout之后触发,Microphone.Start false才会执行?
OnDictationError
18.关闭/启用手射线、抓取、戳 功能
DisablePointersExample场景
将DefaultMixedRealityToolkitConfigurationProfile改成新建的
NewMixedRealityToolkitConfigurationProfile
Input添加LeapMotionDeviceManager
Interactable.cs Receivers OnSelect OnDeselect
19.物体跟随手指关节点
PointerResultExample场景
将DefaultMixedRealityToolkitConfigurationProfile改成新建的
NewMixedRealityToolkitConfigurationProfile
PointerHandler.cs OnPointerClicked
点击在面板上,生成方块
HandJointChaserExample场景
将DefaultMixedRealityToolkitConfigurationProfile改成新建的
NewMixedRealityToolkitConfigurationProfile
RightHandChasers-> IndexChasers/ MiddleChasers/ RingChasers/ PinkyChasers/
ThumbChasers/ OtherChasers下的子物体们的->SolverHandler.cs->
TrackedTargetType->HandJoint右手的
TrackedHandness ->Right
Left Hand Chasers左手的
物体跟随关节
20.TextToSpeechExamples场景
文本转语音
需要发布UniversalWindowsPlatform出来才行
21.滚动对象容器
ScrollingObjectCollection场景
换成NewMixedRealityToolkitConfigurationProfile
新建空对象GameObject,添加ScrollingObjectCollection.cs,
ScrollDirection设置上下还是左右滚动
Pagination设置CellsPerTier几行/TiersPerPage几列/PageCell模型大小
在GameObject自动生成Container和ClippingBounds, 在ClippingBounds范围内的渲染,其大小由PageCell控制
在Container创建滚动模型Cube,调整Cube位置,让ClippingBounds能包围Cube,共创建3个Cube,调整位置,Cube超出ClippingBounds自动隐藏
移除Cube的boxcollider
在GameObjec下创建空物体FrontPlate,添加Interactalbe.cs,
NearInteractionTouchable.cs,Boxcollider
NearInteractionTouchable.cs Fixed
Boxcollider拖动到NearInteractionTouchable.cs的TouchableCollider里面
调整FrontPlate Pos0.05 -0.05 0 大小0.1
Cube 用MixedRealityToolkit/Standard的shader的材质,移除Cube上的
MaterialInstance.cs,可以将超出部分的模型切割
GridObjectCollection.cs 改数据,需要点击下面的UpdateCollection才能生效
22.MRTK网址:
MRTK2-Unity 开发人员文档 - MRTK 2 | Microsoft Docs
下载包 包->MRTK包->资产包->GitHub
注意MRTK与LeapMotion的版本对应:支持的设备概述
23.运行出现HTC的提示框,是因为Input的兼容问题,将ProjectSettings->Player->ActiveInputHandling改为Toth;SteamVR的动作没有写入json
Edit->ProjectSettings->Player->ActiveInputHandling->Both,
Window->Steam VR Input ->Save and generate
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
了解Rails缓存如何工作的人可以真正帮助我。这是嵌套在Rails::Initializer.runblock中的代码:config.after_initializedoSomeClass.const_set'SOME_CONST','SOME_VAL'end现在,如果我运行script/server并发出请求,一切都很好。然而,在我的Rails应用程序的第二个请求中,一切都因单元化常量错误而变得糟糕。在生产模式下,我可以成功发出第二个请求,这意味着常量仍然存在。我已通过将以上内容更改为以下内容来解决问题:config.after_initializedorequire'some_cl
我有一个使用PDFKit呈现网页的pdf版本的Rails应用程序。我使用Thin作为开发服务器。问题是当我处于开发模式时。当我使用“bundleexecrailss”启动我的服务器并尝试呈现任何PDF时,整个过程会陷入僵局,因为当您呈现PDF时,会向服务器请求一些额外的资源,如图像和css,看起来只有一个线程.如何配置Rails开发服务器以运行多个工作线程?非常感谢。 最佳答案 我找到的最简单的解决方案是unicorn.geminstallunicorn创建一个unicorn.conf:worker_processes3然后使用它: