Jump to content

Как "заставить" выполняться EditorLogic?


Recommended Posts

Posted

Добрый день! Можете подсказать такой момент, я не могу понять почему не выполняются методы кастомного класса EditorLogic?

В силу того, что как я понимаю в движке нет возможности как-то указать чтобы методы Компонента вызывались в Editor, без запуска отдельного инстанса приложения, то порой пытался (возможно это костыльно) что-то отрисовать посредством Visualizer, или выполнить другую простую логику через EditorLogic. Но каждый раз настраивая по шагам как указано в документации, не могу заставить работать этот класс. Что я делаю не так?

В main.sh (использую C# в проекте), я подключаю и передаю Экземпляр AppEditorLogic в Engine.Main описано в доке. И конечно же AppEditorLogic расширяет Editorlogic.
Запускаю и через Browser и через батник (в целом как понял разницы в данном случае никакой т.к какой-то аргумент необходимый для передачи при запуске, чтобы указать чтобы использовать Кастомный EditorLogic, такого нет)

А создание отдельной папки editor2 в проекте насколько понимаю это если бы проект использовал UnigineScript. (но для пробы тоже создавал ее по документации но естественно ни на что не влияло)
 

namespace UnigineApp
{
    public partial class AppEditorLogic : EditorLogic
    {

 

namespace UnigineApp
{
    internal class UnigineApp
    {
        [STAThread]
        private static void Main(string[] args)
        {
            Engine.Init(args);
 
            AppSystemLogic systemLogic = new AppSystemLogic();
            AppWorldLogic worldLogic = new AppWorldLogic();
            AppEditorLogic editorLogic = new AppEditorLogic();
 
            Engine.Main(systemLogic, worldLogic, editorLogic);
 
            Engine.Shutdown();
        }
    }
}
Posted

Hello friend,

I'm able to read your message through the browser translator, hopefully i read your question right, i tried to achieve a similar thing a few weeks ago, running my component in editor, but silent told me that you can't do it in the normal way since that builds an playable executable directly, thus you have to create an engine plugin for that, which isn't very hard.

Here is my question on the forum, you should read silent's reply-

 

  • Like 1
Posted

Hi, Umang.Raj! Thank you very much for the answer and the link to a similar question. Yes, I've come across this topic before. But, trying to understand the concepts of the engine and architecture, I decided that the EditorLogic class allows you to expand the capabilities of the current editor. But, apparently, I misunderstood its meaning, then only through plugins.

I
'll try to figure them out later, thanks again.

  • Like 1
Posted

Здравствуйте, Иван,

Quote

я не могу понять почему не выполняются методы кастомного класса EditorLogic?

А можете сказать какие именно методы не вызываются? Какую версию SDK вы используете? И не могли бы написать какую задачу вы решаете чуть подбробнее?

Пытаюсь понять зачем вам именно EditorLogic, так как в последней версии SDK мы вообще убрали пример этого класса из поставляемых исходников пользовательских проектов.

В этом классе пишется логика для написания своего редактора. Но, увы есть наследие, которое до сих пор остаётся в коде. То есть даже если вы решили написать свой редактор, то чтобы заставить его работать надо пройти еще более тернистый путь. Нужно либо вызвать команду "editor_load filename.usc" или метод Unigine::Editor::load("filename.usc"); при этом файл, написанный на UnigineScript должен быть примерно с подобным содержанием:

int init()
{
  return 1;
}

int update()
{
  return 1;
}

int shutdown()
{
  return 1;
}

 

Quote

каждый раз настраивая по шагам как указано в документации

В какой раздел документации вы смотрели?

 

Posted

Здравствуйте, Виктор!

1) Насчет документации, я смотрел в разделе архитектуры движка:

--> https://developer.unigine.com/ru/docs/future/code/fundamentals/engine_architecture/


Логика приложения может быть реализована непосредственно в классах AppWorldLogic, AppSystemLogic и AppEditorLogic или через набор Компонентов с использованием Компонентной системы, включенной в API.

И конечно я переходил к AppEditorLogic,

-> https://developer.unigine.com/ru/docs/future/code/fundamentals/execution_sequence/app_logic_system?implementationLanguage=cs#editorlogic

Исходя из описания архитектуры и описаний как это: 
Editor Logic может использовать следующие методы, доступные как для C++/C#, так и для UnigineScript:   - я делал вывод что, значит я могу посредством c++ или c# класса в соотвествующих методах EditorLogic написать логику которая будет выполняться предположительно после перекомпиляции приложения на C++/C# либо после перезапуска Редактора.

Страницы упоминают о реализации логики редактора:
https://developer.unigine.com/ru/docs/future/migration/from_unity/code?highlighted=appeditorlogic,appeditorlogiclll,appeditorlog,appeditorlogicll
https://developer.unigine.com/ru/docs/future/migration/from_ue/code?highlighted=appeditorlogic,appeditorlogiclll,appeditorlog,appeditorlogicll

И пример подключения EditorLogic в приложении на C++
https://developer.unigine.com/ru/docs/future/code/cpp/usage/script/classes?highlighted=appeditorlogic,appeditorlogiclll,appeditorlog,appeditorlogicll

https://developer.unigine.com/ru/docs/future/code/fundamentals/programming_overview/?highlighted=editor2,editor2lll

И там уже да, подключение за счет создания в проекте папки editor2 и создания .usc файла который Вы привели в пример, для подключения.)

Где упоминается о наследовании от EditorLogic для C++/C# приложения и:

Quote

Примечание

В случае наследования классов *Logic (C++ / C#) реализованные методы будут вызываться сразу после соответствующих методов скрипта.


И из всей собранной информации и примечания, возможно, как обычно, не правильно интерпретировал для себя что в Случае приложения на C++/C# я могу отнаследоваться от EditorLogic и как выше описал, образно использовать его методы как хуки с логикой которая бы дополнительно выполнялась при работе в редакторе. (Хотя )

============================

 

2) Но, понял Вас, то есть в таком случае только использование Unigine Script.
 

============================
3) 

