从脚本中禁用 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" 选项。
不需要脚本。
我目前正在尝试从 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" 选项。
不需要脚本。