Как передать параметры моего внешнего кода C # в исполняемый файл Unity3D? - PullRequest
0 голосов
/ 30 января 2019

У меня есть C# решение, которое решает динамическую проблему, я хочу моделировать движение масс в режиме реального времени.Я подготовил Unity3D exe-файл с некоторыми объектами, которые управляются с помощью внутренних скриптов Unity, и он работает внутри, что для меня бесполезно.в этом отношении в моем внешнем C# коде после решения проблемы я вызвал exe-файл, используя Process.Start();.

Проблема в том, что я не могу передать значения позиции процессу Unity3D.Как можно отправить мои C# параметры в работающий процесс Unity?

Я прочитал так много руководств, в которых Unity получает ввод с клавиатуры или мыши или других устройств, но я хочу отправить свои параметры кода в Unity в качестве ввода.

Возможно ли это?

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Если вы хотите просто анализировать данные при запуске с аргументами, достаточно использовать Environment.GetCommandLineArgs().

Если вам нужно отправлять и получать данные в обоих направлениях (или в одну сторону), вы можетеиспользовать файлы, отображенные в память ( документы ).Пример:

//creates a memory map file in system memory with 1024 bytes of space
var mmf = MemoryMappedFile.CreateOrOpen("memory", 1024);
var accessor = mmf.CreateViewAccessor();
//writes 3.14 as a double to the memory at position 8
accessor.Write(8, 3.14);

//reads the double from position 8
double pi = accessor.Read<double>(8);

Это, безусловно, выполнимо, я использую этот метод связи между сетевым процессом и игровым движком, чтобы избежать перезагрузок сборки, когда редактор компилирует скрипты во время выполнения, чтобы я не потерялсоединения.

0 голосов
/ 01 февраля 2019

а также есть еще одна проблема!код, который я использую в Unity:

void Update ()

{

        //reads the double from position 1
        using (var mmf = MemoryMappedFile.OpenExisting("memory"))
        {
            using (var accessor = mmf.CreateViewAccessor())
            {
                accessor.Read(1, out float omegay);
                float omegayy = Convert.ToSingle(omegay);
                transform.Rotate(new Vector3(0, omegayy, 0) * Time.deltaTime);

            }
        }
}

мой параметр (omegay) имеет отрицательное значение, но в единице анимирует его как положительное число!

0 голосов
/ 30 января 2019

Используйте Environment.GetCommandLineArgs() для получения аргументов.

В Unity

class YourScript : Monobehaviour
{
    void Start()
    {
       string[] args = Environment.GetCommandLineArgs();
    }
}

Ваш код

Process.Start("your_program.exe", "arg1 arg2 ...");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...