Unity3D里使用自己的dll

2023-10-30

首先,我们需要新建一个类库项目,可以使用Visual Studio或者Monodevelop来做。我这里是使用vs2012来创建:
 
选择好项目类型、写好项目名称。
 
新生成的项目里面默认有一个Class1类
 
可以通过在解决方案资源管理器里面进行重命名改成自己想要的类名,比如我这里改成了Math3D
 
然后写一个简单的静态方法在里面。这里我写了个最简单的加法(Add)。也可以不写静态方法,写出普通的public方法,用的时候new对象出来调用该方法也可以。这和正常的C#编程没区别。
 
写好之后,在资源管理器里面选择“生成”,那么在项目的bin/debug 里面就会看到dll文件,比如我这个额项目就是AzhaoDll.dll
 
接下来在Unity3D里面创建你需要的项目,把刚才的dll文件随便放到项目的Assets文件夹里面。关于这个dll文件的存放位置,网上有些人说是必须放在插件文件夹里面,其实是不需要的,放在任意位置它都能被识别出来。当然,按照良好的项目路径习惯,我们建立一个专门放插件的文件夹来存放dll文件,也是合理的。
然后在Unity3D里面创建一个C#脚本,写一行简单的代码来调用我们刚才写的Math3D.Add方法。
  Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
这时会发现Math3D类不能识别,我们using AzhaoDll命名空间
然后在Unity3D里把脚本挂到摄像机上,运行,可以看到打印出正确的结果了,这就证明了dll已经被成功调用了。
  Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
 回顾刚才我们做的一些小细节,在类库项目的Math3D类里面。我们默认的使用了AzhaoDll命名空间。那么假如我们不使用命名空间,或者使用其他的命名空间行不行?答案是可以的,命名空间可以任意的更改,如果不用命名空间,那么在调用的时候就不需要using,如果使用了其他命名空间,对应的using其命名空间就行了。
以下试试把命名空间删掉:  
那么在Unity3D里面调用就直接可以用了:
 运行的结果也是正常的:
当然,不太建议不使用命名空间,这样做一个说明,是因为unity3D本身创建的脚本默认没有使用命名空间,只是想说明如果不想麻烦,直接把Unity3D没有命名空间的脚本直接拿来编译也是可以的。
再次回顾细节,刚才我们使用的是原生的C#,假如我们需要在类库项目写调用Unity3D本身功能的方法怎样办呢?
在Unity3D的安装目录Editor\Data\Managed里面,找到UnityEditor.dll和UnityEngine.dll两个文件。 
 然后在类库项目里面添加引用,把这两个dll添加进来    
这时候,我们就可以在类库项目里面using UnityEngine来使用Unity3D的方法了,比如我们这里简单写了个CreateGameObject方法,生成一个名字为“CreateByDll”的gameobject。
 
 生成dll,放回Unity3D项目里,我们就可以调用这个方法:
运行,看到这个叫做“CreateByDll”的物体生成出来了。
  Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
 
通过以上的说明,我们会发现其实生成自己的dll在Unity3D里面用是很简单的事情。我们还可以添加其他自己写好的类进类库项目,然后生成dll来使用。
 
最后说一下注意事项了。
刚才生成的dll在Unity3D编辑器里面基本上都是能用的,但不一定能通过编译。有可能在编译成exe或者apk等时会报错。
需要注意的是,类库项目使用的.Net Framework版本。我自己的尝试是,使用.Net 4.0以上版本发布的dll,在Unity3D里面会编译不通过。所以我们可以用2.0或者3.0之类的版本来发布。
 还有一些情况是某些现成的dll动态库是使用完整的.Net2.0来发布的,所以我们在编译的时候有可能需要选择完整的.Net 2.0来发布。
