dentistdeng|2013-09-30 12:51|
在使用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");
}
}
}
|