用户可以在运行时使用手/凝视放置对象(预制件)。语音命令“删除”应该删除当前聚焦(查看)的对象。
我尝试实例化对象并添加 Intractable 脚本。但我被困在运行时添加 OnfocusEnter 和 OnfocusExit 事件。
由于参考在场景中,因此在预制件上连接事件将不起作用。
我在 GitHub 上解决了这个问题并将其发布在这里,以便我们可以从其他来源中删除它。
我还没有处理语音输入,因为我还没有参与我自己的 MRTK 项目。
此提交应涵盖版本 RC1 下 MRTK 的此答案。这是一个快速的工作,只是为了展示概念证明 - 随意修改并继续它,但我不会:)
对于运行时放置,您只需要添加一个方法来实例化一个包含我在此示例中设置的所有信息的对象。GitHub 频道中还有其他一些解决方案,我复制了下面的链接(不确定它们会激活多长时间)。此示例假设您有某种已经默认的预制件,其中包含 MRTK 可交互类部分。
微软在 GitHub 上的其他讨论:https ://github.com/microsoft/MixedRealityToolkit-Unity/issues/4456
示例视频在这里:https ://www.youtube.com/watch?v=47OExTOOuyU&feature=youtu.be
示例 Unity 包在这里:https ://github.com/JShull/MRTKExamples
根据@jShull 的回答,我想出了一个简单的解决方案来满足我的需要。由于没有针对焦点事件的全局监听器,我基本上自己制作了。
我还添加了与混合现实工具包的两位 Microsoft 开发人员的较早讨论(在我在这里发布问题之前),这可以帮助您寻找更多功能:https ://github.com/microsoft/MixedRealityToolkit-Unity/issues /4456
“对象”脚本是需要删除或与之交互的对象的组件。
using Microsoft.MixedReality.Toolkit.Input;
using UnityEngine;
public class Object: MonoBehaviour, IMixedRealityFocusHandler
{
public GameManager _gameManager;
public void OnFocusEnter(FocusEventData eventData)
{
Debug.Log("Focus ON: " + gameObject);
_gameManager.SetFocussedObject(gameObject);
}
public void OnFocusExit(FocusEventData eventData)
{
Debug.Log("Focus OFF: " + gameObject);
_gameManager.ResetFocussedObject();
}
}
设置focussedObject的“GameManager”脚本函数
public void SetFocussedObject(GameObject object)
{
focussedObject = object;
}
public void ResetFocussedObject()
{
focussedObject = null;
}
删除对象功能是连接到“语音输入处理程序”组件中的“删除”全局语音命令。它只是删除了 GameManager 中的“focussedObject”。