到了这一步,我们就可以把Unity3D的整个代码文件夹里面所有的脚本剪切到类库项目里面生成dll,然后放回Unity3D项目里面。这样别人就不能直接的编辑我们项目里面的代码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity3D里使用自己的dll 的相关文章

  • 应用程序处于中断模式。您的应用程序已进入中断状态,

    我发现自己遇到了同样的问题here https stackoverflow com questions 36204009 disable break mode page in vs2015 我在 dll 中使用 Windows 窗体 这是针
  • 针对 dll/lib 的 cmake 链接

    我的 cmake 的输出是一个静态库 我正在这样创建它 add library myMainLib STATIC BACKEND SOURCES 当我尝试让 myMainLib 链接到第三方 lib dll 时 出现了问题 dll 文件将在
  • 如何将 NLog 用于 DLL

    我正在尝试使用 Nlog Refresh 1 0 为类库项目实现一个简单的日志 当 nlog 从 dll 中实例化时 它似乎不会创建日志文件 还有其他办法解决这个问题吗 我的配置文件如下所示
  • 将 dll/lib 链接到 cmake 项目

    我试图将库链接到我的 cmake 项目 但遇到链接器错误 我花了 2 个小时尝试解决这个问题 并创建了一个简单的项目 在其中对所有路径进行了硬编码 CMAKE MINIMUM REQUIRED VERSION 3 0 PROJECT Tes
  • 在 Delphi 中,我的 DLL 中是否必须分配函数的返回 pchar

    我有一个 DLL 其中有一个返回 pchar 的函数 以避免必须使用 borlndmm 我最初所做的是将字符串转换为 pchar 并返回 Result pChar SomeFuncThatReturnsString 但 90 的情况下我都能
  • 在Framework 4.6项目中使用.net core DLL

    我已经在 net core 2 0 中构建了一个 DLL 现在我想在使用 net 4 6 1 框架的 WinForms 项目中使用它 我可以引用该 dll 但收到 System IO FileLoadException 表示找不到 Syst
  • matlab mex 文件和 C++ dll (Windows)

    我有一个带有 Test 类的 DLL 标题 class MY EXPORT Test public int doit const string str 和来源 int Test doit const string str return in
  • 从 C++ 源文件创建 Windows DLL

    我有多个 C 源文件 我想使用它们创建动态链接库 我在 linux 中使用 gcc shared 和 ln 看到这种情况发生 但是对于 Windows 我想我必须修改源文件才能生成 DLL 有没有办法用提供的源文件生成DLL 类似于linu
  • 如何将 C++ 类包装在基于 C 的 dll 或基于 CLI 的 dll 中?

    我被告知将我用 C 编写的类导入到 dll 中 然后在 c 应用程序中使用该 dll 下列的本指南 https stackoverflow com questions 4555961 how to use a class in dll我创建
  • 在 C# 中创建可移植(非安装)Windows 应用程序

    我有一个 net 3 5 应用程序 我想让它变得可移植 它很简单并且运行完美 我已将 EXE DLL 发送给一些朋友 当在同一文件夹中运行带有 DLL 和 ICO 我在其中使用过 的 exe 时 它 按预期工作 我想要的很简单 创建一个单独
  • crt0 是否加载 msvcrt.dll?

    我想弄清楚标准 C 函数是什么样的printf 在 Windows 环境下加载到内存中 我知道crt0 obj准备堆栈 调用int main int argc char argv 然后使用 main 返回的退出代码退出进程 我还听说 C 标
  • 转储 Windows DLL 版本的命令行工具?

    我需要一个命令行工具来转储标准 Windows DLL 版本信息 以便我可以通过 bash 脚本 Cygwin 对其进行处理 作为一名 Java 开发人员 我不太习惯 Microsoft 开发工具 尽管我对 Microsoft Visual
  • 是否有与 gcc --kill-at 等效的 Visual C++?

    也就是说 DLL 名称末尾有一个额外的 8 这会造成问题 显然 在 gcc 中使用 kill at 标志可以解决这个问题 但我找不到任何类似的 MSVC 建议 编辑 更多信息 我试图让 C JNI dll 工作 但我总是得到 线程 Thre
  • 为什么某些 dll 静态链接存根库(导入库)如此大?

    我在链接到 pcl 点云库 时注意到 一些 dll 存根库的大小超过 10MB 而 dll 本身的大小还不到该大小的一半 这些是发布版本 难道存根库不应该只包含最少的信息以便可以访问 dll 信息吗 怎么会比他们引用的dll文件大呢 对我来
  • 使用 PIMPL 习惯用法删除 DLL 中的 std::vector 时出错

    我有以下代码 In DLL1 在 h文件中 class MyClass public MyClass private std string m name class declspec dllexport Foo private struct
  • ctypes 加载 dll 时没有错误消息,但什么也没发生

    我尝试在ctypes中使用windll LoadLibrary将dll文件导入python 尽管没有任何错误消息 但头文件中列出的函数似乎都没有成功加载 我想知道是dll文件有问题 还是我错误地使用了windll LoadLibrary方法
  • 编写一个加载 msvcr80.dll 并公开 free() 函数的 DLL

    我有一个依赖于 MSVCR80 的第三方 DLL 并分配我需要清理的资源 图书馆有not暴露一个free 执行此操作的函数 相反 我需要加载相同的运行时库并手动调用free功能 作为一种解决方法 我尝试编写一个 包装器 DLL 它加载正确的
  • 如何在 VC++ 6.0 项目中使用 DLL 而无需其 .h 和 .lib 文件?

    我不知道如何执行以下操作 我正在使用 MS Visual C 6 0 我有一个可编译的 Win32 DLL 项目 我有另一个项目 这次是一个 Win32 控制台项目 它使用 DLL 通过包含它的头文件并链接 lib 文件 DLL 现在我想要
  • 在 Qt 5.12 的 OpenCV dll 上找不到入口点

    TLDR 将 OpenCV 与 QT MingW 链接会使应用程序在调试时崩溃 但不会在发布时崩溃 我正在尝试在基于 Qt 的大型多操作系统项目中使用 OpenCV 我已经轻松地为 Mac 和 Linux 构建了 OpenCV 但在 Win
  • 从 C# 调用 C++ DLL

    我想使用 C 中的 C DLL C DLL 是win32 控制台应用程序 我已成功调用它 并希望在 C 中处理来自 C 的数据 然而 C 应用程序在执行 DLL 后退出 即这一行 GetArrayFromDLL 我是 C 和 Visual

