前言
有一些功能是需要用2D的形式跟隨3D的模型進行顯示的。例如模型的講話氣泡,血條等。
功能
實現
- UI的錨點設置,UI的根節點的大小設置
- 腳本實現
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;