Unity是一款功能強(qiáng)大的游戲開發(fā)引擎,它提供了許多方便開發(fā)者使用的功能和工具。其中一個非常有用的功能是Unity命令行參數(shù)。通過使用命令行參數(shù),開發(fā)者可以在啟動Unity時自定義一些行為和設(shè)置,從而更好地管理和調(diào)試項目。
使用Unity命令行參數(shù)的好處是,它可以幫助開發(fā)者更好地管理和調(diào)試項目。通過在命令行中指定參數(shù),我們可以自動化一些常見的任務(wù),例如構(gòu)建項目、執(zhí)行測試、導(dǎo)出資源等。這不僅可以提高開發(fā)效率,還可以減少人為錯誤的發(fā)生。
當(dāng)然有些時候我們需要自己定義一個或者多個命令行參數(shù),比如我們要啟動一個服務(wù)器構(gòu)建、接入一個CI/CD,人手動操作肯定費(fèi)時費(fèi)力,而且不熟悉Unity編輯器的新手難免會出錯。
自帶參數(shù)
首先,在自定義參數(shù)前,我們先看一下自帶的命令行參數(shù)是否就能滿足我們的要求。在啟動Unity編輯器時,我們可以在命令行中添加參數(shù)來改變Unity的行為。這可以通過在命令行中輸入"Unity.exe -參數(shù)名 參數(shù)值"來實(shí)現(xiàn)。下面是一些常見的Unity命令行參數(shù)的示例:
1. -batchmode:這個參數(shù)可以讓Unity在無需用戶交互的情況下啟動并執(zhí)行指定的任務(wù)。這對于自動化構(gòu)建和持續(xù)集成非常有用。
2. -quit:這個參數(shù)可以讓Unity在啟動后立即退出,適用于需要在啟動時執(zhí)行某些任務(wù)但不需要打開Unity編輯器的情況。
3. -projectPath:這個參數(shù)可以指定Unity項目的路徑。通過在命令行中指定項目路徑,我們可以直接打開指定的項目而不需要手動選擇。
4. -executeMethod:這個參數(shù)可以指定在Unity啟動后立即執(zhí)行的方法。我們可以通過這個參數(shù)來自動運(yùn)行一些腳本或者執(zhí)行一些特定的操作。
5. -nographics:這個參數(shù)可以讓Unity在無需圖形界面的情況下啟動。這對于一些服務(wù)器或者非圖形環(huán)境下的使用非常有用。
除了上述示例外,Unity還提供了許多其他的命令行參數(shù),用于控制和定制Unity的行為。開發(fā)者可以根據(jù)自己的需求來選擇和使用這些參數(shù)。更多自帶參數(shù)請訪問:
Unity - Manual: Command-line arguments
一般來說,-executeMethod就能滿足很多人的要求,這塊可以執(zhí)行一個靜態(tài)類的靜態(tài)函數(shù)或者方法,發(fā)揮空間很足夠。當(dāng)然唯獨(dú)問題是如果函數(shù)方法里有參數(shù)需要傳遞,那么這肯定歇菜。如果你有這個需求,那么就往下看吧!
自定義參數(shù)
老規(guī)矩,情景教學(xué)!當(dāng)然還是基于我之前的一個公共repo去講
GitHub - Shepherd0619/JenkinsBuildUnity: A little script that connect Unity (with HybridCLR hot update) and Jenkins together.
假設(shè)你要自定義要打的場景及其順序、打包目標(biāo)地址,但是我們的Jenkins打包機(jī)不可能自己會打開Unity編輯器圖形界面修改BuildSettings里的場景設(shè)置對吧。
首先先在你的打包腳本(或者另起一個腳本放在Editor文件夾下),我們先獲取一下傳遞進(jìn)來的參數(shù)
// 獲取命令行參數(shù)
string[] args = Environment.GetCommandLineArgs();
拿到array以后,我們需要篩選出我們的自定義參數(shù),你可以寫一個方法
/// <summary>
/// 獲取某個參數(shù)
/// </summary>
/// <param name="args">全部的命令行參數(shù)</param>
/// <param name="name">要獲取的參數(shù)名稱</param>
/// <returns>所求參數(shù)</returns>
private static string[] GetArgument(string[] args, string name)
{
int start = Array.FindIndex(args, arg => arg == $"-{name}");
if (start < 0)
{
Console.WriteLine($"[JenkinsBuild.GetArgument] Can not find argument: {name}");
return null;
}
start++;
int end = Array.FindIndex(args, start, arg => arg[0] == '-');
if (end < 0) end = args.Length;
int count = end - start;
if (count <= 0)
{
Console.WriteLine($"[JenkinsBuild.GetArgument] Can not find argument value: {name}, Count: {count}, Start: {start}, End: {end}");
return null;
}
string[] result = args.Skip(start).Take(count).ToArray();
return result;
}
?用法可參考如下
// 獲取scenes參數(shù)
string[] scenes = GetArgument(args, "scenes");
if (scenes == null || scenes.Length <= 0) return;
// 獲取targetPath參數(shù)
string[] targetPath = GetArgument(args, "targetPath");
if (targetPath == null || targetPath.Length <= 0) return;
BuildPlayerOptions options = new BuildPlayerOptions();
options.target = BuildTarget.StandaloneLinux64;
options.subtarget = (int)StandaloneBuildSubtarget.Server;
options.scenes = scenes;
options.locationPathName = targetPath[0];
如代碼所示,至于怎么校驗(yàn)參數(shù)的有效性,要么判斷是否為空,要么看長度,兩項只要有一個有問題,那么直接return。?
Jenkins側(cè)
你可以在你Jenkins現(xiàn)有的Job上勾上This project is parameterized來配置參數(shù)。
然后在拉起Unity編輯器那塊引用上面的參數(shù),如${上面在Jenkins定義的參數(shù)名}
保存設(shè)置后,以后執(zhí)行job都會讓你配置參數(shù)了
文章來源:http://www.zghlxwxcb.cn/news/detail-804427.html
總結(jié)
總結(jié)起來,Unity命令行參數(shù)是一種非常有用的工具,可以幫助開發(fā)者更好地管理和調(diào)試項目。通過使用命令行參數(shù),我們可以在啟動Unity時自定義一些行為和設(shè)置,從而提高開發(fā)效率和減少錯誤。希望本文對大家了解和使用Unity命令行參數(shù)以及如何自定義有所幫助。文章來源地址http://www.zghlxwxcb.cn/news/detail-804427.html
到了這里,關(guān)于【Unity實(shí)戰(zhàn)】Jenkins與自定義命令行參數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!