需求一 :讓UGUI中的UI随着場景中的模型位置而移動,類似人物血條,這裡需要移動的是UI
需求二:讓場景中的模型位置随着UI移動而變化,這裡移動的是模型位置。
這兩個需求正是對UGUI和世界坐标的轉換的應用。
當canvas的render模式是overlay的時候,這個時候隻有一個相機,即世界相機,沒有所謂UI相機,ui坐标就是螢幕坐标。
Transform target;//模型
Camera worldcamera;//世界相機
RectTransform m_ui;//ui
RectTransform m_canvas;//ui canvas
一 解決需求一:
vector3 screenpos = worldcamera.WorldToScreenPoint(target.position);//把模型坐标轉為螢幕坐标
vector2 temp = vector2.zero;
vector2 uipos= vector2.zero;
temp.set(screenpos.x,screenpos.y);
RectTransformUtility.ScreenPointToLocalPointInRectangle(m_canvas, //需要求取的ui所在的canvas
temp,//螢幕坐标
null, //因為是overlay所有不存在相機
out uipos);//把螢幕坐标轉為ui坐标
m_ui.anchoredPosition = uipos;
二 解決需求二:
變量如上
vector3 worldpos;
temp.set(m_ui.position.x,m_ui.position.y);
RectTransformUtility.ScreenPointToWorldPointInRectangle(m_canvas, //ui所在的canvas
temp,//螢幕坐标
worldcamera, //求取渲染模型所用的相機
out worldpos);//ui對應的模型坐标
target.position = worldpos;
當canvas的render模式是camera的時候,隻需要把解決需求一中的null換成UI相機即可。