- Unity 4 3D開發(fā)實戰(zhàn)詳解
- 峰 杜化美 張月霞 索依娜編著
- 72字
- 2019-01-01 21:15:11
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 }
- Java Web程序開發(fā)范例寶典
- MacTalk 跨越邊界
- 企業(yè)性能測試:體系構(gòu)建、落地指導(dǎo)與案例解讀
- 移動Web實現(xiàn)指南:面向移動設(shè)備的網(wǎng)站優(yōu)化、開發(fā)和設(shè)計
- 網(wǎng)絡(luò)DevOps平臺規(guī)劃、設(shè)計與實踐:基于企業(yè)架構(gòu)(EA)和領(lǐng)域建模(DDD)的方法
- 服務(wù)端開發(fā):技術(shù)、方法與實用解決方案
- 搜索架構(gòu)之道:App中的搜索系統(tǒng)設(shè)計與優(yōu)化實踐
- Unity 2017經(jīng)典游戲開發(fā)教程:算法分析與實現(xiàn)
- 移動終端應(yīng)用軟件開發(fā)實戰(zhàn)
- 統(tǒng)信UOS應(yīng)用開發(fā)詳解
- 構(gòu)建移動網(wǎng)站與APP:ionic移動開發(fā)入門與實戰(zhàn) (跨平臺移動開發(fā)叢書)
- 鋒利的jQuery(第2版)
- OpenGL ES 2.0游戲開發(fā)(上卷)
- 云原生應(yīng)用開發(fā)實戰(zhàn):基于.NET開發(fā)框架及Kubernetes容器編排技術(shù)
- 程序員必讀之軟件架構(gòu)