Unity 导入C# DLL、C\C++ DLL 等外部库
来源:互联网 发布:网络攻击行为分析论文 编辑:程序博客网 时间:2024/06/15 05:05
Untiy 导入C# DLL、C\C++ DLL、OSX BUNDLE、iOS Android 等插件。
参考官方教程:Writing Plugins
网上已经有很多类似的了。这里作为自己的笔记,记录如何做一个简单DLL(Dynamic Link Library)动态链接库。
创建使用环境为VS2015。
C# DLL
1. 创建类库文件,注意选择.NET最好不要大于3.5版本,因为Unity使用的mono版本为2.0,支持最多到.NET 3.5版本。
2. 如下图,创建一个MyRandomClass,包含一个公有方法GetRandom(),获取C#自带随机数获取函数。
3.编译生成.dll文件,地址看输出信息。
4.生成两个文件。
5.将其中.dll后缀文件直接拖入Unity项目中Assets\plugins目录,若无,自行创建。
6.随便给个GameObject添加如下C#代码文件,用于测试是否成功调用C#DLL。
7.运行三次,成功666。
C++ DLL
1.要注意一开始创建不是选DLL(通用Windows 8.1),那是用于Win 8.1和Windows Phone 8.1的。同样选择不大于.NET3.5的版本。
2.创建向导注意选DLL和空项目(如果需要其他也可以不选)。
3.代码如下,创建在源文件下。关于 __declspec(export)更多知识可以参考这里。这个功能是调用< algorithm>库里面std::max函数来返回两个整形最大值。
4.同样编译生成一堆文件。
5.同样只需要后缀为.dll的文件拖入项目。
6.同样在Assets\Plugins目录下。
7.测试脚本,需要声明DLL并带特性[DLLImport]。
8.测试两个值。
9.成功输出最大值。
.BUNDLE 等其他外部库
当需要适应多个平台,而且已经做好外部库,可以用下面的方法来根据平台而选中合适的外部库。可以直接在Unity的File->Build Settings选择平台来测试。选中的平台代码可以直接体现,在#if \ #enif语句正常显示的(非灰色的)。
using UnityEngine;using System.Runtime.InteropServices; //[DllImport]特性的命名空间。public class TestScript : MonoBehaviour{ public int x; public int y;#if UNITY_STANDALONE_WIN //WINDOWS系统 const string dll = "MyMaxNumberDLL";#elif UNITY_STANDALONE_OSX //OSX(Mac)系统 const string dll = "MyMaxNumberBUNDLE";#elif UNITY_IOS //IOS系统 const string dll = "__Internal";#else //Android或其他 const string dll = " ";#endif [DllImport(dll)] private static extern int GetMaxNumber(int x, int y); public static int GetMax(int x,int y) { #if (UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX || UNITY_IOS) return GetMaxNumber(x, y); #else return -1; #endif } private void Start() { Debug.Log(GetMax(x, y)); }}
遇到的错误
在使用C++的DLL时,出现了一个错误:“Failed to load ‘Assets/Plugins/MyMaxNumberDLL.dll’, expected x64 architecture, but was x86 architecture. You must recompile your plugin for x64 architecture.”在stackoverflow有人回答说需要多导入除了.dll文件的另外4个文件,但无果,又设置了Unity中Build Settings中windows平台的Architecture,但也无果。最后发现原来是C++ DLL编译生成时选择了x86,改成x64重新编译导入就好了。
需要选择x64架构。
阅读全文
0 0
- Unity 导入C# DLL、C\C++ DLL 等外部库
- c/c++动态库(DLL)调用,c#等其他语言调用c/c++的DLL
- Unity引用外部DLL库
- oracle调用外部C DLL
- C#调用C++DLL
- c#调试C++DLL
- C# 访问 C DLL
- C#调用C++dll
- C#调用C++dll
- C#调用C++DLL
- c#调用c++DLL
- c#调试C++DLL
- C# 调用C++dll
- C#调用C++DLL
- C#引用C++Dll
- C#调用C++DLL
- C#调用C++DLL
- C#调用C++Dll
- mongo 系统权限问题
- websocket踩坑记录
- android studio kotlin
- Android 7.0 emulator adb 连接自动断开问题的解决
- [TensorFlow入门教程1]之安装TnsorFlow
- Unity 导入C# DLL、C\C++ DLL 等外部库
- shell常用命令
- Eclipse中常见问题及解决方案
- jsonp结合百度接口-实现搜索功能
- 闭包详解
- 凸优化-对偶问题
- 斜率化dp
- STN-LCD屏学习
- 通过观察者在此activity中更新其他activity中的UI