2016-01-01 25 views
0

你好,我正在開發一個Vuforia AR圖像識別應用程序。如何讓圖像識別後出現的東西保持原樣? (unity3d vuforia)

但是,我希望在掃描圖像時出現一個對象,並且該圖像保持獨立(不受掃描圖像位置的影響,並且在相機中具有固定的座標)。

我該如何做到這一點?

這是通過腳本完成的嗎?如果是這樣,我該如何編寫它?我將在哪裏添加腳本組件?

我試過到目前爲止

只是跟着this video
但使用不同的目標和對象

,我只是想出現確認後是獨立的對象

謝謝提前。

+0

,你嘗試過什麼其他到目前爲止..?你可以請你發佈你的代碼嗎? – user1140237

+0

我只跟着一個視頻沒有做任何編碼,因爲我不知道從哪裏開始 – Saine

回答

0

我不知道你是否仍然關注這篇文章。

這是你的答案:

我該如何做到這一點?

通過將3D模型傳輸到相機。

這是通過腳本完成的嗎?

是的。

如果是這樣,我怎麼能腳本呢?

首先你需要知道你想要什麼樣的「棒」。有沒有觸發按鈕,或者當照相機離開標記時它會粘住?

如果有一個觸發按鈕,您可以編寫腳本,例如點擊/點擊按鈕時,它會將3D(GameObject)父級更改爲相機。

my3D.transform.SetParent(Camera.main.transform); 

如果你想讓它這樣,當你移動你的相機去, 3D模型自動粘貼到相機,它將複雜稍微 。您需要訪問VuforiaImageTarget對象中的 ImageTargetTrackableEventHandler.cs。 尋找一個名爲OnTrackingLost()的函數。相反的:

Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true); 
    Collider[] colliderComponents = GetComponentsInChildren<Collider>(true); 

    // Disable rendering: 
    foreach (Renderer component in rendererComponents) 
    { 
     component.enabled = false; 
    } 

    // Disable colliders: 
    foreach (Collider component in colliderComponents) 
    { 
     component.enabled = false; 
    } 

您可以通過禁用它去掉整個代碼塊,並在 腳本的頂部添加在

[SerializeField] 
GameObject my3D; 

和OnTrackingLost()函數,把這個裏面的代碼:

my3D.transform.SetParent(Camera.main.transform); 

之後,去到Inspector視圖,點擊ImageTarget,有 將是這樣的:

enter image description here

簡單地從層次結構視圖所示的可變圖像 拖動3D。

我在哪裏添加腳本組件?

如果您使用「按鈕」方法,只需創建一個空的gameobject 並將腳本附加到它。

希望它有幫助,因爲vuforia的支持非常有限。 :)

0

唯一能爲我工作的是在腳本開始時添加一個布爾變量,並使OnTrackingLost()進入時,布爾變爲true。我不知道我是否解釋自己。

首先創建在開始時:

private bool bol = false;

然後在功能:

private void OnTrackingLost() 
{ 

    Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true); 
    Collider[] colliderComponents = GetComponentsInChildren<Collider>(true); 
    if (!bol) { 
     // Disable rendering: 
     foreach (Renderer component in rendererComponents) 
     { 
      component.enabled = false; 
     } 

     // Disable colliders: 
     foreach (Collider component in colliderComponents) 
     { 
      component.enabled = false; 
     } 
     bol = true; 
    } 


    Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost"); 
}