Unity3D作
在使用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
);
//隱藏物體
|
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"
);
}
}
}
|