官术网_书友最值得收藏!

4.4 與銷毀相關(guān)的方法

Destroy即銷毀方法,可以對項目中的游戲?qū)ο螅M件或者資源進行刪除銷毀。在一個項目中經(jīng)常會聲明一些臨時的變量或者資源,用完即失去了用處,這時就可以認為出現(xiàn)了垃圾,垃圾不僅會影響項目的運行效率而且還可能影響項目的正常運行,這時就需要調(diào)用Destroy方法。

Destroy方法不僅處理垃圾,而且在一些特定的情況下需要對項目中的游戲?qū)ο蟆⒔M件或者資源進行銷毀操作,以實現(xiàn)具體的功能操作。因此 Destroy 方法也是項目開發(fā)過程中必不可少的方法,下面講解Destroy具體的方法,具體的信息如表4-56所示。

表4-56 不同功能的Destroy方法

下面將對各個方法進行詳細介紹,將用真實的代碼片段對函數(shù)的用法和用途進行講解。

4.4.1 Object.Destroy方法

Object.Destroy方法可以將游戲?qū)ο罅⒓翠N毀,也可以設(shè)置特定的時間以后銷毀,如果是一個組件,將會從對應(yīng)的游戲?qū)ο笾幸瞥N毀,如果對象是一個游戲?qū)ο螅阡N毀時,其組件和其子對象將被轉(zhuǎn)移。

下面將用一段代碼片段來說明Object.Destroy方法具體的用法與用途,具體實現(xiàn)如下面的代碼片段所示:

1 Destroy (gameObject);      //銷毀指定的游戲?qū)ο?/p>

2 Destroy (this);       //刪除指定游戲?qū)ο髮嵗膖his腳本

3 Destroy (rigidbody);      //刪除指定游戲?qū)ο蟮膭傮w組件

4 Destroy (gameObject, 5);     //從現(xiàn)在開始5s后銷毀指定的游戲?qū)ο?/p>

5 function Update () {      //聲明Update方法

6 if (Input.GetButton ("Fire1") && GetComponent (FooScript))//判斷是否得到“Fire1”按鈕和FooScript腳本

7  Destroy (GetComponent (FooScript)); //若滿足條件,則銷毀得到的FooScript腳本

8 }

4.4.2 Network.Destroy方法

Network.Destroy方法可以銷毀整個網(wǎng)絡(luò)上的對象,這些網(wǎng)絡(luò)上的對象可以在本地銷毀也可以在遠程摧毀,首先用一段代碼片段來說明Network.Destroy方法摧毀網(wǎng)絡(luò),具體實現(xiàn)如下面的代碼片段所示:

1 var timer : float = 0;       //定義一個float型的時間變量

2 function Awake () {        //聲明Awake方法

3 timer = Time.time;        //將當前時間賦給timer

4 }

5 function Update() {        //定義Update方法

6  if (Time.time - timer > 2) {    //判斷是否當前時間比timer多2s

7  Network.Destroy(GetComponent(NetworkView).viewID);//如果條件滿足,則銷毀指定網(wǎng)絡(luò)

8  } }

Network.Destroy方法還可以銷毀網(wǎng)絡(luò)上的游戲?qū)ο螅旅鎸⒂靡欢未a片段來說明,具體實現(xiàn)如下面的代碼片段所示:

1 var timer : float = 0;       //定義一個float型的時間變量

2 function Awake () {        //聲明Awake方法

3  timer = Time.time;       //將當前時間賦給time

4 }

5 function Update() {        //定義Update方法

6  if (Time.time - timer > 2) {    //判斷是否當前時間比timer多2s

7   Network.Destroy(gameObject);    //如果條件滿足,則銷毀指定的游戲?qū)ο?/p>

8  } }

4.4.3 EditorWindow.OnDestroy方法

EditorWindow.OnDestroy方法的作用是在EditorWindow窗口關(guān)閉時被調(diào)用,下面將用一段代碼來說明,具體實現(xiàn)如下面的代碼片段所示:

