WebGL平台编译c++插件

插件格式

有2种方式

  1. 以源码方式引用,就是直接放入 cpp 文件,以及相关的头文件,cpp 文件才要放在unity中,头文件可以放在别的地方,只要能引用到就行
    编译时本身就会把C#通过IL2CPP反编译成cpp,然后再同插件中的cpp一起使用emscripten编译成最后的.wasm
  2. 编译成静态库
    2021.2版本之前,是编译成 .wasm 和 .js 格式
    2021.2版本开始,是编译成 .a 和 .jslib 格式
    .jslib 就是把 .js 扩展名改一下,都是为了把c++函数导出给js用的,如果你都是在c#中通过 [DllImport(“__Internal”)] 方式导入,那么可以不要这个文件
    .wasm 和 .a 就是库文件,只不过需要用 emscripten 工具来编译而不是 gcc

官方示例NativeRenderingPlugin编译

git: https://github.com/Unity-Technologies/NativeRenderingPlugin.git

目录结构

  • PluginSource c++插件工程
  • UnityProject unity工程

入口

UseRenderingPlugin.cs 调用c++插件进行额外的渲染

编译web库

该示例本身是通过 cpp 源码方式直接做为web插件的,跟 PluginSource 中的头文件是有引用关系的,发布时最好编译成 .a库
由于这里不需要把接口导出给js用,因此不需要编译 .jslib ,只需要编译出 .a

  1. 通过bat编译
    把下面代码放在 PluginSource/build_web_lib.bat 中运行即可
        :: 把webgl的cpp打包成.a库
        :: 把emscriptenDir改成对应unity版本的路径,或直接使用 gaussiansplattingweb 内置的 Tools/BuildWebRenderPlugin 工具进行编译
        set emscriptenDir=C:\Program Files\Unity\Hub\Editor\2021.3.25f1c1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\
        set srcDir=..\UnityProject\Packages\mg.gaussiansplattingweb\Runtime\Plugins\WebGL\
    
        set emcc=%emscriptenDir%emscripten\emcc.bat
        set emar=%emscriptenDir%emscripten\emar.bat
        set EMSDK_PYTHON=%emscriptenDir%python\python.exe
        set EM_CONFIG=%emscriptenDir%.emscripten
        set cppPath=%srcDir%RenderingPlugin.cpp
        set objPath=RenderingPlugin.o
        set libPath=%srcDir%RenderingPlugin.a
    
        call "%emcc%" -c "%cppPath%" -o "%objPath%"
        call "%emar%" rcs "%libPath%" "%objPath%"
        del "%objPath%"
    
        pause
    
  2. 通过unity编辑器脚本编译
    加入编辑器脚本 BuildWebRenderPlugin.cs 在插件的 Editor 目录下
        //  把webgl的cpp打包成.a库
        //  对应 source 分支下 PluginSource/build_web_lib.bat 实现的功能
        //  使用内置脚本有个好处,直接使用匹配的emscripten进行编译,不需要手动干预
        public class BuildWebRenderPlugin: ScriptableObject
        {
         
            [MenuItem("Tools/BuildWebRenderPlugin")]
            public static void RunEmscriptenBuild()
            {
         
                // 获取 Unity 安装路径
                string unityPath = EditorApplication.applicationPath;
                string unityRoot = Path.GetDirectoryName(unityPath);
    
                // 获取当前脚本的 MonoScript 实例
                MonoScript script = MonoScript.FromScriptableObject(ScriptableObject.CreateInstance<BuildWebRenderPlugin>());
                // 获取当前脚本的路径
                string scriptPath = Path.GetDirectoryName(AssetDatabase.GetAssetPath(script)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值