예제 #1
0
 private void HandleImageTrackerBehaviorOnTargetLost(MLMarkerTrackerArgs args)
 {
     if (TryGetARAnchor(args, out IARAnchor anchor))
     {
         Activate(anchor.ID, false);
     }
 }
예제 #2
0
        private void AddToDatabase(MLMarkerTrackerArgs args, IARAnchor anchor)
        {
            string markerID = GetMarkerID(args);

            if (!_database.ContainsKey(markerID))
            {
                _database.Add(markerID, anchor.ID);
            }
        }
예제 #3
0
        private void HandleImageTrackerBehaviorOnTargetFound(MLMarkerTrackerArgs args)
        {
            if (TryGetARAnchor(args, out IARAnchor anchor))
            {
                Activate(anchor.ID, true);
                return;
            }

            DetectedNewAnchor(args);
        }
예제 #4
0
        private ARMarkerEventData CreateEventData(MLMarkerTrackerArgs args)
        {
            string id = GetMarkerID(args);

            return(new ARMarkerEventData
            {
                ID = id,
                Name = $"NRTrackableImage-[{id}]",
            });
        }
예제 #5
0
        private void DetectedNewAnchor(MLMarkerTrackerArgs args)
        {
            string markerID = GetMarkerID(args);

            Debug.Log($"Detected new marker [{markerID}]");

            IARAnchor anchor = GetOrCreateARAnchor(args);

            UpdateAnchorLocation(anchor, args.Result.Position, args.Result.Rotation);

            OnDetectAnchorFirst?.Invoke(anchor, CreateEventData(args));
        }
예제 #6
0
        private IARAnchor GetOrCreateARAnchor(MLMarkerTrackerArgs args)
        {
            if (TryGetARAnchor(args, out IARAnchor anchor))
            {
                return(anchor);
            }

            anchor = _anchorService.Create();
            AddToDatabase(args, anchor);
            Activate(anchor.ID, true);

            return(anchor);
        }
예제 #7
0
        private bool TryGetARAnchor(MLMarkerTrackerArgs args, out IARAnchor anchor)
        {
            AnchorID anchorID;
            string   markerID = GetMarkerID(args);

            if (_database.TryGetValue(markerID, out anchorID))
            {
                anchor = _anchorService.Find(anchorID);
                return(true);
            }

            anchor = null;
            return(false);
        }
예제 #8
0
        private void DetectedUpdateAnchor(MLMarkerTrackerArgs args)
        {
            if (!TryGetARAnchor(args, out IARAnchor anchor))
            {
                return;
            }

            if (!IsActive(anchor.ID))
            {
                return;
            }

            UpdateAnchorLocation(anchor, args.Result.Position, args.Result.Rotation);

            OnUpdateAnchorPosition?.Invoke(anchor, CreateEventData(args));
        }
예제 #9
0
 private void HandleImageTrackerBehaviorOnTargetUpdated(MLMarkerTrackerArgs args)
 {
     DetectedUpdateAnchor(args);
 }
예제 #10
0
 private string GetMarkerID(MLMarkerTrackerArgs args)
 {
     return(args.Reference.ID);
 }