Unity3D方法來隱藏和顯示對象


Unity3D作

dentistdeng|2013-09-30 12:51|35154次瀏覽| Unity(261) 0

在使用unity3d開發游戲的過程中。我們經常會遇到須要隱藏或者顯示的操作,針對這一點,以下做了一些總結。

一、設置Renderer狀態

在游戲的開發中,全部可以被渲染的物體都包括有一個Renderer組件。使用它可以將物體渲染到屏幕上,那么假設禁用了這一組件的話,自然也就實現了物體的隱藏。

以下就是實現這一功能的代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using UnityEngine;
using System.Collections;
public class test : MonoBehaviour {
         public Transform target;
         void Start(){
         }
 
         void OnGUI(){
                 //renderer control
                 if (GUILayout.Button( "display" )){
                         MeshRenderer[] marr = target.GetComponentsInChildren<MeshRenderer>( true );
                         foreach(MeshRenderer m in marr){
                                 m.enabled = true ;
                         }
                 }
                 if (GUILayout.Button( "hide" )){
                         MeshRenderer[] marr = target.GetComponentsInChildren<MeshRenderer>( true );
                         foreach(MeshRenderer m in marr){
                                 m.enabled = false ;
                         }
                 }
         }
}

在這里我做了一個遍歷,由於有的物體可能會有多個面片這樣的情況下就須要把物體的所有面片上的MeshRenderer所有禁用掉。

可是也可能會有一些較為復雜的渲染可能會有Trail Renderer,Line Renderer,Skinned Mesh Renderer,Mesh Renderer等,那就找到它,禁用/激活它來實現隱藏或顯示。

二、設置Active

unity4.x寫法:
1
2
gameObject.SetActive( true ); //顯示物體
gameObject.SetActive( false ); //隱藏物體
unity3.x寫法:
1
2
gameObject.SetActiveRecursively( true );顯示物體
gameObject.SetActiveRecursively( false );隱藏物體

unity4.x會保持當前物體子物體全部的狀態,unity3.x則是假設設置active為true。全部子物體全部變為true。

這也是unity升級后改進的一點。

三、設置Layer

如果現有Layer為:

Default = 0,TransparentFX = 1,Ignore Raycase = 2,Water = 4,MyLayer = 8.

設置相機Camera的Culling Mask為:Default+TransparentFX+Ignore Raycase+Water.

那么當設置物體的Layer為MyLayer時候。物體的Layer層在當前相機被忽略,也就相當於隱藏。

詳細代碼為:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using UnityEngine;
using System.Collections;
public class test : MonoBehaviour {
 
         void OnGUI () {
                 if (GUILayout.Button( "Display" )){
                         gameObject.layer = LayerMask.NameToLayer( "Default" );
                 }
 
                 if (GUILayout.Button( "Hide" )){
                         gameObject.layer = LayerMask.NameToLayer( "MyLayer" );
                 }
         }
}
以上各種方法謹供大家參測試,當選擇應根據實際情況選擇合適的方法來實現隱藏和顯示對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM