2013-09-27 69 views
0

我正在使用Unity3d開發遊戲。如何限制整個項目的紋理尺寸

在項目中存在很多紋理。

如何限制整個項目的紋理尺寸?

+0

我建議爲您的瀏覽器安裝拼寫檢查插件。另外請[不要添加標籤到您的問題標題](http://stackoverflow.com/search?q=user%3A183527+ [unity3d]),已經有標籤。 – user1306322

回答

1

如果您希望默認限制導入紋理的大小,除了導入後編輯最大大小之外,沒有直接的方法。默認情況下總是1024.

然而,您可以編寫自定義AssetPostProcessor(儘管它的名稱)也有一個OnPreprocessTexture方法,您可以使用該方法設置導入設置。一個非常裸露的骨頭例子是這樣的:

using UnityEngine; 
using UnityEditor; 

public class DefaultTextureSizer : AssetPostprocessor 
{ 

    void OnPreprocessTexture() 
    { 
     TextureImporter tex_importer = assetImporter as TextureImporter; 
     tex_importer.maxTextureSize = 512; //Some other max size than the default 
    } 

} 

,將確保如果你使用OnPostprocessTexture可以讀取所有進口的紋理將有一個最大尺寸(在這種情況下)512

+0

我簡直不敢相信Unity仍然沒有在項目設置中爲整個項目添加一個簡單的默認導入設置,很明顯大多數開發移動設備的人幾乎從不會使用4096紋理,例如,如果他們在某些他們只能爲少數案件指定案例。相反,我們不得不等待幾個小時才能導入具有巨大紋理的新資產,然後用較小的最大尺寸重新導入它們,否則我們不得不搗亂腳本,並找出困難的方式。這是至少6年後,第一個線程出現要求這個功能。 – anything

1

每個紋理的實際尺寸並設置最大尺寸。

,當我想降低紋理低端手機的分辨率我使用這個代碼生成:

public void OnPostprocessTexture(Texture2D texture) 
    { 
     if (!TextureResizingEnabled) 
      return; 

     TextureImporter textureImporter = assetImporter as TextureImporter; 
     TextureImporterFormat format; 

     TextureImporterSettings textureImporterSettings = new TextureImporterSettings(); 
     textureImporter.ReadTextureSettings(textureImporterSettings); 

     //grabbing the max texture dimension for use in size calculation 
     float size = Mathf.Max(texture.width, texture.height); 

     Debug.LogError("original size = " + size + " orig max size = " + textureImporterSettings.maxTextureSize); 

     // Getting the smallest texture size between original texture size, to be resized by TextureResizingFactor, and maxTextureSize set in asset importer settings: 
     size = Mathf.Min(Mathf.Pow(2f, Mathf.Floor(Mathf.Log(size, 2f)) - TextureResizingFactor), textureImporterSettings.maxTextureSize); 

     Debug.LogError("chosen size = " + size); 

     // we won't make any changes if the calculate size is lesser than the minimum on Unity dropdown box (32): 
     if (size >= 32) 
     { 
      textureImporterSettings.maxTextureSize = (int)size; 
      textureImporter.SetTextureSettings(textureImporterSettings); 
     } 
    } 

它基本上除以2的最大紋理大小,所以如果你有最大尺寸紋理等於2048它將設置爲1024,而同一項目中的512紋理將被設置爲256.這對於降低內存使用情況非常有用。

在這種情況下使用OnPostprocessTexture的缺點是我必須重新導入紋理兩次:第一個將更改紋理最大大小,第二個(禁用此代碼)將實際應用新的最大大小。發生這種情況是因爲我們在導入紋理後設置了新尺寸,但這是唯一的方法,因爲無法讀取OnPreprocessTexture中的紋理尺寸。