Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查ARCamera是否首次检测到标记,并;“繁殖”;三维对象_C#_Unity3d_Vuforia - Fatal编程技术网

C# 检查ARCamera是否首次检测到标记,并;“繁殖”;三维对象

C# 检查ARCamera是否首次检测到标记,并;“繁殖”;三维对象,c#,unity3d,vuforia,C#,Unity3d,Vuforia,我正在尝试制作一个简单的AR应用程序,我尝试制作的应用程序的流程是,camera detect first marker>做事,camera detect Second marker>做事 问题是我已经用我能想到的关键字组合在谷歌上搜索了,而且我也在寻找文档,但我真的找不到对我的问题有帮助的东西 我最初的想法是在所说的标记上使用一个脚本,并在void-OnEnable上添加“do-something”,但该对象无论如何都是enable的,所以它是无用的 有人能借我一根绳子吗?DefaultTra

我正在尝试制作一个简单的AR应用程序,我尝试制作的应用程序的流程是,camera detect first marker>做事,camera detect Second marker>做事

问题是我已经用我能想到的关键字组合在谷歌上搜索了,而且我也在寻找文档,但我真的找不到对我的问题有帮助的东西

我最初的想法是在所说的标记上使用一个脚本,并在void-OnEnable上添加“do-something”,但该对象无论如何都是enable的,所以它是无用的


有人能借我一根绳子吗?

DefaultTrackingEventHandler是处理跟踪的脚本。在多个标记的示例场景中,它附着到ImageTarget

该脚本注册到TrackableBehavior,并通过OnTrackingFound/lost方法传播找到/丢失的跟踪

在示例场景中,这些方法收集子对象的碰撞器和渲染器并启用/禁用

您可以做的是将信息进一步传播给其他侦听器。在这种情况下,您可以启用一个脚本,该脚本在满足某个条件之前运行更新检查,并禁用该脚本和匹配的可跟踪行为

public class DefaultTrackableEventHandler : MonoBehaviour,
                                            ITrackableEventHandler
{
    private TrackableBehaviour mTrackableBehaviour;
    [SerializedField] private MyConditionClass actionMb = null;
    protected virtual 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)
        {

            OnTrackingFound();
        }
        else
        {
            OnTrackingLost();
        }
    }

    protected virtual void OnTrackingFound()
    {
        // Was already successfully done
        if(this.actionMb.ConditionMet == true){ return; }
        this.actionMb.enable = true;
    }


    protected virtual void OnTrackingLost()
    {
        // Was already successfully done
        if(this.actionMb.ConditionMet == true){ return; }
        this.actionMb.enable = false;
    }
}

public abstract class MyConditionClass : MonoBehaviour
{   
    public bool ConditionMet{ get; private set; }
    protected abstract bool CheckCondition();
    protected virtual void Update(){
        if(ConditionMet == true){ return; }
        ConditionMet = CheckCondition();
    }
}  

