2012年5月30日 星期三

用程式取得物件的貼圖大小需注意的地方

我希望能用貼圖的大小, 來決定場景的佈置, 攝影機的可視範圍 ... 等 在程式一起動時, 會先到 Resources 的資料夾, 將圖片 Load 進來, 使用下列語法 ... gameObject.Find("bg").renderer.material.mainTexture = Resources.Load("texture"); 

但 ... 當我用下列語法想取得圖片的大小時 ... var _width = gameObject.Find("bg").renderer.material.mainTexture.width; var _height = gameObject.Find("bg").renderer.material.mainTexture.height; 

得到的結果都 ... width , height 都是 1024

 是否是我方法使用錯誤, 或是我疏忽哪裡的設定了?


 原因很簡單,因為貼圖長寬必需為2的冪次方,因此當Unity載入貼圖時會自動將貼圖resize成最接近的2^n尺吋。 你的圖是1024x768,1024沒問題,但768的高度unity必需取決於要轉成1024或是512,最後unity的公式是轉為1024。 正常來說,uv貼圖都必需為2^n的正方型圖,但unity可以允許寬高不等,但還是都必需為2的冪次方尺寸,若不想讓unity自動縮圖減少失真,最好就是做貼圖時就直接做成2^n的正方型貼圖。 (有些引擎讀入非2^n正方型的貼圖連顯示都不能顯示,因為unity會自動幫使用者重設圖片所以才會讓人忘記這個原則) 若你今天圖不是要拿來做3d貼圖而是要拿來做GUI,必需將Texture Type設為GUI,如此一來就能保留原來的尺寸了。

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。