使用虚拟按钮控制多图像对象行为
Using Virtual Button to control Multiple Image Object behavior
我正在尝试在 Unity 中为来自 Vuforia 的一台 AR 相机创建轨道二图像对象。我想在它下面创建两个图像对象。其中之一是带有虚拟按钮。另一个将有一个动画对象。我试图按下对象一上的虚拟按钮来触发对象二的运动。如果按钮和动画在同一个图像对象中,我可以实现它。如果按钮和动画位于不同的图像对象下,我不确定该怎么做。如果可以,我应该怎么做?
是的。你可以。我想通了。你只需要像大多数在线教程一样按名称找到游戏对象,尽管它们的游戏对象在同一个图像对象下。
要从另一个游戏对象控制一个游戏对象,您需要在两者之间进行通信。
MyScriptOne
MyScriptTwo
在脚本中,您可以像这样添加 public 引用:
public MyScriptTwo myScriptTwo;
然后当您在 MyScriptOne
中单击一个按钮时,您可以像这样调用 MyScriptTwo
中的任何内容 public
。
myScriptTwo.TriggerAnimation ();
它们不是同时激活的事实并不意味着它们不能连接,事实上你应该在动画之前验证动画对象是否激活,因为按钮无论如何都会触发该功能。
另外请记住,默认的 vuforia 行为不指定跟踪哪个图像目标,默认情况下 vuforia 只设置活动图像目标下的所有组件。要在图像目标上实现不同的行为,您应该创建自己的具有自定义行为的脚本。一些例子:
public class VuforiaCustomBehaviour: MonoBehaviour, ITrackableEventHandler
public TrackableBehaviour mTrackableBehaviour;
void Start()
{
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
{
mTrackableBehaviour.RegisterTrackableEventHandler(this);
}
}
public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
if (mTrackableBehaviour.TrackableName == "marker1")
{
DoSmth();
}
}
else
{
OnTrackingLost();
}
}
您还应该禁用默认的可跟踪事件处理程序并将其添加到您的图像目标中。
我正在尝试在 Unity 中为来自 Vuforia 的一台 AR 相机创建轨道二图像对象。我想在它下面创建两个图像对象。其中之一是带有虚拟按钮。另一个将有一个动画对象。我试图按下对象一上的虚拟按钮来触发对象二的运动。如果按钮和动画在同一个图像对象中,我可以实现它。如果按钮和动画位于不同的图像对象下,我不确定该怎么做。如果可以,我应该怎么做?
是的。你可以。我想通了。你只需要像大多数在线教程一样按名称找到游戏对象,尽管它们的游戏对象在同一个图像对象下。
要从另一个游戏对象控制一个游戏对象,您需要在两者之间进行通信。
MyScriptOne
MyScriptTwo
在脚本中,您可以像这样添加 public 引用:
public MyScriptTwo myScriptTwo;
然后当您在 MyScriptOne
中单击一个按钮时,您可以像这样调用 MyScriptTwo
中的任何内容 public
。
myScriptTwo.TriggerAnimation ();
它们不是同时激活的事实并不意味着它们不能连接,事实上你应该在动画之前验证动画对象是否激活,因为按钮无论如何都会触发该功能。
另外请记住,默认的 vuforia 行为不指定跟踪哪个图像目标,默认情况下 vuforia 只设置活动图像目标下的所有组件。要在图像目标上实现不同的行为,您应该创建自己的具有自定义行为的脚本。一些例子:
public class VuforiaCustomBehaviour: MonoBehaviour, ITrackableEventHandler
public TrackableBehaviour mTrackableBehaviour;
void Start()
{
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
{
mTrackableBehaviour.RegisterTrackableEventHandler(this);
}
}
public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
if (mTrackableBehaviour.TrackableName == "marker1")
{
DoSmth();
}
}
else
{
OnTrackingLost();
}
}
您还应该禁用默认的可跟踪事件处理程序并将其添加到您的图像目标中。