如何在 Unity3D ARToolKit 6 中为 OnMarkerFound 注册事件?

How to register for event in Unity3D ARToolKit 6 for OnMarkerFound?

我在这里学习本教程

https://github.com/artoolkit/ar6unity-wiki/wiki/Setting-Up-Your-First-ARToolKit-for-Unity-Scene

我需要注册来自标记的事件,以便它触发 OnMarkerFound。以下post 已过时

https://archive.artoolkit.org/documentation/doku.php?id=6_Unity:unity_scripts

我读了 AAREventReceiver.cs 文件,它说的很含糊:

using UnityEngine;

/// <summary>
/// Any object that implements IAREventReceiver is eligable to register for tracking
/// events from any ARTrackable object.
/// To register with an ARTrackable:
///   arTrackedMarker.eventReceivers.add(this);
/// </summary>
/// 
public abstract class AAREventReceiver : MonoBehaviour {
    public abstract void OnMarkerFound(ARTrackable marker);
    public abstract void OnMarkerTracked(ARTrackable marker);
    public abstract void OnMarkerLost(ARTrackable marker);
}

例如,我在任何地方都找不到 IAREventReceiver。还有我应该把 arTrackedMarker.eventReceivers.add(this);?

放在哪里

然后我查看我的 AR Trackable 对象以注册事件接收器。资产列表显示 none 尽管我有很多游戏对象可用于注册事件。

坦率地说,我不知道如何在此处注册 v6 中的事件。即使这个文档也不准确

https://archive.artoolkit.org/documentation/doku.php?id=6_Unity:unity_scripts

能指点一下吗?谢谢。

AAREventReceiver.cs 中的文档是错误的。它应该说:

"Any object that implements AAREventReceiver is eligible (...)"

话虽如此。您需要编写包含这些函数实现的自己的脚本:

public abstract void OnMarkerFound(ARTrackable marker);
public abstract void OnMarkerTracked(ARTrackable marker);
public abstract void OnMarkerLost(ARTrackable marker);

并使其扩展 AAREventReceiver:

public class MyEventReceiver : AAREventReceiver {
    public abstract void OnMarkerFound(ARTrackable marker){
        //log OnMarkerFound
    }
    public abstract void OnMarkerTracked(ARTrackable marker){
        //log OnMarkerTracked
    }
    public abstract void OnMarkerLost(ARTrackable marker){
        //log OnMarkerLost
    }
}

然后你可以select EventReceivers-List中的MyEventReceiver为'Element 0'(参考你的截图)

我在这里写了一篇文章:http://augmentmy.world/migratetoartoolkit6 关于如何从 ARToolKit5 迁移到 ARToolKit6

希望对您有所帮助

===编辑 1:===

你不需要这个

arTrackedMarker.eventReceivers.add(this);

不再使用 ARToolKit6