Сборка командной строки Unity требует UnityEditor.BuildPipeline, но сборка завершается неудачно из-за отсутствия ссылки «UnityEditor» - PullRequest
0 голосов
/ 08 июля 2019

В настоящее время я пытаюсь создать командный файл для сборки командной строки простого проекта Unity.
Текущая среда:
* Windows 10
* Unity 2017.4.19f1 (Personal)
* Автономная сеть

Проект состоит из простой сцены, которая прекрасно работает в UnityEditor.После неудачной попытки получить хорошую сборку я сократил свой сценарий сборки и командный файл до следующего:

BareBoneBuild.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using UnityEditor;

namespace Assets.BuildScripts
{
    class BareBoneBuild
    {
        private static string windowsBuildFolderPath = "G:/dev/projects/SimpleProject";

        static void PerformBuild()
        {
            string[] scenes = { "Assets/Scenes/DetectionTest.cs" };
            BuildPipeline.BuildPlayer(scenes, windowsBuildFolderPath + "/junk.exe", BuildTarget.StandaloneWindows, BuildOptions.None);
        }
    }
}

BareBoneBuild.bat

title Unity Build

echo Launching Unity Build...
"C:\Program Files\Unity\Editor\Unity.exe" ^
-batchmode ^
-projectPath G:\dev\projects\SimpleProject ^
-executeMethod Assets.BuildScripts.BareBoneBuild.PerformBuild ^
-quit ^
-logFile G:\dev\projects\SimpleProject\logs\BareBoneBuild.log

echo Build Finished!

PAUSE

BareBoneBuild.log (фрагмент)

...
-----CompilerOutput:-stdout--exitcode: 1--compilationhadfailure: True--outfile: Temp/Assembly-CSharp.dll
Compilation failed: 1 error(s), 0 warnings
-----CompilerOutput:-stderr----------
Assets/BuildScripts/BareBoneBuild.cs(6,7): error CS0246: The type or namespace name `UnityEditor' could not be found. Are you missing an assembly reference?
-----EndCompilerOutput---------------
- Finished compile Library/ScriptAssemblies/Assembly-CSharp.dll
Assets/BuildScripts/BareBoneBuild.cs(6,7): error CS0246: The type or namespace name `UnityEditor' could not be found. Are you missing an assembly reference?**

(Filename: Assets/BuildScripts/BareBoneBuild.cs Line: 6)

DisplayProgressNotification: Build Failed
Error building Player because scripts had compiler errors

(Filename:  Line: -1)
...

EVERY учебник, блог, видео на YouTube,форум
* https://docs.unity3d.com/2017.4/Documentation/Manual/CommandLineArguments.html
* http://jonathanpeppers.com/Blog/automating-unity3d-builds-with-fake
* https://www.youtube.com/watch?v=4J3SmhGxO1Y * другие ... что у меня нет ссылок на

Я просматривал состоянияэтот BuildPipeline.BuildPlayer - это способ построить проект из командной строки.BuildPipeline находится внутри библиотеки UnityEditor.

Что я делаю не так?Я все еще новичок в Unity, поэтому любое очевидное решение, вероятно, является правильным.

Заранее спасибо за любые рекомендации!

1 Ответ

1 голос
/ 08 июля 2019

Вы не можете иметь using UnityEditor; в билде.Он лишен.


Это необходимо только в сценарии редактора, а не в сборке, поэтому:

  • Либо используйте #ifпрепроцессоры обертывают все, используя это как

    #if UNITY_EDITOR
        using UnityEditor;
    #endif
    
    ...
    
    #if UNITY_EDITOR
        // anything using UnityEidtor e.g. the method or entire class
    #endif
    
  • или в вашем случае просто переместите весь сценарий в папку с именем Editor, которая удаляет весь сценарий дляbuild (см. Специальные имена папок ).

    На самом деле это также упоминается - хотя и не очень хорошо объясняется - вашей ссылкой :

    Тогда вам понадобится класс в вашем проекте Unity в папке Editor , например, в этом примере Android:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...