Как разместить префаб, а затем удалить его голосом, если посмотреть на
Пользователь может размещать объекты (префабы) во время выполнения, используя руки / взгляд. Голосовая команда "Удалить" должна удалить текущий сфокусированный (просмотренный) объект.
Подключение событий на сборном не будет работать, так как ссылки находятся на сцене.
0 ответов
Я проработал это на GitHub и разместил здесь, чтобы мы могли удалить его из других источников.
Я еще не занимался голосовым вводом, так как я еще не участвую в собственном проекте MRTK.
Эта заявка должна охватывать этот ответ для MRTK версии RC1. Это была быстрая работа, чтобы показать доказательство концепции - не стесняйтесь изменять и продолжать, но я не буду:)
Для размещения во время выполнения вам просто нужно добавить метод для создания экземпляра объекта, который содержит всю информацию, которую я установил в этом примере. В канале GitHub были и другие решения, я скопировал ссылки ниже (не уверен, как долго они будут активны). В этом примере предполагается, что у вас уже есть своего рода префаб по умолчанию с частью интерактивного класса MRTK.
Другие обсуждения на GitHub от Microsoft: 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 Mixed Reality Toolkit, которые могут помочь вам в поиске дополнительных функций: 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;
}
Функция "Удалить объект" подключается к глобальной речевой команде "Удалить" в компоненте "Обработчик речевого ввода". Он просто удаляет "focussedObject" внутри GameManager.