public class MyConditionClassForInput : MyConditionClass 
{   
    protected override bool CheckCondition(){
        return (Input.GetKeyDown(KeyCode.Space));
    }
}
公共类DefaultTrackableEventHandler:MonoBehavior,
ITrackableEventHandler
{
私人可追踪行为;
[SerializedField]私有MyConditionClass actionMb=null;
受保护的虚拟void Start()
{
mtrackablebhavior=GetComponent();
if(MTrackableBehavior)
{
mtrackablebhavior.RegisterTrackableEventHandler(此);
}
}
公共无效OnTrackableStateChanged(
可跟踪行为。状态优先状态,
可跟踪的行为。状态(状态)
{
if(newStatus==trackablebehavior.Status.DETECTED||
newStatus==trackablebehavior.Status.TRACKED||
newStatus==trackablebehavior.Status.EXTENDED\u TRACKED)
{
OnTrackingFound();
}
其他的
{
OnTrackingLost();
}
}
受保护的虚拟空间OnTrackingFound()
{
//已成功完成
如果(this.actionMb.ConditionMet==true){return;}
this.actionMb.enable=true;
}
受保护的虚拟空间OnTrackingLost()
{
//已成功完成
如果(this.actionMb.ConditionMet==true){return;}
this.actionMb.enable=false;
}
}
公共抽象类MyConditionClass:单行为
{   
公共布尔条件集{get;private set;}
受保护的抽象bool CheckCondition();
受保护的虚拟无效更新(){
如果(ConditionMet==true){return;}
ConditionMet=CheckCondition();
}
}  
公共类MyConditionClassForInput:MyConditionClass
{   
受保护的覆盖布尔检查条件(){
返回(Input.GetKeyDown(KeyCode.Space));
}
}
因此,您有一个基类,其中包含所有条件所共有的数据,如图所示,条件是否已经满足。以及运行条件检查的更新


然后就有了实现条件检查的子类(必须从抽象开始)

DefaultTrackingEventHandler是处理跟踪的脚本。在多个标记的示例场景中,它附着到ImageTarget

该脚本注册到TrackableBehavior,并通过OnTrackingFound/lost方法传播找到/丢失的跟踪

在示例场景中,这些方法收集子对象的碰撞器和渲染器并启用/禁用

您可以做的是将信息进一步传播给其他侦听器。在这种情况下,您可以启用一个脚本,该脚本在满足某个条件之前运行更新检查,并禁用该脚本和匹配的可跟踪行为

public class DefaultTrackableEventHandler : MonoBehaviour,
                                            ITrackableEventHandler
{
    private TrackableBehaviour mTrackableBehaviour;
    [SerializedField] private MyConditionClass actionMb = null;
    protected virtual 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)
        {

            OnTrackingFound();
        }
        else
        {
            OnTrackingLost();
        }
    }

    protected virtual void OnTrackingFound()
    {
        // Was already successfully done
        if(this.actionMb.ConditionMet == true){ return; }
        this.actionMb.enable = true;
    }


    protected virtual void OnTrackingLost()
    {
        // Was already successfully done
        if(this.actionMb.ConditionMet == true){ return; }
        this.actionMb.enable = false;
    }
}

public abstract class MyConditionClass : MonoBehaviour
{   
    public bool ConditionMet{ get; private set; }
    protected abstract bool CheckCondition();
    protected virtual void Update(){
        if(ConditionMet == true){ return; }
        ConditionMet = CheckCondition();
    }
}  

public class MyConditionClassForInput : MyConditionClass 
{   
    protected override bool CheckCondition(){
        return (Input.GetKeyDown(KeyCode.Space));
    }
}
公共类DefaultTrackableEventHandler:MonoBehavior,
ITrackableEventHandler
{
私人可追踪行为;
[SerializedField]私有MyConditionClass actionMb=null;
受保护的虚拟void Start()
{
mtrackablebhavior=GetComponent();
if(MTrackableBehavior)
{
mtrackablebhavior.RegisterTrackableEventHandler(此);
}
}
公共无效OnTrackableStateChanged(
可跟踪行为。状态优先状态,
可跟踪的行为。状态(状态)
{
if(newStatus==trackablebehavior.Status.DETECTED||
newStatus==trackablebehavior.Status.TRACKED||
newStatus==trackablebehavior.Status.EXTENDED\u TRACKED)
{
OnTrackingFound();
}
其他的
{
OnTrackingLost();
}
}
受保护的虚拟空间OnTrackingFound()
{
//已成功完成
如果(this.actionMb.ConditionMet==true){return;}
this.actionMb.enable=true;
}
受保护的虚拟空间OnTrackingLost()
{
//已成功完成
如果(this.actionMb.ConditionMet==true){return;}
this.actionMb.enable=false;
}
}
公共抽象类MyConditionClass:单行为
{   
公共布尔条件集{get;private set;}
受保护的抽象bool CheckCondition();
受保护的虚拟无效更新(){
如果(ConditionMet==true){return;}
ConditionMet=CheckCondition();
}
}  
公共类MyConditionClassForInput:MyConditionClass
{   
受保护的覆盖布尔检查条件(){
返回(Input.GetKeyDown(KeyCode.Space));
}
}
因此,您有一个基类,其中包含所有条件所共有的数据,如图所示,条件是否已经满足。更新运行一个condi