享受一下大神的感觉, unity中用C#自己封装dll

第一次写博客,有什么不对的地方,欢迎大家指出

(1)打开vs(本人用的是vs2013)然后建一个项目,如下图所示,选择.ENT3.5的框架,或者低于3.5,这是因为Unity里面用的框架可能在3.5以下,不然会报错,然后给自己的dll改名字选择路径(这个路径等一下要用)

(2)进入项目之后,如果你不需要用到unity里面的类或者封装的方法,你就直接写你想要封装的方法,如下:

 

 1 namespace MyDll   //命名空间(在unity里面是没有namespace)所里在unity里面使用的时候,需要在脚本上面加using MyDll
 2 {
 3     public static class Compute    //类名    
 4     {
 5         public static int GetMax(params int[] arr)    //静态类,当然这里你可以自己写成非静态的也可以,只不过在Unity里面需要实例化
 6         {
 7             for (int i = 0; i < arr.Length; i++)  //这里是一个冒泡排序
 8             {
 9                 for (int j = 0; j < arr.Length - i - 1; j++)
10                 {
11                     if(arr[j] >arr[j+1])
12                     {
13                         int temp = arr[j];
14                         arr[j] = arr[j+1];
15                         arr[j + 1] = temp;
16                     }
17                 }
18             }
19             return arr[arr.Length - 1];
20         }
21     }
22 }

当然,咱们主要讲的是unity,但是vs里面的类是继承不了MonoBehaviour,所以咱们需要导入unitydll,这样才可以使用unity里面封装的方法

导入步骤

 

然后选择左边浏览 最近 下面浏览,选择你要导入的unity封装的dll的路径,点击确定就可以导入成功了,我这里导入的是 UnityEngine.dll

(unity封装的dll你可以在unity里面建一个项目,建一个脚本,打开vs右边有个引用,打开之后,鼠标选中,在下面就可以看到路径了)

然后写跟上面一样添加一个类(右键MyDll-添加)例如

 

 1 using UnityEngine;  //导入命名空间(当然如果需要使用UI的话,你只需要再倒入)UnityEngine.UI就可以了,方法都是一样的
 2 /// <summary>
 3 /// 封装一个摄像机控制脚本
 4 /// </summary>
 5 
 6 [AddComponentMenu("Camera/Controller")]  //这是把该类最为一个组件添加到里面unity属性面板下面AddComponent的菜单栏,字符串表示路径
 7 public class CameraController : MonoBehaviour  (这个类你也可以写到自己想要的命名下,在用的时候需要导入命名空间就行了)
 8 {
 9     public Transform target;  //摄像机跟随的目标
10     private Vector3 offset;  //目标和摄像机的偏移量
11 
12 
13     void Awake()
14     {
15         offset = transform.position - target.position;  //求偏移量
16         transform.LookAt(target.position);  //初始看向目标点
17     }
18 
19 
20     private void CameraFollow()
21     {
22         transform.position = target.position + offset;  //保持摄像机和目标点的偏移量不变,就实现了跟随
23     }
24 
25 
26     void Update()
27     {
28         CameraFollow();
29         CameraScroll();
30     }
31 
32 
33     private void CameraScroll()
34     {
35         if (Input.GetAxis("Mouse ScrollWheel") != 0)
36         {
37             Vector3 temp = offset.normalized * Input.GetAxis("Mouse ScrollWheel"); //求出应该滑动的方向和距离
38             offset = offset + temp;  //应该移动所处的偏移量
39 
40 
41         }
42     }
43 }

(3)目前咱们已经写好了两个类了,下面我们需要生成dllVS最上面的菜单栏有一个"生成" - "生成解决方案", 或者直接F6

(4)然后我们到自己的刚才的项目文件夹里面,找到dll文件(因为很好找,这里我就不细说了)

(5)找到之后把他导入到我们的unity工程里面,放在Project里面(尽量建一个文件夹Plugins,放在里面,以防出错)

(6)这时候我就可以用了,下面是使用的例子

6.1这里先说一下unity封装的用法

6.1.1如果你刚才在类上面加了[AddComponentMenu("Camera/Controller")]   就可以再属性面板AddComponent找到Camera-Controller就是你封装的这个类,直接选择就可以

因为在封装的时候,已经继承了MonoBehaviour ,所以是可以继承的(如果没有加上这句代码,应该也是可以加载的)

6.2再说一下封装的算法

6.2.1如果你刚才加了命名空间,在使用里的方法的时候,需要using空间名然后使用的方法就和平时的一样了,如下

 1 using UnityEngine;
 2 using System.Collections;
 3 using MyDll;  //导入命名空间
 4 
 5 public class TTTT : MonoBehaviour 
 6 {
 7    void Awake()
 8     {
 9         Debug.Log(Compute.GetMax(3,10,7,5,4));   //刚才封装的方法
10     }
11 }

(7)最后一点,如果没有调框架的话,会出现以下错误(这个困惑我很长时间,因为我看到其他的帖子上面都没有提到怎么可以解决这个错误的,后来把.NET框架调低之后好了)

 

posted @ 2015-10-20 17:17  狂奔的老鳖  阅读(8727)  评论(0编辑  收藏  举报