1. 程式人生 > >使用指令碼將Unity的ogg音效全部改為2d音效

使用指令碼將Unity的ogg音效全部改為2d音效

[MenuItem("將所有3D音效改成2D音效")]
static void change3DMusicTo2D()
{
	string[] fs = GetSoundMetaFile();
	bool hasChangeFile = false;
	foreach(var f in fs)
	{
		if(MakeSoundMetaFile3DFalse(f))
		{
			hasChangeFile = true;
		}
	}
	if(hasChangeFile)
		AssetDatabase.Refresh();
}

static string[] GetSoundMetaFile()
{
	string dir = Application.dataPath + "/Resources/Res/Audio/";
	return System.IO.Directory.GetFiles(dir,"*.ogg.meta",System.IO.SearchOption.AllDirectories);
}

static bool MakeSoundMetaFile3DFalse(string file)
{
	var text = System.IO.File.ReadAllText(file);
	int pos = text.IndexOf("3D: 1");
	if(pos > 0)
	{
		text = text.Replace("3D: 1","3D: 0");
		System.IO.File.WriteAllText(file,text);
		Debug.Log(string.Format("Sound File Make 3D False:{0}",file);
		return true;
	}
	return false;
}

注:

如果你在遊戲開發過程中使用諸如SVN的版本控制工具,那你必須得理解Meta檔案的作用。在遊戲場景中引用一個遊戲資源,Unity並不直接按照檔案路徑和名稱,而是使用一個獨一無二的GUID來指向工程裡的該資原始檔。這個GUID儲存在Unity工程為每個資源和資料夾生成的Meta檔案裡。 
使用GUID的好處就是,即使你移動、重新命名或者修改資源的內容,這個資源仍然可以通過GUID來被引用(只要GUID不變,資源就能夠被引用)。缺點是你必須明確的意識到Meta檔案是被關聯到特定的資源上的,如果你刪除了一個meta檔案,Unity會認為原始的資原始檔已經被刪除,然後為這個“新的”資原始檔生成一個新的GUID。這就是遊戲場景中的資源引用中斷的最常見原因。 


除了GUID,meta檔案還儲存了有關資源匯入的資訊。例如,貼圖資源在匯入時可以當作標準貼圖、法線貼圖、GUI貼圖、cookie或者光線貼圖。這些匯入設定都會被儲存在meta檔案裡。 
之前遇到一個問題,就是我上傳到SVN的怪物Prefab,在策劃那邊查看出現“Missing Script”的問題,經檢查,是該丟失的指令碼的meta檔案沒有上傳到SVN。所以,按照上面的理論,因而Prefab找不到該指令碼的引用。