Копирование собственной библиотеки DLL в разные места в зависимости от параметров сборки Unity - PullRequest
0 голосов
/ 05 декабря 2018

Чтобы легко выгружать и загружать собственные плагины в Unity, я сейчас использую LoadLibrary(DllPath).Проблема в том, что, поскольку он ищет заданный путь, для UnityEditor он смотрит на папку root (рядом с Assets), а для встроенного play.exe он ищет в том же каталоге, что и play.exe.

Итак, чтобы сделать этот процесс более эффективным, я хочу иметь возможность автоматически копировать .dll в папку play_data\plugins, когда она встраивается в play.exe.Как я могу сделать это программно?

1 Ответ

0 голосов
/ 05 декабря 2018

Я полагаю, что вы можете использовать UnityAPI OnPostprocessBuildAPI в сценарии, чтобы скопировать dll-файлы в ваше местоположение exe.

    using UnityEngine;
    using UnityEditor;
    using UnityEditor.Callbacks;

    public class MyBuildPostprocessor 
    {
        [PostProcessBuildAttribute(1)]
        public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject) 
        {
            Debug.Log( pathToBuiltProject );
            File.Copy("Oringal File",pathToBuiltProject + "\play_data\plugins\" + Your dll);
        }
    }

Опция " pathToBuiltProject " дастВы ваше исполняемое местоположение.Вы можете перейти к «play_data \ plugins», используя pathToBuiltProject .Я использую этот API для перемещения пользовательских файлов времени выполнения.


Я также понял, что вы сказали, что загружаете из LoadLibrary(DllPath).Так значит ли это, что вы не включили DLL в папку Plugin в ресурсах?Потому что библиотеки dll в папках Plugin внутри проекта Unity добавляются в «yourprogramName_data \ Plugins» после компиляции.Если это так, то вы можете добавить сохранить dll в папку плагинов и позволить Unity автоматически сделать это за вас.И если у вас есть dll, которые вам динамически необходимы для добавления в папку плагинов после завершения сборки, вы можете использовать первый метод.

...