C# Unity ARFoundation图像跟踪预制位置

C# Unity ARFoundation图像跟踪预制位置,c#,unity3d,image-processing,scripting,C#,Unity3d,Image Processing,Scripting,我正试图扫描标记,并在标记上放置一个3D对象。到目前为止,这是可行的,但我似乎在脚本(arFoundation脚本)中找不到一个位置,在找到referenceImage时将预置放在那里。获取referenceImage位置也很有用,这样我就可以自己在该位置实例化对象 任何帮助都将不胜感激 即时通讯使用: ARFoundation 2.2.0 preview ARCore 2.1.0 preview ARKit 2.2.0 preview Unity 2019.1.8f1 //Tracked

我正试图扫描标记,并在标记上放置一个3D对象。到目前为止,这是可行的,但我似乎在脚本(arFoundation脚本)中找不到一个位置,在找到referenceImage时将预置放在那里。获取referenceImage位置也很有用,这样我就可以自己在该位置实例化对象

任何帮助都将不胜感激

即时通讯使用:

ARFoundation 2.2.0 preview
ARCore 2.1.0 preview
ARKit 2.2.0 preview
Unity 2019.1.8f1



//TrackedImageInfoManager.cs SCRIPT
public void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs)
{
    /*ARTrackedImage trackedImage = null;//SOME CODE FROM FORUMS, could this be better than below uncommented code?

    for (int i = 0; i < eventArgs.added.Count; i++)
    {
        trackedImage = eventArgs.added[i];
        // instantiate AR object, set trackedImage.transform
        // use a Dictionary, the key could be the trackedImage, or the name of the reference image -> trackedImage.referenceImage.name
        // the value of the Dictionary is the AR object you instantiate.
    }

    for (int i = 0; i < eventArgs.updated.Count; i++)
    {
        trackedImage = eventArgs.updated[i];
        if (trackedImage.trackingState == TrackingState.Tracking)
        //if (trackedImage.trackingState != TrackingState.None)
        {
            // set AR object to active, use Dictionary to get AR object based on trackedImage
            // you can also include TrackingState.Limited by checking for None
        }
        else
        {
            // set active to false
        }
    }

    for (int i = 0; i < eventArgs.removed.Count; i++)
    {
        // destroy AR object, or set active to false. Use Dictionary.
    }*/ 
    //END HERE

    //WORKING CODE STARTS HERE
    foreach ( var trackedImage in eventArgs.added)
    {
        trackedImage.transform.localScale = new Vector3(0.1f , 0.1f , 0.1f);//when object is instaniated, this handles it scale
        //trackedImage.transform.localPosition
        UpdateInfo(trackedImage);
    }

    foreach( var trackedImage in eventArgs.updated)
    {
        UpdateInfo(trackedImage);
    }


}
ARFoundation 2.2.0预览版
ARCore 2.1.0预览版
ARKit 2.2.0预览版
统一2019.1.8f1
//TrackedImageInfoManager.cs脚本
公开无效OnTrackedImagesChanged(ArtrackDimagesChangedEventArgs)
{
/*ARTRACKDIMAGE trackedImage=null;//来自论坛的一些代码,这会比下面未注释的代码好吗?
for(int i=0;itrackedImage.referenceImage.name
//字典的值是您实例化的AR对象。
}
对于(int i=0;i

我需要找到一种方法来处理实例化的预置,或者只是获取将实例化它的位置(在参考图像上)并自己实例化它。

默认Prefeb在ArtrackDimageManager中设置为TrackedImagePrefable, 如果您想在每个新的图像轨迹上实例化自己的预置,您可以这样更改代码

void UpdateInfo(ARTrackedImage trackedImage)
{

  if (trackedImage.trackingState != TrackingState.Tracking)
    {

     if(trackedImage.referenceImage.name == "ABC"){
        Instantiate(prefab1, transform.position, transform.rotation);
      }
     else if(trackedImage.referenceImage.name == "XYZ"){
        Instantiate(prefab2, transform.position, transform.rotation);
      }

    }else{
    // Destroy object if you dont want to keep
   }
}
希望此代码对您有所帮助