2015-12-01 69 views
0

我會解釋我的問題(我的英文有點跛意)。Unity 3D:遊戲物體方向的UI圖像

我有一個能夠在Unity場景中移動的玩家(相機)。在這個場景中有一些GameObjects。那些GameObjects對於相機來說可能太遠了。我想要實現的是有一個UI圖像出現在每個對象的方向上。即使物體太遠。

例如:玩家站在某個位置。在他面前有一個很遠的物體。我想在屏幕上有一個圖形界面,他說「有200米的物體」。如果他身後有一個物體,我不想要任何東西出現。但是如果他回頭,它會出現,因爲玩家正朝着上述GameObject的方向前進。

我真的很希望我明確自己。請告訴我,如果你需要任何進一步的解釋。謝謝你的社區!

回答

1

回答對自己的一個老問題:

這裏就是我所做的:

if (markIsOp) //Check if it's worth calculating 
{ 

     //Calculs the Viewport Position of the object 
     Vector3 ViewportPosition = Camera.main.WorldToViewportPoint (transform.position); 

     //Calculs it's Unity Canvas position (O.5f because UI anchor is middle) 
     Vector2 WorldObject_ScreenPosition = new Vector2 (
               ((ViewportPosition.x * mainCanvasRect.sizeDelta.x) - (mainCanvasRect.sizeDelta.x * 0.5f)), 
               ((ViewportPosition.y * mainCanvasRect.sizeDelta.y) - (mainCanvasRect.sizeDelta.y * 0.5f))); 

     //Making sure it's forward (markRect is my UI Element's RectTransform) 
     if (ViewportPosition.z > 0) 
      markRect.anchoredPosition = WorldObject_ScreenPosition; 
} 

謝謝您的答覆。 有一個不錯的

0

使用從玩家到遊戲對象的射線照片,並計算差異。

+0

你是什麼意思的區別?我相信僅在正確的位置顯示UI是不夠的? 對不起,我是新手。 – tinkz

+0

不需要raycast,只需要Vector3.Distance(objA,objB); – Everts

+0

謝謝你們,這對於遠距離部分很適合。我最大的問題是關於在對象的正確方向顯示UI – tinkz

0

您可以使用Camera.WorldToScreenPoint來計算GameObjects的「UI-Position」,然後使用GameObject和Camera的z-Coordinates計算距離。

+0

嘿,謝謝你的答案。 這是我的一些代碼: \t Vector3 tempPos1 = arCam.WorldToScreenPoint(pos); \t \t tempPos1.z = -40; \t \t img1.rectTransform.localPosition = tempPos1; pos是gameObject的位置。我鎖定Z位置以不計算對象的距離,與顯示UI無關。 無論如何,這是顯示用戶界面,但沒有在適當的地方,我不知道我在做什麼錯。 無論如何謝謝你的時間伴侶 – tinkz