本节主要讲述在unity中静态自动变量,在编译dll或者代码的时候,会被重置为初始值。
所以要将全局变量记录在文件中。
在fmod中,经常会遇到自动拷贝bank的streaming目录下,这样就会在不需要提交的客户端上,出现更新的文件。这个很讨厌,如何避免呢?
我采用的写入变量到文件,读取变量然后直接忽略拷贝的操作。
具体操作如下:
private static string m_fmodSettingPath = Application.persistentDataPath + "/fmodSetting.txt";
private static void WriteFmodSetting(int ignoreCopyBank = 0)
{
try
{
if (!File.Exists(m_fmodSettingPath))
{
File.Create(m_fmodSettingPath).Dispose();
}
File.WriteAllLines(m_fmodSettingPath, new string[] { "ignoreCopyBank=" + ignoreCopyBank });
}
catch(Exception ex)
{
Debug.LogError(ex.ToString());
}
}
private static bool ReadFmodSetting()
{
try
{
if (!File.Exists(m_fmodSettingPath)) return false;
string[] lines = File.ReadAllLines(m_fmodSettingPath);
if (lines.Length <= 0) return false;
string[] strs = lines[0].Split('=');
if (strs.Length < 2) return false;
int flag = 0;
int.TryParse(strs[1], out flag);
return flag > 0;
}
catch (Exception ex)
{
Debug.LogError(ex.ToString());
return false;
}
}
在每次编译DLL的时候,这个Update会被执行:
static void Update()
{
if (firstUpdate)
{
m_autoRefresh = ReadFmodSetting(); //这里读取变量
RefreshBanks();
……
}
if (lastCheckTime + FilePollTimeSeconds < Time.realtimeSinceStartup)
{
if(m_autoRefresh)
{
RefreshBanks();
}
lastCheckTime = Time.realtimeSinceStartup;
}
}
提供操作菜单:
[MenuItem("FMOD/Start Auto Refresh Banks")]
public static void StartAutoRefreshBanks()
{
WriteFmodSetting(0);
}
[MenuItem("FMOD/Stop Auto Refresh Banks")]
public static void StopAutoRefreshBanks()
{
WriteFmodSetting(1);
}
在拷贝bank的地方:
public static void CopyToStreamingAssets()
{
if (m_autoRefresh) return; //这里如果读取的变量是true,则直接返回,不进行拷贝操作
if (EditorUtils.GetBankDirectory() == null)
return;
******
}
这样就避免了,重新编译工程就会重置static变量的问题了。