我试图找到一个配置,或者确定我需要对MRTK v2.1进行哪些附加操作,才能像以前的工作流程一样在“编辑器”工作中对HL1进行测试。简化了,它是像在MRTK v2之前一样使用Gaze和鼠标的功能。
我还没有找到一种方法来映射配置文件中的鼠标左键,使其表现出与可见手相同的行为。用可见的手按下鼠标左键即可进行操作。我们只是需要凝视它。注意:将“手部模拟”更改为手势不会产生正确的行为,只会使凝视光标持续存在而没有交互。
我在很多地方都问过这个问题,而且常常被误解,所以这里有一些背景知识。我们将继续为需要严格质量检查的客户提供应用程序。必须像使用新的MRTK一样对它们进行测试。让我们的QA团队在HL1项目上使用明确的手是不合理的,因为它会引入人为错误,这对错误测试不利。
需求是: 1.将光标保留在编辑器中。 (在最新版本中,通过空格键使用指针后,它消失了。)在我们看来,这应该是一个切换。是的,我们知道您可以按“ 1”来模拟选择,但是如上所述,对于正确的质量检查来说,这是不可接受的。 2.不用鼠标左键,触发“选择”和“捏”。我已经编写了一个服务扩展程序来处理“选择”,但是事实证明,与“手动”发音相关联的捏合是一个挑战。
到目前为止建议的解决方案:将“手部模拟”模式更改为“手势”。不幸的是,Gestures消除了用双手进行HL2测试的能力,并且不向鼠标左键提供“选择”或“捏”行为。因此,它要么无法正常工作,要么没有正确的解决方案。
我们看不到无法在编辑器中同时测试HL1和HL2的原因。不使用手时,我们只是缺少使用鼠标左键。
这是我为鼠标左键创建的服务扩展,用于发送“选择”事件。这将在“难处理”上触发OnClick()事件。它还缺少用鼠标左键移动或操纵“操纵处理程序”的“捏”功能。
[MixedRealityDataProvider(
typeof(IMixedRealityInputSystem),
(SupportedPlatforms)(-1), // All platforms supported by Unity
"Unity Mouse Device Manager")]
public class TharynMouseService : BaseInputDeviceManager, ITharynMouseService
{
private TharynMouseServiceProfile tharynMouseServiceProfile;
public TharynMouseService(
IMixedRealityServiceRegistrar registrar,
IMixedRealityInputSystem inputSystem,
string name,
uint priority,
BaseMixedRealityProfile profile) : base(registrar, inputSystem, name, priority, profile)
{
tharynMouseServiceProfile = (TharynMouseServiceProfile)profile;
}
private IMixedRealityInputSource inputSource;
private IMixedRealityInputSystem inputSystem;
public override void Initialize()
{
// Do service initialization here.
inputSystem = Service as IMixedRealityInputSystem;
Debug.Log("inputSystem: " + inputSystem);
inputSource = inputSystem.RequestNewGenericInputSource("Tharyn Mouse Service");
Debug.Log("inputSource: " + inputSource);
inputSystem.RaiseSourceDetected(inputSource);
}
public override void Update()
{
// Do service updates here.
if (UnityEngine.Input.GetKeyDown(KeyCode.Mouse0))
{
inputSystem.RaiseOnInputUp(inputSource, Handedness.None, tharynMouseServiceProfile.TapAction);
Debug.Log("Down");
Debug.Log("inputSystem: " + inputSystem);
Debug.Log("inputSource: " + inputSource);
Debug.Log("TapAction: " + tharynMouseServiceProfile.TapAction);
}
}
}
需要:
预先加油,谢谢!
Tharyn
答案 0 :(得分:0)
通过创建一个向MRTK输入系统调用OnInputDown和OnInputUp事件的组件,您可以仅使用鼠标+光标即可实现模拟捏手,释放手事件的功能。然后,您需要将此组件附加到场景中的游戏对象上。
模拟OnInputDown和OnInputUp事件的关键代码如下:
public void Update()
{
if (Input.GetMouseButtonDown(0))
{
InputSystem?.RaiseOnInputDown(
InputSource,
Handedness.Right,
selectAction
);
}
if (Input.GetMouseButtonUp(0))
{
InputSystem?.RaiseOnInputUp(
InputSource,
Handedness.Right,
selectAction
);
}
}
这是组件的完整代码,它将引发输入向下和向上事件,使您可以仅使用鼠标来模拟捏合和拖动+移动:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using Microsoft.MixedReality.Toolkit.Input;
using Microsoft.MixedReality.Toolkit;
using Microsoft.MixedReality.Toolkit.Utilities;
public class SimulateSelectOnClick : MonoBehaviour
{
private IMixedRealityInputSystem inputSystem = null;
protected IMixedRealityInputSystem InputSystem
{
get
{
if (inputSystem == null)
{
MixedRealityServiceRegistry.TryGetService<IMixedRealityInputSystem>(out inputSystem);
}
return inputSystem;
}
}
private IMixedRealityInputSource inputSource;
private MixedRealityInputAction selectAction;
private IMixedRealityInputSource InputSource
{
get
{
if (inputSource != null)
{
return inputSource;
}
inputSource = new BaseGenericInputSource("SimulateSelect",
new IMixedRealityPointer[] { InputSystem.GazeProvider.GazePointer }, InputSourceType.Hand) ;
return inputSource;
}
}
public void Start()
{
var inputActions = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions;
selectAction = new MixedRealityInputAction();
for (int i = 0; i < inputActions.Length; i++)
{
if (inputActions[i].Description.Equals("select", StringComparison.CurrentCultureIgnoreCase))
{
selectAction = inputActions[i];
}
}
}
public void Update()
{
if (Input.GetMouseButtonDown(0))
{
InputSystem?.RaiseOnInputDown(
InputSource,
Handedness.Right,
selectAction
);
}
if (Input.GetMouseButtonUp(0))
{
InputSystem?.RaiseOnInputUp(
InputSource,
Handedness.Right,
selectAction
);
}
}
}