Отключение компонентов решателя MRTK из скрипта

В настоящее время я пытаюсь воспроизвести старую функцию «Коснитесь, чтобы разместить» из HoloToolKit, и это работает нормально. На игровом объекте у меня есть:

-Близкое взаимодействие с захватом

-Обработчик манипуляции

-Сценарий для применения / уничтожения решателя поверхностного магнетизма

-Сценарий изменения слоя игрового объекта.

Вот как это работает сейчас:

1) Создать объект с помощью кнопки (Воздушный кран)

2) Нажмите и удерживайте, чтобы схватить объект

3) В событиях обработчика манипуляций у меня установлено «On Manipulation Started» для вызова сценария изменения слоя для перемещения объекта на слой «Ignore raycast», а затем применить решатель поверхностного магнетизма.

4) Переместите объект, чтобы разместить его на земле / стене / столе / и т. Д.

5) Отпустите, и событие «On Manipulation Ended» вызовет сценарий поверхностного магнетизма для уничтожения решателя, затем вызовет сценарий изменения слоя, чтобы вернуть его в состояние по умолчанию, чтобы его можно было захватить и снова переместить.

Для демонстрации, которую я делаю, я также хочу иметь возможность вращать объект после того, как поместил его в мир, поэтому я пытался использовать служебную программу Bounding Box, настроенную просто так, чтобы разрешить вращение вокруг оси y. С этим прикрепленным прямо сейчас вышеупомянутый "вид" работает, но он очень нервный и иногда заканчивается тем, что объект находится не в нужном месте. Я не могу настроить слой ограничивающей рамки так, чтобы он игнорировал 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 в System.


person ElderCrain    schedule 01.11.2019    source источник


Ответы (1)


Решение было встроено в обработчик манипуляции.

В разделе событий вы можете просто выбрать скрипт BoundingBox, и там есть опция «bool enabled».

Сценарий не нужен.

person ElderCrain    schedule 01.11.2019
comment
Привет, я немного запутался, но вы все еще искали ответ, или это ответ на ваш собственный вопрос? - person Julia Schwarz; 02.11.2019
comment
Это ответ на мой собственный вопрос. Я понял это через несколько минут после публикации исходного вопроса. - person ElderCrain; 03.11.2019