【问题标题】:TeamCity could not build Unity3D projectTeamCity 无法构建 Unity3D 项目
【发布时间】:2015-09-02 10:40:39
【问题描述】:

我正在尝试使用 TeamCity 构建一个简单的 Unity3D 项目。问题是 TeamCity 找不到场景文件,我收到以下错误消息:

"C:\Program Files (x86)\Unity\Editor\Unity.exe" -batchMode -quit -nographics -projectPath C:\unityProject
[catting log file]
'' is an incorrect path for a scene file. BuildPlayer expects paths relative to the project folder.
'' is an incorrect path for a scene file. BuildPlayer expects paths relative to the project folder.

image 显示了我如何设置构建。当我在计算机上使用命令行运行构建时,构建项目没有问题,只需使用 TeamCity。 我在想是否有办法在编辑器中添加场景文件。我不想使用“方法执行”并运行 BuildPipeline.BuildPlayer() 方法。

【问题讨论】:

    标签: unity3d teamcity


    【解决方案1】:

    如果在您的构建命令scenes : String[] 参数中有空字符串'',则会发生错误。

    如果您将 AutoBuilder 脚本(C#JavaScript)放入项目中的任何 Assets/Editor 文件夹或子文件夹中,您可以轻松地从 -executeMethod 调用适合您的 Player OS 的构建脚本,如下所示:

    Unity -buildTarget android -executeMethod "AutoBuilder.PerformAndroidBuild"
    

    AutoBuilder 会像这样自动传递选定的场景:

    /**
     * Gets the paths of the activated scenes from the BuildSettings
     * @return {String[]} BuiltinArray of Strings
     */
    function GetScenePaths () {
        var scenes = new Array();
    
        for(var i : int = 0; i < EditorBuildSettings.scenes.Length; i += 1) {
    
            /**
             * Only add scene, if it is enabled in the build settings.
             */
            if (EditorBuildSettings.scenes[i].enabled) {
                scenes.Push(EditorBuildSettings.scenes[i].path);
            }
        }
    
        /**
         * Return a builtin array instead of a JavaScript Array
         */
        var builtinArray : String[] = scenes.ToBuiltin(String) as String[];
        return builtinArray;
    }
    

    您可以在此处找到 JavaScript 中的 AutoBuilder:https://github.com/geildanke/UNT.autobuilder(我将 C# AutoBuilder.cs 中的出色工作重写为 JavaScript,供喜欢 JavaScript 的人使用)

    【讨论】:

      【解决方案2】:

      有一个选项可以在您的图像上设置Execute Method。您是否创建了用于设置构建管道的静态构建类?

      例如(taken directly from docs):

      // C# example
      using UnityEditor;
      class MyEditorScript
      {
          static void PerformBuild ()
          {
              string[] scenes = { "Assets/MyScene.unity" };
              BuildPipeline.BuildPlayer(scenes, ...);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-09-19
        • 1970-01-01
        • 2017-10-08
        • 2018-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-25
        • 2012-04-11
        相关资源
        最近更新 更多