Ошибка при билде игры на unity

При попытке сделать билд под андроид выскакивает следующее:

CommandInvokationFailure: Gradle build failed. 
C:/Program Files/Unity/Hub/Editor/2019.4.40f1/Editor/Data/PlaybackEngines/AndroidPlayerOpenJDKbinjava.exe -classpath "C:Program FilesUnityHubEditor2019.4.40f1EditorDataPlaybackEnginesAndroidPlayerToolsgradlelibgradle-launcher-5.1.1.jar" org.gradle.launcher.GradleMain "-Dorg.gradle.jvmargs=-Xmx4096m" "assembleRelease"

stderr[

FAILURE: Build failed with an exception.

* Where:
Build file 'C:UsersArtomNew GameTempgradleOutlauncherbuild.gradle' line: 3

* What went wrong:
A problem occurred evaluating project ':launcher'.
> Failed to apply plugin [id 'com.android.application']
   > Your project path contains non-ASCII characters. This will most likely cause the build to fail on Windows. Please move your project to a different directory. See http://b.android.com/95744 for details. This warning can be disabled by adding the line 'android.overridePathCheck=true' to gradle.properties file in the project directory.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1s
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
]
stdout[

]
exit code: 1
UnityEditor.Android.Command.WaitForProgramToRun (UnityEditor.Utils.Program p, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at <dd2e71f8d45046b88d6d3169a8084aec>:0)
UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at <dd2e71f8d45046b88d6d3169a8084aec>:0)
UnityEditor.Android.Command.Run (System.String command, System.String args, System.String workingdir, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at <dd2e71f8d45046b88d6d3169a8084aec>:0)
UnityEditor.Android.AndroidJavaTools.RunJava (System.String args, System.String workingdir, System.Action`1[T] progress, System.String error) (at <dd2e71f8d45046b88d6d3169a8084aec>:0)
UnityEditor.Android.GradleWrapper.Run (UnityEditor.Android.AndroidJavaTools javaTools, System.String workingdir, System.String task, System.Action`1[T] progress) (at <dd2e71f8d45046b88d6d3169a8084aec>:0)
Rethrow as GradleInvokationException: Gradle build failed
UnityEditor.Android.GradleWrapper.Run (UnityEditor.Android.AndroidJavaTools javaTools, System.String workingdir, System.String task, System.Action`1[T] progress) (at <dd2e71f8d45046b88d6d3169a8084aec>:0)
UnityEditor.Android.PostProcessor.Tasks.BuildGradleProject.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <dd2e71f8d45046b88d6d3169a8084aec>:0)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <dd2e71f8d45046b88d6d3169a8084aec>:0)
Rethrow as BuildFailedException: Exception of type 'UnityEditor.Build.BuildFailedException' was thrown.
UnityEditor.Android.PostProcessor.CancelPostProcess.AbortBuild (System.String title, System.String message, System.Exception ex) (at <dd2e71f8d45046b88d6d3169a8084aec>:0)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <dd2e71f8d45046b88d6d3169a8084aec>:0)
UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (UnityEditor.BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at <dd2e71f8d45046b88d6d3169a8084aec>:0)
UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args, UnityEditor.BuildProperties& outProperties) (at <dd2e71f8d45046b88d6d3169a8084aec>:0)
UnityEditor.PostprocessBuildPlayer.Postprocess (UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target, System.String installPath, System.String companyName, System.String productName, System.Int32 width, System.Int32 height, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at <7105be432fb64891b07085914e6cd5c1>:0)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

Ошибка при билде игры на Андроид.

Ошибка при билде игры на Андроид.

Появляются 3 ошибки когда билдется на Андроид(а точнее когда уже почти добилделась) и перестаёт билдится.

Первая

Вторая

Третья

И ещё это — Error building Player: 2 errors

Аватара пользователя
Arsenii
UNец
 
Сообщения: 26
Зарегистрирован: 01 ноя 2017, 21:30

Re: Ошибка при билде игры на Андроид.

Сообщение ustas235 25 мар 2018, 14:14

Я кончечно могу ошибаться, но судя по этой строчке у тебя чете не то с библиотеками
The SDK Build Tools revision (23.0.2) is too low for project ‘gradleOut’. Minimum required is 25.0.0
загрузи в андройд студио SDK Build Tools версию 25.0.0

ustas235
UNец
 
Сообщения: 23
Зарегистрирован: 25 мар 2018, 10:24

Re: Ошибка при билде игры на Андроид.

Сообщение Arsenii 25 мар 2018, 16:37

У меня нет андроид студио. Он много весит?

Аватара пользователя
Arsenii
UNец
 
Сообщения: 26
Зарегистрирован: 01 ноя 2017, 21:30


Re: Ошибка при билде игры на Андроид.

Сообщение Valerich 25 мар 2018, 17:29

Да не то что бы много — (~600мб и более в зависимости с sdk или нет) Sdk tool -130мб.
Вы проект хотите в Android Studio собирать? Или в Unity?

Minimum required is 25.0.0

Тут все само собой говорит.

Аватара пользователя
Valerich
UNITрон
 
Сообщения: 328
Зарегистрирован: 07 сен 2016, 11:24

Re: Ошибка при билде игры на Андроид.

Сообщение Arsenii 25 мар 2018, 18:28

Не понял «собирать». Я просто хочу сбилдеть игру чтобы играть на телефоне.

Я переустановил SDK, JDK, Java но луче не стало.
В SDK 26 нет SDK manager.exe но есть sdkmanager.bat который не запускается также есть android.bat который тоже не запускается.
Пробовал сделать так

Не запускается Android SDK Manager

, тоже не работает.
Пробовал устанавливать SDK 24 версии чтобы обновится в менежире, не устанавливается, требует JDK старой версии(как я понял).
Потратил целый день и так и не продвинулся в этом вопросе.

Аватара пользователя
Arsenii
UNец
 
Сообщения: 26
Зарегистрирован: 01 ноя 2017, 21:30

Re: Ошибка при билде игры на Андроид.

Сообщение Valerich 25 мар 2018, 18:43

Понятно.
Тут читали? http://unity3d.ru/distribution/viewtopic.php?f=20&t=42449&start=15

не устанавливается, требует JDK старой версии

может в переменных средах(винды) не прописаны пути к jdk?

Java/jdk1.8.0_131binjava.exe

Ну это и так «старая».
Можете и не скачивать студию а достаточно sdk tools поставить и jdk 32x битную (например), прописав пути, обновить api через sdk manager, далее в unity уже выбрать целевую платформу — то есть android :)

Аватара пользователя
Valerich
UNITрон
 
Сообщения: 328
Зарегистрирован: 07 сен 2016, 11:24

Re: Ошибка при билде игры на Андроид.

Сообщение Arsenii 25 мар 2018, 19:57

До того как взялся переустанавливать я пытался обновить SDK через Unity во время билденга когда он говорил что версия устарела но если согласится на обновление он выдавал ошибку.
Unity хочет SDK <= 25 но у меня с этим проблемы по этому я и спрашиваю.
JDK старый в ошибки потом что эта ошибка ещё до переустановки JDK.

Аватара пользователя
Arsenii
UNец
 
Сообщения: 26
Зарегистрирован: 01 ноя 2017, 21:30

Re: Ошибка при билде игры на Андроид.

Сообщение Valerich 25 мар 2018, 21:34

Unity хочет SDK <= 25

Ну значит надо ему 25 или 24 версию скачать !)

В SDK 26 нет SDK manager.exe но есть sdkmanager.bat который не запускается также есть android.bat который тоже не запускается.

https://answers.unity.com/questions/132 … -to-l.html

viewtopic.php?f=20&t=42449&start=15

Тут надо обновлять в зависимости какая версия у вас unity, (например 5.6.4 у меня, и к ней и в настройках (minimum api level это 16-й то бишь андроид 4.1) и в sdk уровень API -16 -который должен быть установлен/ загружен лучше все это вручную а не через Unity)
У меня тут самый минимум(скрины), у вас что?

Этот минимум весит 5гб, а не 20 как у меня было со всеми считай api, на юнити старых версий :D
В настройках unity в Preferences в External Tools все находится? указанны папки JDK и SDK?
Даже не знаю, вроде все.

Аватара пользователя
Valerich
UNITрон
 
Сообщения: 328
Зарегистрирован: 07 сен 2016, 11:24

Re: Ошибка при билде игры на Андроид.

Сообщение djon801 26 мар 2018, 00:53

Да всё это шляпа лысая с этим новым SDK Manager,на старом у меня на всех версиях билдилось,я 2 года назад старый SDK Manager обнавлял,и на юни2017 норм работало,пока диски все не отфармотировал.и теперь у меня такаяже беда.Дайте люди сетапку старого SDK Manager.и будет нам счастье,я уже 4 дня голову ломаю.Парнишка видемо тоже влип
Поделитесь устоновщиком того что на скринах выше
В пекло все эти андроид студии))

Аватара пользователя
djon801
Старожил
 
Сообщения: 506
Зарегистрирован: 03 май 2014, 15:08

Re: Ошибка при билде игры на Андроид.

Сообщение BFZ 26 мар 2018, 02:31

у меня с андроид студио все работает нормально

BFZ
UNITрон
 
Сообщения: 252
Зарегистрирован: 28 июн 2017, 02:16


Re: Ошибка при билде игры на Андроид.

Сообщение Valerich 26 мар 2018, 16:25

Arsenii Ну чего как разобрался? Все работает? Получилось?

Аватара пользователя
Valerich
UNITрон
 
Сообщения: 328
Зарегистрирован: 07 сен 2016, 11:24

Re: Ошибка при билде игры на Андроид.

Сообщение 1max1 26 мар 2018, 17:11

Аватара пользователя
1max1
Адепт
 
Сообщения: 5430
Зарегистрирован: 28 июн 2017, 10:51

Re: Ошибка при билде игры на Андроид.

Сообщение Valerich 26 мар 2018, 17:31

У меня вчера был sdk 24.4.1 (на моих скринах он, но я повысил вчера версию до 25.2.5 ) — И все равно все работает. :)
djon801 — уже в отписался в теме iPhone & Android так что у него все нормально и работает) Он установил 10 jdk вместо 1.8 и из за этого не работало… Сейчас все ок!(у него) :-bd

Аватара пользователя
Valerich
UNITрон
 
Сообщения: 328
Зарегистрирован: 07 сен 2016, 11:24


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12



Использовать сторонние JDK, SDK и прочие инструменты при билде на андроид — плохая практика.

Чтобы исключить вероятность ошибок, лучше использовать те инструменты, которые предлагает установить Unity Hub во время установки движка с поддержкой сборки на Androird.

Они будут своего рода «родными» для движка, а также активно поддерживаться при обновлениях.

Лично я уже был в аналогичной ситуации, и решил проблему с помощью переустановки Unity, не забыв установить все предложенные UnityHub инструменты разработки.

SALAZAR

9.04.2022

Не совсем понял о чем речь. Скажу так. Инвентарь реализовывается через ScriptableObject. И после выхода из игры данные не будут сохраняться сами, если ты их не сохранишь в ручную.

Ответить

Развернуть ветку

SALAZAR

9.04.2022

К примеру если ты запустил билд, собрал в какой-то префаб (зачем в префаб вообще?) айтемы, то когда выйдешь из игры и зайдешь обратно. Инвентарь будет пустой, а айтемы будут на своих местах.

Ответить

Развернуть ветку

Денис Кадыков

9.04.2022

Сталкивался с другим. Физика работала по другому когда собирал ехе. Дело оказалось в настройках Ригибоди. В частности столкновений и интерполяции. Выставил по дефолту и проблемы исчезли. Что конечно жесть.

Думаю что для вашей проблемы можно попробовать что то подобное.

Ответить

Развернуть ветку

mx

9.04.2022

Тот, кто подбирает CharacterController? Если просто Collider, то добавь Kinetic Rigidbody.

Ответить

Развернуть ветку

Александр Бессонов

9.04.2022

Ещё иногда со статиком проблемы при компиляции возникают. Так например текст меш про со статиком у меня при компиляции ставился в 000 координаты.

Ответить

Развернуть ветку

#unity3d

#unity3d

Вопрос:

Когда я пытаюсь собрать игру, появляется ошибка 22, когда я пытаюсь играть в редакторе, все в порядке.

Я новичок в Unity, поэтому извините, если я допустил какую-то глупую ошибку.

Ошибки:

(Местоположение) (): ошибка CS0234: имя типа или пространства имен «XXXX» не существует в пространстве имен » (вам не хватает ссылки на сборку?)

где XXXX: GraphView (библиотека UnityEditor.Экспериментальный), UIElements (библиотека UnityEditor)

(Местоположение)): ошибка CS0246: не удалось найти тип или имя пространства имен ‘ГГГГ’ (вам не хватает директивы using или ссылки на сборку?)

ГГГГ = Edge, Node, Port, Direction, EditorWindow, MenuItemAttribute, MenuItem

и еще одна ошибка

UnityEditor.BuildPlayerWindow BuildMethodException: 20 ошибок в UnityEditor.BuildPlayerWindow defaultbuildметоды.BuildPlayer (UnityEditor.Параметры BuildPlayerOptions)[0x002bb] в :0

Вот код:

DialogueGraphView

 using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEditor.Experimental.GraphView;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.UIElements;
using Button = UnityEngine.UIElements.Button;

public class DialogueGraphView : GraphView
{
        public readonly Vector2 DefaultNodeSize = new Vector2(200, 150);
        public readonly Vector2 DefaultCommentBlockSize = new Vector2(300, 200);
        public DialogueNode EntryPointNode;

        public DialogueGraphView(DialogueGraph editorWindow)
        {
            styleSheets.Add(Resources.Load<StyleSheet>("NarrativeGraph"));
            SetupZoom(ContentZoomer.DefaultMinScale, ContentZoomer.DefaultMaxScale);

            this.AddManipulator(new ContentDragger());
            this.AddManipulator(new SelectionDragger());
            this.AddManipulator(new RectangleSelector());
            this.AddManipulator(new FreehandSelector());

            var grid = new GridBackground();
            Insert(0, grid);
            grid.StretchToParentSize();

            AddElement(GetEntryPointNodeInstance());
        }

        public void CreateNewDialogueNode(string nodeName, Vector2 position)
        {
            AddElement(CreateNode(nodeName, position));
        }

        public DialogueNode CreateNode(string nodeName, Vector2 position)
        {
            var tempDialogueNode = new DialogueNode()
            {
                title = nodeName,
                DialogueText = nodeName,
                GUID = Guid.NewGuid().ToString()
            };
            tempDialogueNode.styleSheets.Add(Resources.Load<StyleSheet>("Node"));
            var inputPort = GetPortInstance(tempDialogueNode, Direction.Input, Port.Capacity.Multi);
            inputPort.portName = "Input";
            tempDialogueNode.inputContainer.Add(inputPort);
            tempDialogueNode.RefreshExpandedState();
            tempDialogueNode.RefreshPorts();
            tempDialogueNode.SetPosition(new Rect(position,
                DefaultNodeSize)); //To-Do: implement screen center instantiation positioning

            var textField = new TextField("");
            textField.RegisterValueChangedCallback(evt =>
            {
                tempDialogueNode.DialogueText = evt.newValue;
                tempDialogueNode.title = evt.newValue;
            });
            textField.SetValueWithoutNotify(tempDialogueNode.title);
            tempDialogueNode.mainContainer.Add(textField);

            var button = new Button(() => { AddChoicePort(tempDialogueNode); })
            {
                text = "Add Choice"
            };
            tempDialogueNode.titleButtonContainer.Add(button);
            return tempDialogueNode;
        }

        public void AddChoicePort(DialogueNode nodeCache, string overriddenPortName = "")
        {
            var generatedPort = GetPortInstance(nodeCache, Direction.Output);
            var portLabel = generatedPort.contentContainer.Q<Label>("type");
            generatedPort.contentContainer.Remove(portLabel);

            var outputPortCount = nodeCache.outputContainer.Query("connector").ToList().Count();
            var outputPortName = string.IsNullOrEmpty(overriddenPortName)
                ? $"Option {outputPortCount   1}"
                : overriddenPortName;


            var textField = new TextField()
            {
                name = string.Empty,
                value = outputPortName
            };
            textField.RegisterValueChangedCallback(evt => generatedPort.portName = evt.newValue);
            generatedPort.contentContainer.Add(new Label("  "));
            generatedPort.contentContainer.Add(textField);
            var deleteButton = new Button(() => RemovePort(nodeCache, generatedPort))
            {
                text = "X"
            };
            generatedPort.contentContainer.Add(deleteButton);
            generatedPort.portName = outputPortName;
            nodeCache.outputContainer.Add(generatedPort);
            nodeCache.RefreshPorts();
            nodeCache.RefreshExpandedState();
        }

        private void RemovePort(Node node, Port socket)
        {
            var targetEdge = edges.ToList()
                .Where(x => x.output.portName == socket.portName amp;amp; x.output.node == socket.node);
            if (targetEdge.Any())
            {
                var edge = targetEdge.First();
                edge.input.Disconnect(edge);
                RemoveElement(targetEdge.First());
            }

            node.outputContainer.Remove(socket);
            node.RefreshPorts();
            node.RefreshExpandedState();
        }

        private Port GetPortInstance(DialogueNode node, Direction nodeDirection,
            Port.Capacity capacity = Port.Capacity.Single)
        {
            return node.InstantiatePort(Orientation.Horizontal, nodeDirection, capacity, typeof(float));
        }

        private DialogueNode GetEntryPointNodeInstance()
        {
            var nodeCache = new DialogueNode()
            {
                title = "START",
                GUID = Guid.NewGuid().ToString(),
                DialogueText = "ENTRYPOINT",
                EntryPoint = true
            };

            var generatedPort = GetPortInstance(nodeCache, Direction.Output);
            generatedPort.portName = "Next";
            nodeCache.outputContainer.Add(generatedPort);

            nodeCache.capabilities amp;= ~Capabilities.Movable;
            nodeCache.capabilities amp;= ~Capabilities.Deletable;

            nodeCache.RefreshExpandedState();
            nodeCache.RefreshPorts();
            nodeCache.SetPosition(new Rect(100, 200, 100, 150));
            return nodeCache;
        }
}
 

GraphSaveUtility

 using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using UnityEditor;
using UnityEditor.Experimental.GraphView;
using UnityEngine;
using UnityEngine.UIElements;

public class GraphSaveUtility
{
    private DialogueGraphView _targetGraphView;
    private DialogueContainer _containerCache;

    private List<Edge> Edges => _targetGraphView.edges.ToList();
    private List<DialogueNode> Nodes => _targetGraphView.nodes.ToList().Cast<DialogueNode>().ToList();
    public static GraphSaveUtility GetInstance(DialogueGraphView targetGraphView) {
        return new GraphSaveUtility {
            _targetGraphView = targetGraphView
        };
    }

    public void SaveGraph(string Filename) 
    {
        if(!Edges.Any()) return;

        var dialogueContainer = ScriptableObject.CreateInstance<DialogueContainer>();

        var connectedPorts = Edges.Where(x => x.input.node!=null).ToArray();

        for (var i = 0; i < connectedPorts.Length; i  ) 
        {
            var outputNode = connectedPorts[i].output.node as DialogueNode;
            var inputNode = connectedPorts[i].input.node as DialogueNode;

            dialogueContainer.NodeLinks.Add(new NodeLinkData {
                BaseNodeGuid = outputNode.GUID,
                PortName = connectedPorts[i].output.portName,
                TargetNodeGuid = inputNode.GUID
            });
        }

        foreach(var DialogueNode in Nodes.Where(node=>!node.EntryPoint)) 
        {
            dialogueContainer.DialogueNodeData.Add(new DialogueNodeData{
                GUID = DialogueNode.GUID,
                DialogueText = DialogueNode.DialogueText,
                Position = DialogueNode.GetPosition().position
            });
        }

        if(!AssetDatabase.IsValidFolder("Assets/Resources"))
            AssetDatabase.CreateFolder("Assets", "Resources");

        AssetDatabase.CreateAsset(dialogueContainer, "Assets/Resources/{fileName}.asset");
        AssetDatabase.SaveAssets();
    }

    public void  LoadGraph(string Filename) {
        _containerCache = Resources.Load<DialogueContainer>(Filename);
        if(_containerCache == null) {
            EditorUtility.DisplayDialog("File not Found", "Target dialogue graph file does not exists!", "OK");
            return;
        }

        ClearGraph();
        CreateNodes();
        ConnectNodes();
    }

    private void ClearGraph() {
        Nodes.Find(x => x.EntryPoint).GUID = _containerCache.NodeLinks[0].BaseNodeGuid;

        foreach (var node in Nodes) {
            if (node.EntryPoint) return;

            Edges.Where(x => x.input.node==node).ToList()
            .ForEach(edge => _targetGraphView.RemoveElement(edge));

            _targetGraphView.RemoveElement(node);
        }
    }

private void ConnectNodes() {
    for (var i = 0; i < Nodes.Count; i  )  {
        var connections = _containerCache.NodeLinks.Where(x=> x.BaseNodeGuid == Nodes[i].GUID).ToList();
        for (var j = 0; j < connections.Count; j  ) {
            var TargetNodeGuid = connections[j].TargetNodeGuid;
            var targetNode = Nodes.First( x => x.GUID == TargetNodeGuid);
            LinkNodes(Nodes[i].outputContainer[j].Q<Port>(), (Port) targetNode.inputContainer[0]);

            targetNode.SetPosition(new Rect(_containerCache.DialogueNodeData.First(x =>x.GUID==TargetNodeGuid).Position, _targetGraphView.DefaultNodeSize));
        }
    }
}

private void LinkNodes(Port output, Port input) {

    var tempEdge = new Edge {
        output = output,
        input = input
    };

    tempEdge.input.Connect(tempEdge);
    tempEdge.output.Connect(tempEdge);
    _targetGraphView.Add(tempEdge);

}


    private void CreateNodes() {
        foreach (var nodeData in _containerCache.DialogueNodeData) {
            var tempNode = _targetGraphView.CreateNode(nodeData.DialogueText, Vector2.zero);
            tempNode.GUID = nodeData.GUID;
            _targetGraphView.AddElement(tempNode);

            var nodePorts = _containerCache.NodeLinks.Where(x => x.BaseNodeGuid==nodeData.GUID).ToList();
            nodePorts.ForEach(x => _targetGraphView.AddChoicePort(tempNode, x.PortName));
        }
    }

}
 

DialogueNode

 using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor.Experimental.GraphView;
using UnityEngine;

    public class DialogueNode : Node
    {
        public string DialogueText;
        public string GUID;
        public bool EntryPoint = false;
    } 

DialogueGraph

 using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEditor.Experimental.GraphView;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;

    public class DialogueGraph : EditorWindow
    {
        private string _fileName = "New Narrative";

        private DialogueGraphView _graphView;
        private DialogueContainer _dialogueContainer;

        [MenuItem("Graph/Narrative Graph")]
        public static void CreateGraphViewWindow()
        {
            var window = GetWindow<DialogueGraph>();
            window.titleContent = new GUIContent("Narrative Graph");
        }

        private void ConstructGraphView()
        {
            _graphView = new DialogueGraphView(this)
            {
                name = "Narrative Graph",
            };
            _graphView.StretchToParentSize();
            rootVisualElement.Add(_graphView);
        }

        private void GenerateToolbar()
        {
            var toolbar = new Toolbar();

            var fileNameTextField = new TextField("File Name:");
            fileNameTextField.SetValueWithoutNotify(_fileName);
            fileNameTextField.MarkDirtyRepaint();
            fileNameTextField.RegisterValueChangedCallback(evt => _fileName = evt.newValue);
            toolbar.Add(fileNameTextField);

            toolbar.Add(new Button(() => RequestDataOperation(true)) {text = "Save Data"});

            toolbar.Add(new Button(() => RequestDataOperation(false)) {text = "Load Data"});
            // toolbar.Add(new Button(() => _graphView.CreateNewDialogueNode("Dialogue Node")) {text = "New Node",});
            rootVisualElement.Add(toolbar);
        }

        private void RequestDataOperation(bool save)
        {
            if (!string.IsNullOrEmpty(_fileName))
            {
                var saveUtility = GraphSaveUtility.GetInstance(_graphView);
                if (save)
                    saveUtility.SaveGraph(_fileName);
                else
                    saveUtility.LoadGraph(_fileName);
            }
            else
            {
                EditorUtility.DisplayDialog("Invalid File name", "Please Enter a valid filename", "OK");
            }
        }

        private void OnEnable()
        {
            ConstructGraphView();
            GenerateToolbar();
            GenerateMiniMap();
        }

        private void GenerateMiniMap()
        {
            var miniMap = new MiniMap {anchored = true};
            var cords = _graphView.contentViewContainer.WorldToLocal(new Vector2(this.maxSize.x - 10, 30));
            miniMap.SetPosition(new Rect(cords.x, cords.y, 200, 140));
            _graphView.Add(miniMap);
        }

        private void OnDisable()
        {
            rootVisualElement.Remove(_graphView);
        }
    } 

Комментарии:

1. Материал редактора недоступен для окончательной сборки

2. Значит, я должен отключать эти скрипты, когда хочу создать игру?

Ответ №1:

Как сказал кто-то в комментариях, Unity не может создавать материалы, использующие UnityEditor пространство имен. Однако при сборке Unity будет игнорировать все, что находится внутри папок с именем «Редактор». Поместите все те сценарии, которые вызывают проблемы, в папку с именем «Редактор», и она должна скомпилироваться без ошибок. У вас также может быть более одной папки «Editor», поэтому, если вам нужно различать ваши скрипты редактора, не стесняйтесь это делать.

Понравилась статья? Поделить с друзьями:
  • Ошибка при аутентификации карты меркурий
  • Ошибка при аутентификации в есиа
  • Ошибка при активации ключа виндовс 10 0x8007007b
  • Ошибка при аутентификации в dayz
  • Ошибка при активации ключа 0xc004f063