dll unity3d_unity3d-dll - CSDN
  • Unity3D里使用自己的dll

    2016-09-08 15:35:12
    首先,我们需要新建一个类库项目,可以使用Visual Studio或者Monodevelop...可以通过在解决方案资源管理器里面进行重命名改成自己想要的类名,比如我这里改成了Math3D   然后写一个简单的静态方法在里面。这里我
    首先,我们需要新建一个类库项目,可以使用Visual Studio或者Monodevelop来做。我这里是使用vs2012来创建:
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
     
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
    选择好项目类型、写好项目名称。
     
    新生成的项目里面默认有一个Class1类
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
     
    可以通过在解决方案资源管理器里面进行重命名改成自己想要的类名,比如我这里改成了Math3D
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
     
    然后写一个简单的静态方法在里面。这里我写了个最简单的加法(Add)。也可以不写静态方法,写出普通的public方法,用的时候new对象出来调用该方法也可以。这和正常的C#编程没区别。
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
     
    写好之后,在资源管理器里面选择“生成”,那么在项目的bin/debug 里面就会看到dll文件,比如我这个额项目就是AzhaoDll.dll
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
     

    接下来在Unity3D里面创建你需要的项目,把刚才的dll文件随便放到项目的Assets文件夹里面。关于这个dll文件的存放位置,网上有些人说是必须放在插件文件夹里面,其实是不需要的,放在任意位置它都能被识别出来。当然,按照良好的项目路径习惯,我们建立一个专门放插件的文件夹来存放dll文件,也是合理的。

    然后在Unity3D里面创建一个C#脚本,写一行简单的代码来调用我们刚才写的Math3D.Add方法。
     Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵

    这时会发现Math3D类不能识别,我们using AzhaoDll命名空间
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵

    然后在Unity3D里把脚本挂到摄像机上,运行,可以看到打印出正确的结果了,这就证明了dll已经被成功调用了。
     Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵

     回顾刚才我们做的一些小细节,在类库项目的Math3D类里面。我们默认的使用了AzhaoDll命名空间。那么假如我们不使用命名空间,或者使用其他的命名空间行不行?答案是可以的,命名空间可以任意的更改,如果不用命名空间,那么在调用的时候就不需要using,如果使用了其他命名空间,对应的using其命名空间就行了。
    以下试试把命名空间删掉:
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
     
    那么在Unity3D里面调用就直接可以用了:
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
     运行的结果也是正常的:
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵

    当然,不太建议不使用命名空间,这样做一个说明,是因为unity3D本身创建的脚本默认没有使用命名空间,只是想说明如果不想麻烦,直接把Unity3D没有命名空间的脚本直接拿来编译也是可以的。

    再次回顾细节,刚才我们使用的是原生的C#,假如我们需要在类库项目写调用Unity3D本身功能的方法怎样办呢?
    在Unity3D的安装目录Editor\Data\Managed里面,找到UnityEditor.dll和UnityEngine.dll两个文件。 
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
     然后在类库项目里面添加引用,把这两个dll添加进来
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
     
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
     
    这时候,我们就可以在类库项目里面using UnityEngine来使用Unity3D的方法了,比如我们这里简单写了个CreateGameObject方法,生成一个名字为“CreateByDll”的gameobject。
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
     
     生成dll,放回Unity3D项目里,我们就可以调用这个方法:
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
    运行,看到这个叫做“CreateByDll”的物体生成出来了。
     Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
     
    通过以上的说明,我们会发现其实生成自己的dll在Unity3D里面用是很简单的事情。我们还可以添加其他自己写好的类进类库项目,然后生成dll来使用。
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
     
    最后说一下注意事项了。
    刚才生成的dll在Unity3D编辑器里面基本上都是能用的,但不一定能通过编译。有可能在编译成exe或者apk等时会报错。
    需要注意的是,类库项目使用的.Net Framework版本。我自己的尝试是,使用.Net 4.0以上版本发布的dll,在Unity3D里面会编译不通过。所以我们可以用2.0或者3.0之类的版本来发布。
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵
     还有一些情况是某些现成的dll动态库是使用完整的.Net2.0来发布的,所以我们在编译的时候有可能需要选择完整的.Net 2.0来发布。
    Unity3D项目程序加密1——在Unity3D里使用自己的dll - 阿赵 - 穷到掉渣的超级奶爸阿赵

    到了这一步,我们就可以把Unity3D的整个代码文件夹里面所有的脚本剪切到类库项目里面生成dll,然后放回Unity3D项目里面。这样别人就不能直接的编辑我们项目里面的代码

    展开全文
  • 1.build .dll in MonoDevelop(Unity5.6 buit-in)  新建Library项目。 点击Project下的References后的齿轮,Edit ... 其中Unity3d的库地址参考如下: Windows:……\Unity\Editor\Data\Managed\ Mac:/Applica
    1.build .dll in MonoDevelop(Unity5.6 buit-in) 
    新建Library项目。
    点击Project下的References后的齿轮,Edit References->.Net Assembly选择需要引用的库。
    其中Unity3d的库地址参考如下:
    Windows:……\Unity\Editor\Data\Managed\
    Mac:/Applications/Unity/Unity.app/Contents/Frameworks/Managed/
    
    Project->Project Option->General可更改target framework,Unity3d支持.net3.5及以下。

    2.build .dll in VisualStudio(2015)
    新建Library项目,选择.net 3.5framework。
    右击项目->引用,选择添加引用,其他参考MonoDevelop中的操作。

    3.build后将生成的dll文件导入unity3d中,直接引用即可,注意支持cpu及OS。

    展开全文
  • Unity3D调用.DLL文件

    2018-05-18 22:41:04
    工具:VS(VS2013)、UnityUnity5.2.2) 一.打开VS,新建项目 选择Wint32控制台应用程序 选择DLL和空项目 右键点击添加类 在这里类命名为CallByUnity,点击确定,将生成CallByUnity.h和CallByUnity.cpp ...

    首先我们自己动手创建一个.DLL文件

    工具:VS(VS2013)、Unity(Unity5.2.2)

    一.打开VS,新建项目


    选择Wint32控制台应用程序


    选择DLL和空项目


    右键点击添加类


    在这里类命名为CallByUnity,点击确定,将生成CallByUnity.h和CallByUnity.cpp


    在CallByUnity.h中修改代码为如下图:


    #if defined (EXPORTBUILD)  
    # define _DLLExport __declspec (dllexport)  
    # else  
    # define _DLLExport __declspec (dllimport)  
    #endif  
      
    extern "C"  int _DLLExport AddNumber(int x,int y);  


    在CallByUnity.cpp中修改代码为如下图:

    CallByUnity.cpp

    #define  EXPORTBUILD  
      
    //加载头文件  
    #include "CallByUnity.h"  
      
    //设置函数  
    int _DLLExport AaaNumber(int x,int y)  
    {  
        return x+y;  
    }  

    此时运行程序,将生成HelloWord.DLL文件


    注意:

    如果运行VS后发现报错,将可能是预编译宏有问题

    右键点击项目->属性->预编译宏->编辑->添加“EXPORTBUILD”



    二.打开Unity

    在Assert目录下添加一个文件固定命名为“Plugins”(plugin插件意思)

    将上一步生成的.dll文件添加到里面



    添加一个C#脚本,这里命名为HelloUnity

    HelloUnity.cs

    using UnityEngine;    
      
    using System.Collections;    
      
    using System.Runtime.InteropServices;    
      
    public class NewBehaviourScript : MonoBehaviour 
    {  
        //导出.dll文件函数
        [DllImport ("DLL")]    
        private static extern int AddNumber(int x,int y);    
        int i = AddNumber(5,7);     
      
    
        void OnGUI()   
        {  
            GUI.Button(new Rect(1,1,200,100),"i value is '"+i+"'");  
        }  
    } 

    运行后将在显示值为12


    注意:

    在打包时候如果运行保存,在打包目录下添加Plugins目录,再将.dll文件放进去


    本人也在寻找一份游戏开发实习工作,如果大佬们需要开发人员,请把我带走奋斗

    这是我的简历:resume.liujunliang.com.cn/resume.pdf

    作品的话可以私聊我哦!


    展开全文
  • Unity3D的坑系列:动态加载dll Unity3D的坑系列:动态加载dll 我现在参与的项目是做MMO手游,目标平台是Android和iOS,iOS平台不能动态加载dll(什么原因找乔布斯去),可以直接忽略,而在Android平台是...

    Unity3D的坑系列:动态加载dll

    Unity3D的坑系列:动态加载dll

    我现在参与的项目是做MMO手游,目标平台是Android和iOS,iOS平台不能动态加载dll(什么原因找乔布斯去),可以直接忽略,而在Android平台是可以动态加载dll的,有了这个就可以实现代码更新,不过实际上,在unity里要用上动态加载dll是有很多限制的(不了解的话就是坑)。

    限制1:在Android手机里动态加载dll不能使用Assembly.LoadFile(string path),只能使用Assembly.Load(byte[] rawAssembly)这个接口,所以要自己想办法先读出来。

    限制2:动态加载的脚本不能在编辑器里挂在prefab上。

    限制3:如果脚本在动态dll里,调用AddComponent()挂此脚本上prefab上时不能使用AddComponent(“SomeScript”)的方式调用,要用AddComponent(Type.GetType(“SomeScript”))。

    限制4:在动态dll里使用[RequireComponent(typeof(SomeScript))]无效,所以不能使用。

    我目前主要就是遇到这些坑,以后有什么新发现再进行补充。

     

    修正&补充:在iOS下不是都不能动态加载dll,越狱的手机可以实现,具体可参考文章:http://blog.csdn.net/lucky_06/article/details/9093879,亲测没问题。

     

    再次修正:iOS实际上还是不能实现真正的代码热更新,使用上述方法只能调用外部dll的接口,但执行逻辑还是在native code里面。简单的说,之前我测试的时候是项目里面有a.dll的代码,然后再Assembly.Load a.dll进来,调用a.dll里面的方法是可以的,但实际是调用了项目里的代码,如果项目里没有a.dll的代码,调用会报错,以上。

    posted on 2017-04-14 13:42 jiahuafu 阅读(...) 评论(...) 编辑 收藏

    展开全文
  • 上篇 Unity3d 调用C++ DLL (Win平台) 介绍了简单的 Unity3d 调用 C++ DLL的方法,但是这样是不够的,这里再讲下通过函数指针让 C++ DLL中回调 Unity3d 的方式。 创建DLL 以及在 Unity3d 中调用 DLL 中函数在上篇中...
  • Unity3D引用dll教程

    2013-07-13 23:39:14
    Unity3D引用dll教程:首先打开vs新建一个项目:建立的项目是c#的类库文件。位置任意。 Unity3D引用dll教程 项目创建好之后就要添加引用,找到Unity3D的安装目录依次打开目录Unity\Editor\Data\Managed,...
  • 如果稍微关注过这方面知识的朋友,应该知道Unity3D做出来的项目是非常容易被反编译的,被反编译后你的所有资源和代码都将会...首先第一篇,我会简单的说明一下怎样在Unity3D里面使用dll动态链接库,然后第二篇会说...
  • Unity3d中使用C++ DLL

    2020-07-29 14:20:37
    Unity3d中使用C++ DLL
  • Unity3d提供了功能可以让我们自己用各种语言编写 Plugin 来在Unity中使用
  • 之前总感觉会封装dll组件的都是大牛级别的程序员做的事情,然后供给菜鸟级别的调用。感觉为了保护自己的源码不会被他人知道,然后就封装一...首先要申明的是,unity3d支持C#语言,但只有pro版本才支持.net2.0,其他版本
  • unity 3d 导入dll时候报错:Internal compiler error. See the console log for more information. output was: Unhandled Exception: System.TypeLoadException: Could not load type 'System.Runtime....
  • unity3D使用dll打包

    2015-09-06 19:07:36
    c#提供了dll打包,但是unity中由于涉及到unity的自身dll,如UnityEngine.dll,我们一般写的很多代码都会涉及到对这个dll的引用,在unity中建代码文件都会默认添加对此dll命名空间的使用,using UnityEngine;...
  • 网上已经有很多文章讲解过Unity3d脚本DLL 解密,基本方法原理都差不多,就是通过HOOK或者调试下断mono_image_open_from_data_with_name这个函数拿到解密后的DLL。这些方法都需要比较专业的知识(Hook或者过反调试),...
  • 之前一篇文章阿赵已经简单的介绍了怎样把自己写的代码打包成dll动态链接库,然后在Unity3D里面用。那么接下来的事情似乎就很简单了,我们在Unity3D里面写脚本,到最后完成时,把核心的代码剪切出去打包成dll文件再放...
  • Unity 3D 调用DLL的方法

    2018-04-22 11:43:10
    1.创建DLL困扰Unity人员的主要问题大概出于Dll不会生成。这个确实比较麻烦,我这里给出一个vs 2008中创建DLL的方法。 1)首先打开vs2008,当然2005或者2003也都差不多。我这里用的是2008. 在C++项目中选择 Win32程序...
  • 大多数游戏都是使用Unity 3D做的,我们逆向分析主要分析\assets\bin\Data\Managed中的Assembly-CSharp.dll文件,当我们用.NET Reflector 或者dnSpy 打开Assembly-CSharp.dll文件时,有时候会发现什么信息也看不到,...
  • 之前一篇文章阿赵已经简单的介绍了怎样把自己写的代码打包成dll动态链接库,然后在Unity3D里面用。那么接下来的事情似乎就很简单了,我们在Unity3D里面写脚本,到最后完成时,把核心的代码剪切出去打包成dll文件再放...
  • 最近研究了下Unity对Dll的调用。查了一些资料,总结如下。 为什么要用DLL? 答:  1:你选择用来开发的编程语言并不被Unity支持(如 F#...答:回答这个问题,首先要解决“怎么创建Unity3d 支持的DLL”和“Unity3D
  • Unity3D 调用C++的DLL的代码## 标题 参考文献: https://blog.csdn.net/penguin_whl/article/details/17616659#commentBox 我使用的是 vs2017生成的DLL 一、VS2017新建动态链接库项目 使用vs2017创建一个 名...
  • 3、单击 “打开” 按钮,选择Unity3d 安装目录下的dll文件,导入ILSpy中,即可查看所有dll文件内容,截图如下 二、效果展示 效果一 效果二 效果三 到这,就可以完全实现unity3ddll文件的反编译。
1 2 3 4 5 ... 20
收藏数 5,669
精华内容 2,267
热门标签
关键字:

dll unity3d