从脚本中禁用 MRTK 求解器组件

Disabling MRTK solver components from script

我目前正在尝试从 HoloToolKit 复制旧的 "Tap to place" 功能,并且工作正常。在我的游戏对象上:

-接近交互可抓取

-操作处理程序

-apply/destroy 表面磁解算器

的脚本

-改变游戏对象图层的脚本。

它现在的工作方式是:

1) 使用按钮生成对象(隔空敲击)

2) 点击并按住以抓取对象

3) 在操作处理程序事件中,我将 "On Manipulation Started" 设置为调用层更改脚本以将对象移动到 "Ignore raycast" 层,然后应用表面磁解算器。

4) 将对象四处移动以放置在 ground/wall/table/etc.

5) 放手,"On Manipulation Ended" 事件调用表面磁力脚本销毁解算器,然后调用图层更改脚本将其设置回默认值,以便再次抓取和移动。

对于我正在制作的演示,我还希望能够在将对象放置在世界中之后对其进行旋转,因此我一直在尝试使用边界框实用程序集来仅允许围绕 y 旋转轴。有了这个,上面的 "kinda" 就可以工作了,但是它非常不稳定,有时会以对象不在正确的位置而告终。我无法将边界框的图层设置为忽略光线投射来复制上述方法,因此我只想在进行操作时禁用它。这也有助于其他方面,因为破坏求解器似乎最终会弄乱变换,并且在几次重新移动后它停止识别我场景中的测试地形。我认为这是因为转换变得不稳定,但我不确定。

我尝试使用 GameObject.GetComponent 编写脚本,但它无法识别该脚本。我什至尝试创建 public 字段,这样我就可以将目标组件拖进去,但 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 转换为系统。

该解决方案内置于操作处理程序中。

在事件部分,您可以 select BoundingBox 脚本,并且有一个 "bool enabled" 选项。

不需要脚本。