根据Unity构建选项将本机DLL复制到其他位置

时间:2018-12-04 22:18:12

标签: c# unity3d dll windows-10

为了在Unity中轻松卸载和加载本机插件,我目前正在使用LoadLibrary(DllPath)。问题在于,由于它正在搜索给定的路径,因此对于UnityEditor,它查看root文件夹(在Assets旁边),对于已构建的play.exe,它正在查找与play.exe相同的目录。

因此,为了使该过程更高效,我希望能够在将.dll构建到play_data\plugins中时自动将其复制到play.exe文件夹中。我该如何以编程方式做到这一点?

1 个答案:

答案 0 :(得分:0)

我相信您可以在脚本中使用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 ”将为您提供可执行位置。您可以使用 pathToBuiltProject 导航到“ play_data \ plugins”。我使用此API移动自定义运行时文件。


我还意识到您说您正在从LoadLibrary(DllPath)进行加载。那么这是否意味着您没有在资产的Plugin文件夹中包含dll?因为编译后,Unity项目中Plugin文件夹中的dll被添加到“ yourprogramName_data \ Plugins”中。如果是这样,那么您可能想要添加将dll保留在plugins文件夹中,并让Unity自动为您完成。并且,如果您具有在构建完成后动态需要添加到plugins文件夹中的dll,则可以使用第一种方法。