第一次寫博客,有什麼不對的地方,歡迎大家指出
(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,所以咱們需要導入unity的dll,這樣才可以使用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)目前咱們已經寫好了兩個類了,下面我們需要生成dll了, 在VS最上面的菜單欄有一個"生成" - "生成解決方案", 或者直接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框架調低之後好了)