如何通过指定场景名称的命令行构建 Unity WebGl?
How to build Unity WebGl via command line specifying Scene name?
我有一个带有一些场景的 WebGl Unity 应用程序。
我需要为每个场景做一个构建,假设 SceneA、SceneB、SceneC...
所以,为了构建我写道:
"C:\Program Files\Unity\Editor\Unity.exe" -buildTarget WebGL ... SceneName ?
问题是:
- 如何指定场景名称?
- 以及如何指定目标目录?
谢谢
请问命令行构建时如何指定使用哪些场景?如果是这样,这就是我的处理方式。
对于你的第一个问题,
How to specify SceneName ?
我不知道您是否可以在命令行中直接指定场景名称,但是您可以 运行 使用命令行的特定功能,可以更改为项目构建的场景。
这是您需要的片段,但可以根据您的用例进行更改
using UnityEditor;
class MyEditorScript
{
static void PerformBuild ()
{
string[] scenes = { "Assets/MyScene.unity" };
BuildPipeline.BuildPlayer(scenes, ...);
}
}
上面的代码片段非常简单,您直接指定每个场景,然后将其添加到您的构建设置中。您可以传入参数以获得不同的结果或创建多个函数,以最适合您的方式为准。下面是如何在命令行中调用此函数
"C:\Program Files\Unity\Editor\Unity.exe" -batchmode -executeMethod MyEditorScript.PerformBuild
我在这里使用 -batchmode
,这样如果出现任何提示,Unity 会将它们静音,这样流程就可以更加自动化。
关于你的第二个问题,
And how to specify destination directory ?
我不确定你是否想把你保存的目录和你构建的场景联系起来,但这可能会让一切变得更容易。有一个名为 BuildPlayerOptions.locationPathName
的构建设置,它允许您指定保存构建的位置
static void WebGLProductionBuild()
{
// Build the player.\
BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();
buildPlayerOptions.scenes = new[] { "Assets/Scene1.unity", "Assets/Scene2.unity" };
buildPlayerOptions.locationPathName = "yourLocationNameHere";
buildPlayerOptions.target = BuildTarget.WebGL;
buildPlayerOptions.options = BuildOptions.None; // set whatever you want here
BuildPipeline.BuildPlayer(buildPlayerOptions); // apply the setting changes
}
调用上面的方法除了函数调用和上面那行完全一样
"C:\Program Files\Unity\Editor\Unity.exe" -batchmode -executeMethod MyEditorScript.WebGLProductionBuild
我不相信你想要实现的目标可以完全从命令行完成,但这个答案非常接近。我也不确定你是否想要将场景和新路径捆绑在一起。如果您希望构建每个单独的场景并指定新路径,您可以通过使用 switch 语句创建一个新函数或只调用多个函数来实现。
Unity 已经提供了类似问题的答案 here。
您可以创建一种方法来进行构建验证、更改设置和构建不同的播放器。这些方法必须位于编辑器文件夹中的脚本文件中,例如 Assets/Editor/Builders/Builder.cs
。 class 也不需要扩展任何 Unity class - 唯一的要求是使用静态函数。
using UnityEditor;
using System;
class Builder
{
static void Build ()
{
string[] arguments = Environment.GetCommandLineArgs();
// ... your code here, validations, flag changes, etc.
// foreach(string arg in arguments)
// Filter...
string sceneName = argument[1];
string destinationDirectoryPath = arguments[2];
// Build the player.\
BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();
buildPlayerOptions.scenes = new[] { sceneName };
buildPlayerOptions.locationPathName = destinationDirectoryPath;
//buildPlayerOptions.target = "Your Target";
BuildPipeline.BuildPlayer(buildPlayerOptions);
}
}
然后您可以使用以下命令调用生成器函数:
- /Path/To/Unity -batchmode -executeMethod Builder.Build 场景名称
目的地目录路径
我有一个带有一些场景的 WebGl Unity 应用程序。 我需要为每个场景做一个构建,假设 SceneA、SceneB、SceneC...
所以,为了构建我写道:
"C:\Program Files\Unity\Editor\Unity.exe" -buildTarget WebGL ... SceneName ?
问题是:
- 如何指定场景名称?
- 以及如何指定目标目录?
谢谢
请问命令行构建时如何指定使用哪些场景?如果是这样,这就是我的处理方式。
对于你的第一个问题,
How to specify SceneName ?
我不知道您是否可以在命令行中直接指定场景名称,但是您可以 运行 使用命令行的特定功能,可以更改为项目构建的场景。
这是您需要的片段,但可以根据您的用例进行更改
using UnityEditor;
class MyEditorScript
{
static void PerformBuild ()
{
string[] scenes = { "Assets/MyScene.unity" };
BuildPipeline.BuildPlayer(scenes, ...);
}
}
上面的代码片段非常简单,您直接指定每个场景,然后将其添加到您的构建设置中。您可以传入参数以获得不同的结果或创建多个函数,以最适合您的方式为准。下面是如何在命令行中调用此函数
"C:\Program Files\Unity\Editor\Unity.exe" -batchmode -executeMethod MyEditorScript.PerformBuild
我在这里使用 -batchmode
,这样如果出现任何提示,Unity 会将它们静音,这样流程就可以更加自动化。
关于你的第二个问题,
And how to specify destination directory ?
我不确定你是否想把你保存的目录和你构建的场景联系起来,但这可能会让一切变得更容易。有一个名为 BuildPlayerOptions.locationPathName
的构建设置,它允许您指定保存构建的位置
static void WebGLProductionBuild()
{
// Build the player.\
BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();
buildPlayerOptions.scenes = new[] { "Assets/Scene1.unity", "Assets/Scene2.unity" };
buildPlayerOptions.locationPathName = "yourLocationNameHere";
buildPlayerOptions.target = BuildTarget.WebGL;
buildPlayerOptions.options = BuildOptions.None; // set whatever you want here
BuildPipeline.BuildPlayer(buildPlayerOptions); // apply the setting changes
}
调用上面的方法除了函数调用和上面那行完全一样
"C:\Program Files\Unity\Editor\Unity.exe" -batchmode -executeMethod MyEditorScript.WebGLProductionBuild
我不相信你想要实现的目标可以完全从命令行完成,但这个答案非常接近。我也不确定你是否想要将场景和新路径捆绑在一起。如果您希望构建每个单独的场景并指定新路径,您可以通过使用 switch 语句创建一个新函数或只调用多个函数来实现。
Unity 已经提供了类似问题的答案 here。
您可以创建一种方法来进行构建验证、更改设置和构建不同的播放器。这些方法必须位于编辑器文件夹中的脚本文件中,例如 Assets/Editor/Builders/Builder.cs
。 class 也不需要扩展任何 Unity class - 唯一的要求是使用静态函数。
using UnityEditor;
using System;
class Builder
{
static void Build ()
{
string[] arguments = Environment.GetCommandLineArgs();
// ... your code here, validations, flag changes, etc.
// foreach(string arg in arguments)
// Filter...
string sceneName = argument[1];
string destinationDirectoryPath = arguments[2];
// Build the player.\
BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();
buildPlayerOptions.scenes = new[] { sceneName };
buildPlayerOptions.locationPathName = destinationDirectoryPath;
//buildPlayerOptions.target = "Your Target";
BuildPipeline.BuildPlayer(buildPlayerOptions);
}
}
然后您可以使用以下命令调用生成器函数:
- /Path/To/Unity -batchmode -executeMethod Builder.Build 场景名称 目的地目录路径