最近在使用uGUI時遇到了一個問題,在此記錄一下。
在Canvas的Render Mode設定為Screen Space-Overlay模式時,動态加載控件是不會發生問題的。但是在Screen Space-Camera模式下,動态加載的控件位置及縮放會有很大的偏差。
private Canvas canvas;
// Use this for initialization
void Start ()
{
canvas = GameObject.FindObjectOfType<Canvas>();
GameObject button = GameObject.Instantiate(Resources.Load("UI/Button")) as GameObject;
button.transform.parent = canvas.transform;
}
運作結果:

看不清就對了,因為放大了66倍...
本來心想檢視源碼,查找問題的原因,尼瑪在 bitbucket上的官方庫裡找半天沒找到Canvas的源碼,後來仔細一看原來Canvas是UnityEngine.dll下的。一定是逗我...說好的,開源呢...
無耐求助于萬能的Google,終于找到了這個uGui alignment is wrong when adding prefabs to canvas。
private Canvas canvas;
// Use this for initialization
void Start ()
{
canvas = GameObject.FindObjectOfType<Canvas>();
GameObject button = GameObject.Instantiate(Resources.Load("UI/Button")) as GameObject;
//button.transform.parent = canvas.transform;
button.transform.SetParent(canvas.transform,false);//不受父節點的影響,保持原局部坐标和縮放
}
就是這樣。
物有所不足,智有所不明。