Quote

А можете сказать какие именно методы не вызываются? Какую версию SDK вы используете? И не могли бы написать какую задачу вы решаете чуть подбробнее?

Я не указывал версию сразу т.к понимаю, что здесь явно не проблема движка, а проблема пользователя :) Но использую Community SDK 2.21.0.0.

Вызывал для теста например методы: 

 

namespace UnigineApp
{
    public partial class AppEditorLogic : EditorLogic
    {
        public override bool Init()
        {
            Log.Message("EDITOR LOGIC INIT \n");
            Visualizer.Enabled = true;
            return base.Init();
        }

        public override bool WorldInit()
        {
            return true;
        }

        public override bool Render(EngineWindowViewport window)
        {
            Log.Message("EDITOR LOGIC RENDER \n");
            Visualizer.RenderLine3D(vec3.ZERO, vec3.RIGHT, vec4.RED);
            return true;
        }

        public override bool Update()
        {
            Log.Message("EDITOR LOGIC UPDATE \n");
            return true;
        }

    }
}

(Но как вы уже отметили, это не имеет смысла, т.к нужно подключать .usc файл)
Скорее всего я сам себе все усложняю и пытался воспользоваться им там где не он не нужен.

Для чего делаю это всё (Чтобы уже раз позориться, так по полной и извиняюсь за такое кол-во текста):