随机推荐

  • 【方法指南】将以逗号为分隔值的文件转换为excel格式文件

    将以逗号为分隔值的文件转换为excel格式文件 1 项目场景 2 解决方案 1 项目场景 以逗号为分隔值的 txt文件转换为excel格式文件 2 解决方案 以逗号为分隔值的文件转换为excel格式文件方法如下 以Windows10系统的W
  • C++期末考试选择题题库100道

    1 对于常数据成员 下面描述正确的是 B A 常数据成员必须被初始化 并且不能被修改 B 常数据成员可以不初始化 并且不能被修改 C 常数据成员可以不初始化 并且可以被修改 D 常数据成员必须被初始化 并且可以被修改 2 在C 中 使用流进
  • Failed to set permissions of path: \tmp\hadoop-Administrator\..\Administrator..\.staging to 0700

    eclipse上运行hadoop的worldCount例子时 报错如下 严重 PriviledgedActionException as Administrator cause java io IOException Failed to s
  • QT学习:字符串比较是否相等

    QString的compare函数可以对两个字符串进行比较 QString compare返回int类型值 int x QString compare aUtO AuTo Qt CaseInsensitive x 0 int y QStri
  • kafka查看topic数据内容

    微服务架构 第1章 微服务概述 什么是微服务 常见的微服务组件 常用的微服务框架 微服务架构设计模式 如何实施微服务 从微服务的起源和现实业务的角度探讨微服务 第2章 微服务设计原则 设计原则之分层架构 设计原则之统一通信协议 设计原则之单
  • 如何清理Redis中的缓存

    首先在cmd模式下进入redis的目录 然后使用 redis cli p 6379 指定进入的端口号 本人的端口号为6379 进入该端口的redis数据库之后有以下两种清空缓存的命令 1 清空当前redis数据库缓存flushdb flus
  • php密码正则验证

    验证密码必须是6 12位的数字和字母 0 9 a z A
  • WebSocket协议

    文章目录 备注 一 什么是WebSocket 二 为什么要有WebSocket 三 WebSocket特点 3 1 全双工 3 2 数据传输使用二进制帧 3 3 服务地址沿用HTTP格式 3 4 默认端口为80和443 四 WebSocke
  • C# Speech 语音文件生成

    1 依赖搭建 添加引用包 System Speech 工程引用 using System Speech Recognition 2 发声 private void button1 Click object sender EventArgs
  • failed to find plugin “flannel” in path [/opt/cni/bin],k8sNotReady解决方案

    问题 由于k8s安装master一直处于NotReady状态查看日志出现 failed to find plugin flannel in path opt cni bin 日志信息 Nov 04 00 35 47 k8s node1 ku
  • [技术讨论]STM32三种库函数的分析和比较

    STM32库函数可以分为标准库函数 HAL库函数 LL库函数 你问我为什么不说寄存器开发 以为太过于底层 非一般高手驾驭不了 我只是个小菜 所以对于寄存器开发不敢妄自议论 1 标准库函数 标准库函数是C语言的标准库函数 包括stdio h
  • Chisel教程——14.(完结篇)Scala和Chisel中的数据类型

    完结篇 Scala和Chisel中的数据类型 完结篇开头的碎碎念 这是这个系列的最后一篇文章了 官方的Chisel Bootcamp中后面还有FIRRTL相关的内容 但设计一个RISC V CPU这样的目标 靠本系列文章讲述的内容已经足够了
  • 牛客网 第一个只出现一次的字符

    牛客网 第一个只出现一次的字符 时间限制 1秒 空间限制 32768K 热度指数 198167 本题知识点 字符串 算法知识视频讲解 题目描述 在一个字符串 0 lt 字符串长度 lt 10000 全部由字母组成 中找到第一个只出现一次的字
  • numpy log随机产生非常奇怪的数字(np.log的大坑)

    背景 有一批信号数据要送到网络里训练 训练之前为了统一量纲 首先根据方差和均值做了一次标准化 然后求了一次能量 20 log10 x 也就是说送进网络里的其实是一个能量谱 但是训练过程中经常蹦出来一些莫名其妙的数值 理论上我的数据标准化以后
  • Python tkinter自定义多选下拉列表框

    Python tkinter 自定义多选下拉列表框 困扰了我好久 终于在stackoverflow上找到了答案 废话不多说 直接上代码 加滚动条和全选传送门 Python tkinter自定义多选下拉列表框 带滚动条 全选 demo py文
  • 【C++笔试强训】第三十二天

    C 笔试强训 博客主页 一起去看日落吗 分享博主的C 刷题日常 大家一起学习 博主的能力有限 出现错误希望大家不吝赐教 分享给大家一句我很喜欢的话 夜色难免微凉 前方必有曙光 选择题 第一题 在计算机网络中 TCP和UDP协议的相似之处是
  • android如何设置自适应大小的背景图片,Android 背景图片自适应方案

    在做移动中间件的过程中 遇到了背景图片自适应的问题 比如一个Button的背景图片 如何让一张图片能够在不同高宽的场景下做到不失真 在做移动中间件的过程中 遇到了背景图片自适应的问题 比如一个Button的背景图片 如何让一张图片能够在不同
  • element ui 表格字段boolean 不显示

    如题后端返回的list 中有值 表格缺没显示 加一个template将true 和false 转为想要的字段即可 这里是三目
  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • Unity3D里使用自己的dll

    首先 我们需要新建一个类库项目 可以使用Visual Studio或者Monodevelop来做 我这里是使用vs2012来创建 选择好项目类型 写好项目名称 新生成的项目里面默认有一个Class1类 可以通过在解决方案资源管理器里面进行重