1 class TearMeshApart extends EditorWindow {//創(chuàng)建TearMeshApart類并繼承EditorWindow

2  var noiseCounter = 0;    //聲明一個初始值為0的變量noiseCounter

3  var distortionRange = 0.1;   //聲明一個初始值為0.1的變量noiseCounter

4  @MenuItem("Example/Distortionate Mesh")

5  static function Init() {     //聲明靜態(tài)的Init方法

6   var window = GetWindow(TearMeshApart); //繪制一個窗口

7   window.position = Rect(0,0,200,80);  //設(shè)置窗口的具體坐標位置

8   window.Show();       //調(diào)用窗口顯示的Show方法

9  }

10  function OnGUI() {       //聲明OnGUI方法

11   GUILayout.Label("Select an object to distortionate");//利用GUI布局繪制一個標簽

12   if(GUILayout.Button("Distortionate")) { //判斷是否單擊Distortionate按鈕

13   AddNoiseToMesh();      //調(diào)用AddNoiseToMesh方法

14   }

15   if(GUILayout.Button("Close")) {   //判斷是否單擊Close按鈕

16   this.Close();       //調(diào)用Close方法

17   }

18  }

19  function AddNoiseToMesh() {     //聲明AddNoiseToMesh方法

20   //聲明變量objectMesh并賦初值

21   var objectMesh =Selection.activeTransform ?

22    Selection.activeTransform.GetComponent(MeshFilter) : null;

23   if(!objectMesh) {      //判斷是否存在objectMesh

24   Debug.LogError("Please select a Game Object with a MeshFilter");//打印提示信息

25   return;

26   }

27   var verts : Vector3[] = objectMesh.sharedMesh.vertices;//聲明一個三維坐標數(shù)組

28   for(var i = 0; i < verts.Length; i++)//對verts的長度做循環(huán)

29   verts[i] += Vector3(    //為數(shù)組賦初值

30    Random.Range(-distortionRange, distortionRange) - distortionRange/2,

31    Random.Range(-distortionRange, distortionRange) - distortionRange/2,

32    Random.Range(-distortionRange,distortionRange)-distortionRange/2);

33   objectMesh.sharedMesh.vertices = verts;

34   noiseCounter++;       //變量noiseCounter自加

35  }

36   function OnDestroy() {//聲明OnDestroy方法

37   Debug.Log("Deformed the object " + noiseCounter + " times.");//打印提示信息

38  } }

4.4.4 MonoBehaviour.OnDestory方法

MonoBehaviour.OnDestory方法的作用是在MonoBehaviour類摧毀時被調(diào)用,下面將用一段代碼來說明,具體實現(xiàn)如下面的代碼片段所示:

1 function OnDestroy () {       //聲明OnDestroy方法

2  print("MonoBehaviour was destroyed");  //打印提示信息

3 }

4.4.5 ScriptableObject.OnDestory方法

ScriptableObject.OnDestory 方法的作用是在腳本化的對象將被摧毀時被調(diào)用,下面將用一段代碼來說明,具體實現(xiàn)如下面的代碼片段所示:

1 function OnDestroy () {       //聲明OnDestroy方法

2  print("ScriptableObject was destroyed"); //打印提示信息

3 }

4.4.6 Object.DestoryImmediate方法

Object.DestoryImmediate方法的作用是立刻刪除游戲?qū)ο蟆⒔M件或者資源,如果是一個組件,將會從對應(yīng)的游戲?qū)ο笾幸瞥N毀,如果對象是一個游戲?qū)ο螅阡N毀時,其組件和子對象將被移除。

下面將用一段代碼片段來說明Object.Destory方法具體的用法與用途,具體實現(xiàn)如下面的代碼片段所示:

1 DestroyImmediate (gameObject);  //立即銷毀指定的游戲?qū)ο?/p>

2 DestroyImmediate (this);   //立即刪除指定游戲?qū)ο髮嵗膖his腳本

3 DestroyImmediate (rigidbody);  //立即刪除指定游戲?qū)ο蟮膭傮w組件

4 function Update () {    //聲明Update方法

5 if (Input.GetButton ("Fire1") && GetComponent (FooScript))//判斷是否得到“Fire1”按鈕和FooScript腳本

6  DestroyImmediate (GetComponent (FooScript));//若滿足條件,則立即銷毀得到的FooScript腳本

7 }

主站蜘蛛池模板: 三都| 修武县| 星座| 宜君县| 芷江| 介休市| 闽清县| 靖宇县| 溧阳市| 松原市| 古浪县| 营山县| 江达县| 阿坝| 威远县| 罗山县| 含山县| 康定县| 扎鲁特旗| 金塔县| 赤水市| 天长市| 阳泉市| 丰都县| 敖汉旗| 金川县| 莎车县| 泉州市| 金沙县| 贺兰县| 兴山县| 陕西省| 宿迁市| 师宗县| 武威市| 高阳县| 黑山县| 上杭县| 封丘县| 三门峡市| 铁岭县|