繁体   English   中英

vuforia 不接受 AR 统一应用程序的旧脚本

[英]vuforia doesn't accept old script for AR unity app

我的朋友为我创建了一个代码,让我在统一中使用 vuforia 创建一个 AR 应用程序,它完全可以正常工作。 现在我使用新版本的 vuforia 安装新的统一它显示一些错误我发现应用了一些更改,例如“MonoBehaviour,ITrackableEventHandler”更改为“DefaultTrackableEventHandler”,但我有一些无法理解的错误:

在此处输入图像描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

public class Shutter0 : DefaultTrackableEventHandler
{
TrackableBehaviour mTrackableBehaviour;
GameObject derakht;
string IP;
public int port;
GameObject TextMesh;
public string myText;
// "connection" things
IPEndPoint remoteEndPoint;
UdpClient client;

// Start is called before the first frame update
void Start()
{
    derakht = GameObject.Find("derakht");
    mTrackableBehaviour = GetComponent<TrackableBehaviour>();
    if (mTrackableBehaviour)
    {
        mTrackableBehaviour.RegisterTrackableEventHandler(this);
    }
    //OnTrackingLost();
    IP = "127.0.0.1";
    port = 8050;
    string myText = "25j";
    remoteEndPoint = new IPEndPoint(IPAddress.Parse(IP), port);
    client = new UdpClient();
    // status
    print("Sending to " + IP + " : " + port);
}
// Implementation of the ITrackableEventHandler function called when the
// tracking state changes.
public void OnTrackableStateChanged(
 TrackableBehaviour.Status previousStatus,
 TrackableBehaviour.Status newStatus)
{
    if (newStatus == TrackableBehaviour.Status.DETECTED ||
        newStatus == TrackableBehaviour.Status.TRACKED)
    {
        OnTrackingFound();
    }

}

private void OnTrackingFound()
{
    try
    {
        // encode string to UTF8-coded bytes
        myText = "0";
        byte[] data = Encoding.UTF8.GetBytes(myText);
        // send the data
        client.Send(data, data.Length, remoteEndPoint);
    }
    catch (Exception err)
    {
        print(err.ToString());
    }
}
}

错误应该是不言自明的

TrackableBehaviour不包含RegisterTrackableEventHandler的定义

这种方法根本不存在(不再存在)。


你可能更喜欢RegisterOnTrackableStatusChanged

mTrackableBehaviour.RegisterOnTrackableStatusChanged(OnTrackableStateChanged);

顺便说一句,我不会继承DefaultTrackableEventHandler tbh .. 这有点糟糕^^

我宁愿实现我自己的喜欢

[RequireComponent(typeof(TrackableBehaviour))]
public class TrackableEventHandlerEvents : MonoBehaviour
{
    [SerializeField] private TrackableBehaviour _trackableBehaviour;

    public UnityEvent onTrackingFound;
    public UnityEvent onTrackingLost;

    private void Awake()
    {
        if(!_trackableBehaviour) _trackableBehaviour = GetComponent<TrackableBehaviour>();

        if(!_trackableBehaviour)
        {
            Debug.LogError($"This component requires a {nameof(TrackableBehaviour)} !", this);
            return;
        }

        _trackableBehaviour.RegisterOnTrackableStatusChanged(OnTrackableStateChanged);
    }

    /// <summary>
    /// called when the tracking state changes.
    /// </summary>
    private void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
    {
        switch(newStatus)
        { 
            case TrackableBehaviour.Status.DETECTED:
            case TrackableBehaviour.Status.TRACKED:
            case TrackableBehaviour.Status.EXTENDED_TRACKED:
                OnTrackingFound();
                break;
        
            default:
                OnTrackingLost();
                break;
        }
    }


    protected virtual void OnTrackingFound()
    {
        Debug.Log("Trackable " + _trackableBehaviour.TrackableName + " found");
        onTrackingFound.Invoke();
    }

    protected virtual void OnTrackingLost()
    {
        Debug.Log("Trackable " + _trackableBehaviour.TrackableName + " lost");
        onTrackingLost.Invoke();
    }
}

为什么? → 因为这样你

  • 可以让任何其他方法通过 Inspector 添加回调(如在按钮UnityEvent onClick )或通过代码使用例如

     _trackableEventHandlerEvents.onTrackingLost.AddCallback(() => Debug.Log("Hello World;"));
  • 您可以通过从该组件继承并扩展例如直接扩展方法

    protected override void OnTrackingFound() { // You can keep the default behavior // or if you remove this line you can completely overwrite the behavior base.OnTrackingFound(); // Additional behavior }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM