Unity3D的項目,這周吃虧在宏上了。大背景是項目需要在Unity中用Hudson自動生成不同平臺的版本。
成都創(chuàng)新互聯公司長期為上千多家客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態(tài)環(huán)境。為科爾沁左翼企業(yè)提供專業(yè)的網站設計、成都網站建設,科爾沁左翼網站改版等技術服務。擁有10年豐富建站經驗和眾多成功案例,為您定制開發(fā)。程序設計語言的預處理的概念:在編譯之前進行的處理。
#if UNITY_WEBPLAYER
BuildTarget target = BuildTarget.WebPlayer;
#elif UNITY_STANDALONE_WIN && UNITY_EDITOR
BuildTarget target = BuildTarget.StandaloneWindows;
#elif UNITY_ANDROID
BuildTarget target = BuildTarget.Android;
#else
BuildTarget target = BuildTarget.iPhone;
#endif
#if UNITY_WEBPLAYER
public const string AssetRootPath = AutomaticBuild.WebPlatFormDataPath + "/";
#elif UNITY_STANDALONE_WIN && UNITY_EDITOR
public const string AssetRootPath = AutomaticBuild.WinPlatFormDataPath + "/";
#elif UNITY_ANDROID
public const string AssetRootPath = AutomaticBuild.AndRoidPlatFormDataPath + "/";
#else
public const string AssetRootPath = AutomaticBuild.IOSPlatFormDataPath + "/";
#endif
如上面兩段代碼,打開Unity項目(例如PC & Mac Standalone保存的)之后,再打開項目的Script(這里用VS2008+VA),會發(fā)現上述加粗行高亮。即Target和AssetRootPath在編譯前已然確定,且之后不能對其做出變更。
當采用Unity支持的命令編譯時C:\program files\Unity\Editor>Unity.exe -quit -batchmode -executeMethod MyEditorScript.MyMethod
此時MyMethod可能用了如下代碼,
BuildPipeline.BuildPlayer( levels, "WebPlayerBuild", BuildTarget.WebPlayer, BuildOptions.None);但Target和AssetRootPath并沒有賦予應有的Web相應值,會造成生成的Unity3D文件能生成但不對,執(zhí)行BuildPlayer時會報Runtime Error錯。
不禁讓我想起Effective C++里的第2個條款:盡量以const, enum, inline替換 #define。果然金科玉律……
我的解決方式如下:
1.在MyMethod中先調用
private static string AssetRootPath = null;
public static string GetAssetRootPath()
{
if (AssetRootPath != null)
return AssetRootPath;
if (EditorUserBuildSettings.activeBuildTarget==BuildTarget.WebPlayer)
{
AssetRootPath = "WebData/LatestData/";
}
else if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android)
{
AssetRootPath = "AndroidData/LatestData/";
}
else if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows)
{
AssetRootPath = "WinData/LatestData/";
}
else
{
AssetRootPath = "IOSData/LatestData/";
}
return AssetRootPath;
}
public static BuildTarget GetBuildTarget()
{
return EditorUserBuildSettings.activeBuildTarget;
}
由于需求的小變更,小小地重構了上次的代碼:
ClearISingleFileSeries();}
轉載自:http://blog.csdn.net/pandawuwyj/article/details/7959335
另外有需要云服務器可以了解下創(chuàng)新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。