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

How to place a prefab and then remove it via voice when looked at

用户可以使用 hands/gaze 在运行时放置对象(预制件)。 语音命令“"Remove" 应该删除当前聚焦(查看)的对象。

我尝试实例化对象并添加棘手脚本。但我无法在运行时添加 OnfocusEnter 和 OnfocusExit 事件。

连接预制件上的事件将不起作用,因为引用在场景中。

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

我还没有解决语音输入问题,因为我还没有完成我自己的 MRTK 项目。

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

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

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

根据@jShull 的回答,我想出了一个简单的解决方案来满足我的需要。由于焦点事​​件没有全局监听器,我基本上是自己做的。

我还添加了一个较早的讨论(在我在这里发布问题之前)与混合现实工具包的两个 Microsoft 开发人员,这可以帮助您寻找更多功能:https://github.com/microsoft/MixedRealityToolkit-Unity/issues/4456

"Object" 作为对象组件的脚本,需要删除或与之交互。

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;
}

删除对象功能连接到 "Speech Input Handler" 组件中的 "Remove" 全局语音命令。它只是删除了 GameManager 中的 "focussedObject"。