В настоящее время я пытаюсь скопировать старую функциональность «Tap to place» из HoloToolKit, и это работает нормально. На игровом объекте у меня есть:
-Near Interaction Grabbable
-Manipulation Handler
-Сценарий для применения / уничтожения решателя поверхностного магнетизма
-Aскрипт для изменения слоя игрового объекта.
Как это работает прямо сейчас:
1) Создание объекта с помощью кнопки (воздушный кран)
2) Нажмите и удерживайте, чтобы захватить объект
3) В обработчике событий манипуляции я установил «При манипулировании запущен», чтобы вызвать скрипт смены слоя, чтобы переместить объект в слой «Игнорировать лучевую передачу», а затем применить решатель поверхностного магнетизма.
4) Переместите объект, чтобы поместить его на землю / стену / стол / и т. Д.
5) Отпустите, и событие «On Manipulation Ended» вызывает сценарий поверхностного магнетизма для уничтожения объекта. решатель, затем вызывает сценарий изменения слоя, чтобы установить его обратно по умолчанию, чтобы его можно было снова захватить и переместить.
Для демонстрации, которую я делаю, я также хочу иметь возможность вращать объект после помещения его в мир, поэтому я пытался использовать утилиту Bounding Box, чтобы просто разрешить вращение вокругось уС этим приложением прямо сейчас вышеупомянутая «своего рода» работает, но она очень нервная и иногда заканчивается тем, что объект находится не в нужном месте. Я не могу настроить слой ограничивающего прямоугольника так, чтобы он игнорировал raycast для репликации вышеуказанного метода, поэтому я хочу просто отключить его во время манипуляций. Это также помогло бы с другими аспектами, так как уничтожение решателя, похоже, в конечном итоге мешает с преобразованием, и после нескольких повторных перемещений он перестает распознавать тестовую местность в моей сцене. Я думаю, что это потому, что преобразования становятся вялыми, но я не уверен.
Я пытался написать скрипт с использованием GameObject.GetComponent, но он не распознает скрипт. Я даже пытался создать открытые поля, чтобы я мог просто перетащить целевой компонент, но VS тоже не нравится.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ComponentOnOff : MonoBehaviour
{
public Component TargetComp;
public GameObject TargetObject;
// Start is called before the first frame update
public void ComponentOff()
{
TargetObject.GetComponent(TargetComp).enabled = false;
}
}
Эта итерация содержит ошибку: Невозможно преобразовать UnityEngine.Component в систему.