【UGUI】3D世界座標轉2DUI座標並自適應的做法(血條,氣泡)

前言

有一些功能是需要用2D的形式跟隨3D的模型進行顯示的。例如模型的講話氣泡,血條等。

功能

在這裏插入圖片描述

實現

  1. UI的錨點設置,UI的根節點的大小設置
  2. 腳本實現

UI

屏幕座標系是從左下角爲原點,Y軸向右爲正,X軸向上爲正。所有相關的UI的錨點都需要是設置成左下爲錨點。其次,UI掛載的根節點需要做屏幕的自適應,保證和屏幕一樣大。
在這裏插入圖片描述

腳本

常見的情況下有兩種寬高。只要不是PC的固定界面大小,屏幕大小和設置的界面大小就會有對應的縮放情況。

第一種情況

Canvas使用固定屏幕大小。這種情況無論真機比例如何,都會按照預先設置好的大小比例進行縮放。
在這裏插入圖片描述
因爲沒有跟隨屏幕分辨率進行縮放,所以我們在計算後需要再做多一步進行轉換。根節點要做自適應。width和Height是屏幕寬高,位置是中心點(寬高/2)。
在這裏插入圖片描述 在這裏插入圖片描述

父節點的大小設置

           PlaneTransform.sizeDelta = CanvanTransform.sizeDelta;
           PlaneTransform.anchoredPosition = PlaneTransform.sizeDelta / 2;

UI的位置需要轉化一下

        Vector3 pos = Camera.main.WorldToScreenPoint(m_TragetTransform.position + m_Offect);
        pos.x *= m_CanvasTransform.sizeDelta.x / Screen.width;
        pos.y *= m_CanvasTransform.sizeDelta.y / Screen.height;
        pos.z = 0;
        m_MyTransform.anchoredPosition = pos;

第二種情況

Canvas跟隨屏幕大小,這樣會跟隨着分辨率的改變而改變。
因爲根節點已經做了轉換,所以直接設置即可。
在這裏插入圖片描述

           //m_TragetTransform是模型對象
           Vector3 pos = Camera.main.WorldToScreenPoint(m_TragetTransform.position + m_Offect);
           pos.z = 0;
           m_MyTransform.anchoredPosition = pos;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章