Отключение компонентов решателя MRTK из скрипта - PullRequest
0 голосов
/ 01 ноября 2019

В настоящее время я пытаюсь скопировать старую функциональность «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 в систему.

1 Ответ

0 голосов
/ 02 ноября 2019

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

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

Сценарий не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...