Одна из основных задач - работа с персонажами (Процедурные анимации, корректирующие кости).
Появление в движке Дерева анимации - это круто и движок нравится качеством рендера и оптимизацией. Но новый ObjectMeshSkinned не реализует Constraints. (IK, итд)
Что на текущий момент понимается как необходимость мною сначала реализовать свои Ограничения костей для персонажей. Но даже в случае реализации их еще нужно будет конфигурировать, (для корректирующих костей не имеющих данных анимаций) что по-хорошему требует визуального представления результата для более быстрого тестирования нежели конфигурирование на глаз работы констреинтов и уже после постоянного запуска Приложения.
А здесь уже упирается в отсутствие возможности выполнения какого-то Компонента в Редакторе (как допустим в godot за счет указания атрибута 
[Tool] для C# класса - знаю не лучший пример в силу слишком явно разных архитектур, просто пример) , unity повесить класс с контсреинтами на объект персонажа и отслеживать на preview (если не путаю ничего) или наверное более близкий - UE с отдельным деревом для Skeleton Tree.

Т.е есть на примерах этого я и пытался получить как минимум возможность видеть результат выполнения хотя бы компонента и навело на попытки понять как использовать для этих целей EditorLogic хотя бы временно запускать код не через Expressions узлы а C#/C++ в классе Editor.(потому и отметил что занимаюсь продумыванием костыляй 🙂, думал что воспользуюсь им как "временный мост Между своей текущей глупостью и моментом Просветления" - когда подружусь с написанием плагинов.



P.S Только заметил, что я не в том topic изначально создал эту тему, прошу прощения за оффтоп.

 

 

Posted

UPD: Расписать - расписал. А конкретизировать будто бы и не конкретизировал. Если какой-то Constraint, в общем логика для костей - Должен выполняться на основе преобразований кости-костей Рига, а сам компонент - представляет собой class Component System и когда нет Возможности указать Компоненту выполняться в редакторе или же отсутствие отдельного инструмента для этих задач. Будет проблематично настраивать. Анимацию в редакторе - запустили а логика ограничений не будет отрабатывать. Или же пример того же IK, настроили для ноги. В свою очередь Может быть отдельный компонент для корректировки анимации. Который пускает Луч. Он не сработает. Также не сработают и констреинты IK и трансформаций Коррект.Кости. Не увидеть деформации В самом редакторе.
По-идеи так, потому думал в сторону EditorLogic чтобы частично решить это просто неудобно но все же перенося логику для костей в него.

Posted

Иван, спасибо за развёрнутый ответ.

Чтобы реализовать задуманное через EditorLogic, фактически придётся написать собственный редактор поверх движка вместо нашего штатного — задача, мягко говоря, нетривиальная.

Гораздо проще будет дождаться ближайшего обновления SDK 2.22 этим летом: в него войдут новые ноды анимационного графа для процедурного контроля скелета, и значительную часть того, что вы сейчас пытаетесь решать вручную через constraints, можно будет сделать прямо в графе через UI.

Спасибо!

  • Thanks 1
Posted (edited)

Понял Вас, bmyagkov , спасибо большое за ответ, а также вашей команде. Звучит отлично! Буду ждать обновлений. Т.к почти любой игровой проект, да и в целом проект не связанный напрямую только лишь с техникой, предполагает работу с персонажами, с органикой и инструментарий для возможности работы безусловно важен.

Когда игрок/пользователь уже подсознательно ожидает, приучен, как само себе разумеющееся к не просто воспроизводимой анимации, а реакции на окружение (коллизию) и корректные деформации, то при разработке применения разных constraints (ik, Слежения, Copy вращений/позиций, Дистанции ...) с каким-то фактором например сложения или "перезаписью" преобразований поверх кости с анимацией/или без анимации вовсе (как в случае с корректирующими) - реализовывать подобное без Preview, Реакций:
- Изменение трансформаций одной кости при изменении трансформаций другой кости без запуска приложения без преувеличения очень сложным если не невозможным.

- А запуск Ray прямо в редакторе, о котором упоминал, так подумал это и не требуется даже для этих целей. Если возможно будет все также использовать уже имеющийся функционал Dummy Hierarchy для костей. И если при этом будут работать Констреинты в редакторе (те же узлы). Это позволит сразу же проверять движение. Т.е Настроил IK для цепочки костей ноги. Сдвинул Node Dummy управляющий преобразованиями допустим foot кости, анимации и ограничение с IK и другие выполняют свою работу, нога согнулась в колене (что сымитирует любые нужные движения для тестирования деформации и работы ограничений костей, цепочек костей. (Но это так, мысли с точки зрения профана :)

Рад, что активно идет развитие движка и в направлении персонажей.

Еще раз спасибо!

Edited by Ivan.Limarenko
  • Like 1
×
×
  • Create New...