微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Unity3D游戏开发大发彩票源码出售之C++插件接入

创建一个C++ CLR类库项目

  首先我们大发彩票源码出售,需要的请找【大神源码论坛】dsluntan.com,详情咨询企娥3393756370,按照下图中的步骤创建一个C++ CLR项目:

请注意.Net版本问题,重要的事情说三遍,不认真看这里的人出现问题就不要到我这里来评论了,我最讨厌连文章都没有看明白就来和你纠缠不清的人,谢谢。创建好项目后请打开项目属性窗口设置【公共语言运行时支持】节点的值为【安全 MSIL 公共语言运行时支持(/clr:safe)】好了,下面我们找到CLR4Unity.h文件添加ExampleClass声明:
 

  1.   /// <summary>
  2.   /// 一个简单的托管C++示例类
  3.   /// </summary>
  4.   public ref class ExampleClass
  5.   {
  6.   public:
  7.    
  8.   /// <summary>
  9.   /// 产生一个介于min和max之间的整型随机
  10.   /// <returns>整型随机数</returns>
  11.   /// <param name="min">最小值</param>
  12.   /// <param name="max">最大值</param>
  13.   /// </summary>
  14.   static int Random(int min,int max)
  15.   {
  16.   //注意在托管的C++中使用gcnew来代替new
  17.   //我承认C++写CLR代码略显奇葩像是C++和C#语法的混合
  18.   return (gcnew System::Random)->Next(min,max);
  19.   }
  20.    
  21.   /// <summary>
  22.   /// 计算一个整数的平方
  23.   /// <returns>整型数值</returns>
  24.   /// <param name="a">需要平方的数值</param>
  25.   /// </summary>
  26.   static int Square(int a)
  27.   {
  28.   return a * a;
  29.   }
  30.    
  31.   /// <summary>
  32.   /// 返回两个数中的最大值
  33.   /// <returns>整型数值</returns>
  34.   /// <param name="a">参数1</param>
  35.   /// <param name="b">参数2</param>
  36.   /// </summary>
  37.   static int Max(int a,int b)
  38.   {
  39.   if(a<=b){
  40.   return b;
  41.   }else{
  42.   return a;
  43.   }
  44.   }
  45.   };

 显然我们这里定义了三个简单的方法,注意到第一个方法Random依赖于System.Rnadom类,而在托管的C++中是使用gcnew来代替new这个关键字的,所以请尽情感受C#和C++的混搭语法风格吧!这样我们就可以编译得到CLR4Unity.dll这个类库,将这个文件复制到Unity3D项目中的Plugins目录下下,然后将其加入项目引用列表。如果你以为引用就是:
 

using CLR4Unity;

呵呵,我严重怀疑你对.Net的熟悉程度。你没有添加对CLR4Unity.dll的引用,你到底在using什么啊? 

如果你对.NET熟悉到足以无视这里的一切,请闭上眼接着往下看,哈哈!

在C#中添加引用及方法调用 

  接下来我们在Unity3D中创建一个脚本PluginTest.cs,然后在OnGUI方法增加下列代码。可是你要以为这些代码就应该写在OnGUI方法中,抱歉请你先去了解MonoBehavIoUr这个类。什么?添加了这些代码报错?没有using的请自行面壁:

  1.   //调用C++ CLR中的方法
  2.   if(GUILayout.Button("调用C++ CLR中的方法", GUILayout.Height (30)))
  3.   {
  4.   Debug.Log("调用C++ CLR中的方法Random(0,10):" + ExampleClass.Random(0,10));
  5.   Debug.Log("调用C++ CLR中的方法Max(5,10):" + ExampleClass.Max(5,10));
  6.   Debug.Log("调用C++ CLR中的方法Square(5):" + ExampleClass.Square(5));
  7.   }

C++ Native

创建一个C++动态链接库项目 

  首先我们按照下图中的步骤来创建一个C++ Win32项目:

好了,接下来我们找到Native4Unity.cpp写入下列代码

  1.   // Native4Unity.cpp : 定义 DLL 应用程序的导出函数
  2.   //
  3.    
  4.   #include "stdafx.h"
  5.   //为了使用rand()函数引入C++标准库
  6.   #include "stdlib.h"
  7.    
  8.   /// <summary>
  9.   /// 产生一个介于min和max之间的整型随机
  10.   /// <returns>整型随机数</returns>
  11.   /// <param name="min">最小值</param>
  12.   /// <param name="max">最大值</param>
  13.   /// </summary>
  14.   extern "C" __declspec(dllexport) int Random(int min,int max)
  15.   {
  16.   return rand() % (max - min + 1) + min;
  17.   }
  18.    
  19.   /// <summary>
  20.   /// 返回两个数中的最大值
  21.   /// <returns>整型数值</returns>
  22.   /// <param name="a">参数1</param>
  23.   /// <param name="b">参数2</param>
  24.   /// </summary>
  25.   extern "C" __declspec(dllexport) int Max(int a ,int b)
  26.   {
  27.   if(a<=b){
  28.   return b;
  29.   }else{
  30.   return a;
  31.   }
  32.   }
  33.    
  34.   /// <summary>
  35.   /// 计算一个整数的平方
  36.   /// <returns>整型数值</returns>
  37.   /// <param name="a">需要平方的数值</param>
  38.   /// </summary>
  39.   extern "C" __declspec(dllexport) int Square(int a)
  40.   {
  41.   return a * a;
  42.   }

 和C++ CLR类似,我们使用标准的C++语言来实现同样的功能。注意到rand()这个函数是C++标准库里的内容,所以我们在文件开头增加了对stdlib.h这个头文件的引用。这里需要注意的一点是:所有希望使用DllImport引入C#的C++方法都应该在方法声明中增加__declspec(dllexport)关键字,除非它在.def文件中对这些方法进行显示声明。关于.def文件的相关定义大家可以到MSDN上检索,这些都是属于C++编译器的内容,这里不再详细说了。

在C#中使用DllImport封装方法

  将编译好的Native4Unity.dll复制到Plugins目录中后,下面我们要做的事情就是在C#里对这些方法进行封装或者说是声明:

  1.   [DllImport("Native4Unity")]
  2.   private extern static int Random(int min, int max);
  3.    
  4.   [DllImport("Native4Unity")]
  5.   private extern static int Max(int a, int b);
  6.    
  7.   [DllImport("Native4Unity")]
  8.   private extern static int Square(int a);
  9.    

然后就是简单地调用啦:

  1.   //调用C++ Native中的方法
  2.   if(GUILayout.Button("调用C++ Native中的方法", GUILayout.Height (30)))
  3.   {
  4.   Debug.Log("调用C++ Native中的方法Random(0,10):" + Random(0, 10));
  5.   Debug.Log("调用C++ Native的方法Max(5,10):" + Max(5, 10));
  6.   Debug.Log("调用C++ Native中的方法Square(5):" + Square(5));
  7.   }

最终程序的运行效果如图: 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