观看时如何放置预制件,然后通过语音将其移除

时间:2019-05-31 10:07:55

标签: c# unity3d mrtk

用户可以在运行时用手/注视放置对象(预制件)。 语音命令““删除”(Remove)”应删除当前聚焦(注视)的对象。

在现场预制事件的预告片将无法正常工作,因为引用在现场。

2 个答案:

答案 0 :(得分:1)

我在GitHub上解决了这个问题,并将其发布在这里,以便我们可以将其从其他来源中删除。

我还没有处理语音输入,因为我还没有参与自己的MRTK项目。

此提交应涵盖RC1版下针对MRTK的答案。只是为了展示概念证明,这是一项快速的工作-随时进行修改并继续进行,但我不会:)

对于运行时放置,您只需添加一个方法来实例化一个对象,该对象包含我在此示例中设置的所有信息。 GitHub频道中还有一些其他解决方案,我已复制了以下链接(不确定它们将处于激活状态的时间)。此示例假设您拥有某种已经具有MRTK可交互类部分的默认预制件。

Microsoft在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

答案 1 :(得分:0)

基于@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();
    }
}

“ GameManager”脚本函数,用于设置focussedObject

public void SetFocussedObject(GameObject object)
{
    focussedObject = object;
}

public void ResetFocussedObject()
{
    focussedObject = null;
}

“删除对象”功能连接到“语音输入处理程序”组件中的“删除”全局语音命令。它只是删除了GameManager内部的“ focussedObject”。