如何放置预制件,然后在观看时通过语音将其移除
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"。
用户可以使用 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"。