最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
unity 中怎样设置图片遮罩随时间显示和隐藏
在开发过程中,我们常常需要对物体进行隐藏和显示操作。下面将详细介绍在Unity中实现物体隐藏和显示的几种方法。
一、设置Renderer状态
每一个可以被渲染的物体都会包含一个Renderer组件,其作用是将物体渲染到屏幕上。若禁用这个组件,自然就能实现隐藏物体的效果。
代码示例
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
Unity 4.x写法
gameObject.SetActive(true); // 显示物体
gameObject.SetActive(false); // 隐藏物体
Unity 3.x写法
gameObject.SetActiveRecursively(true); // 显示物体
gameObject.SetActiveRecursively(false); // 隐藏物体
Unity 4.x会保持当前物体子物体所有的状态,而Unity 3.x如果设置active为true,所有子物体都会变为true,这也是Unity升级后改进的一点。
三、设置Layer
假设现有Layer为:
Default = 0TransparentFX = 1Ignore Raycase = 2Water = 4MyLayer = 8
设置相机Camera的Culling Mask为:Default + TransparentFX + Ignore Raycase + Water。那么当设置物体的Layer为MyLayer时,物体的Layer层在当前相机被忽略,也就相当于隐藏。具体代码如下:
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");
}
}
}
综上所述,在Unity中实现物体隐藏和显示的代码并不复杂,大家认真研究一下就能掌握。