C# 动态加载和激活数据集(vuforia和unity)

C# 动态加载和激活数据集(vuforia和unity),c#,unity3d,vuforia,C#,Unity3d,Vuforia,我想做一个系统,我可以使用它从我的网站动态下载各种目标,而不必使用“云”系统。 我还想将数据集保存为.xml和.dat格式,我想从保存设备激活这些格式 使用vuforia和unity有很多方法和页面可以做到这一点,但不幸的是,当我测试它时,我收到了所有这些方法和页面的错误。 似乎我的代码出错了,或者vuforia类被更改了 例如,请查看以下链接: 我遇到了一个错误:使用Vuforia 我将.xml和.dat文件放在“Application.persistentDataPath+”/“+”Buil

我想做一个系统,我可以使用它从我的网站动态下载各种目标,而不必使用“云”系统。 我还想将数据集保存为.xml和.dat格式,我想从保存设备激活这些格式

使用vuforia和unity有很多方法和页面可以做到这一点,但不幸的是,当我测试它时,我收到了所有这些方法和页面的错误。 似乎我的代码出错了,或者vuforia类被更改了

例如,请查看以下链接: 我遇到了一个错误:使用Vuforia

我将.xml和.dat文件放在“Application.persistentDataPath+”/“+”Building1.xml中 我使用了这个脚本“DataSetLoadBehavior”,它连接了“AR摄像头”,并将我的代码放在其中。我有一个错误:

NullReferenceException:对象引用未设置为 对象DataSetLoadBehavior.OnInitialized()(位于资产/高通公司 增强现实/Scripts/datasetloadbehavior.cs:49) DataSetLoadBehavior.Start()(位于资产/高通公司扩充版 Reality/Scripts/datasetloadbehavior.cs:80)

我的代码是:

unity 4.2 pro和vuforia 2.8.9或3.0.9

/*==============================================================================
版权所有(c)2010-2014高通互联体验有限公司。
版权所有。
机密和专有-高通互联体验有限公司。
==============================================================================*/
使用System.Collections.Generic;
使用UnityEngine;
/// 
///此行为允许在启动时自动加载和激活一个或多个数据集
/// 
公共类DataSetLoadBehavior:DataSetLoadAbstractBehavior
{
[HideInSector,序列化字段]
public List mDataSetsToActivate2=新列表();
[序列化字段,隐藏索引]
public List mDataSetsToLoad2=新列表();
受保护的DataSetLoadBehavior()
{
}
私有void OnDestroy()
{
QCarAbstractBehavior=(QCarAbstractBehavior)UnityEngine.Object.FindObjectOfType(typeof(QCarAbstractBehavior));
if(行为!=null)
{
}
}
首次公开无效()
{
if(QCARRuntimeUtilities.IsQCAREnabled())
{
foreach(此.mDataSetsToLoad2中的字符串str)
{
如果(!DataSet.Exists(str、QCARUnity.StorageType.STORAGE_ABSOLUTE))
{
LogError(“数据集”+str+“不存在”);
}
其他的
{
ImageTracker tracker=TrackerManager.Instance.GetTracker();
DataSet DataSet=tracker.CreateDataSet();
如果(!dataSet.Load(str))
{
Debug.LogError(“未能加载数据集”+str+”);
}
else if(this.mDataSetsToActivate2.Contains(str))
{
tracker.ActivateDataSet(数据集);
}
}
}
}
}
公共无效OnTrackablesUpdated()
{
}
私有void Start()
{
QCarAbstractBehavior=(QCarAbstractBehavior)UnityEngine.Object.FindObjectOfType(typeof(QCarAbstractBehavior));
if(行为!=null)
{
mDataSetsToLoad2.Add(Application.persistentDataPath+“/”+“Building1.xml”);
初始化();
}
}
public override void addossspecificexternaldatasetsearchdirs()
{
#如果你是安卓
if(Application.platform==RuntimePlatform.Android)
{
//获取外部存储目录
AndroidJavaClass JClassenEnvironment=新的AndroidJavaClass(“android.os.Environment”);
AndroidJavaObject jobjFile=jclassEnvironment.CallStatic(“getExternalStorageDirectory”);
字符串externalStorageDirectory=jobjFile.Call(“getAbsolutePath”);
//获取包名
AndroidJavaObject jobjActivity=新的AndroidJavaClass(“com.unity3d.player.UnityPlayer”).GetStatic(“currentActivity”);
字符串packageName=jobjActivity.Call(“getPackageName”);
//添加一些最佳实践搜索目录
//
//假设仅将Vufroria数据集提取到文件目录
AddExternalDatasetSearchDir(externalStorageDirectory+“/Android/data/”+packageName+“/files/”;
//假设这里提取了整个StreamingAssets目录,并且我们的数据集位于“QCAR”目录中
AddExternalDatasetSearchDir(externalStorageDirectory+“/Android/data/”+packageName+“/files/QCAR/”);
}
#endif//UNITY\u ANDROID
}
无效更新()
{
}
}

是的,Vuforia已经改变了很多

现在,您必须将
Vuforia
作为标题包含在内,才能使其正常工作

using Vuforia;
希望这能奏效

如果它说找不到Vuforia,可能是因为您没有为Vuforia导入Unitypackage。你可以跟着这些


另外,我相信你还没有按照步骤去做。新的Vuforia不再支持
ImageTracker
,因此您必须将
ImageTracker
的所有实例更改为
ObjectTracker

相关:嘿..如何获取.dat和.xml文件?不使用VuForia门户。有任何工具或替代方法可以生成标记吗?不是工作!错误:找不到类型或命名空间名称“Vuforia”。您是否缺少using指令或程序集参考?先生,谢谢您的回答您是否在项目中添加了Vuforia库?我同意您可能尚未将Vuforia包导入Unity3D请注意答案中的更改。我还补充了更多内容。:)